12-1 객체지향의 특징과 클래스
- 객체란?
객체 : 우리 주변의 모든 것들, 자시만의 고유한 특성과 교유의 행동을 가지고 있음
속성(attribute) : 객체가 가지는 자신만의 고유한 특성, 필드 또는 멤버변수로도 불림
메서드(method) : 객체가 가지는 행동
- 객체지향 언어
실제 세상에 가깝게 모델링 하여 객체로 표현
>> 객체들 간의 관계, 상호 작용 설계
>> 각 객체를 클래스로 만듦 (이때 클래스란 객체를 만들기 위한 설계도 또는 틀)
- 객체지향의 특징
캡슐화
캡슐로 객체를 감싸서 내부를 보호하고 볼 수 없게 하는 것
객체의 가장 본질적인 특징
캡슐처럼 중요한 정보들은 비공개로 둠
비공개 속성에 접근하기 위해서는 클래스 안의 메서드에서만 접근 가능하도록 설계
상속
부모 클래스의 속성과 메서드를 자식 클래스에 물려줄 수 있음
여러 클래스의 공통된 속성을 부모 클래스에 정의하고, 각 하위 클래스에서는 그에 맞는 특화된 속성과 메서드를 정의할 수 있음
다형성
같은 이름의 행동이(메서드가) 클래스 혹은 객체에 따라 다르게 구현하는 것
부모로부터 받은 동일한 행동에 대해서 각각 서로 다른 동작을 수행하는 것
- 클래스
클래스 : 객체를 만들기 위한 설계도 또는 틀
인스턴스 : 클래스를 통해서 만들어진 객체, 보통 객체와 분리하기 위해서 인스턴스라는 용어를 사용
class 문의 구조
class 클래스명 :
속성 정의
행동 정의
예시) 클래스 인간과 인스턴스 나의 정의
인간의 속성 : 이름, 나이, 직업, 키
인간의 행동 : 공부를 함, 음악을 들음, 밥을 먹음
class human:
속성 정의 - 이름, 나이, 직업, 키
행동 정의 - 공부하기, 음악듣기, 밥먹기
나(인스턴스) = 인간
나.이름 = 이하늘
나.나이=21
나.키=180
나.공부한다()
인스턴스(나) = 클래스(인간)를 통해 만들어진 객체
- 클래스의 선언
휴대폰의 속성 : 모델명, 제조사, 색
휴대폰의 행동 : 전화걸기, 전화받기, 문자메세지 보내기
예시) 속성 선언
- 클래스 메서드 선언 (객체의 속성과 행동 중 행동)
메서드는 함수 형식으로 선언
메서드의 첫번째 매개변수는 관례적으로 self를 지정
self : 객체 자신을 인자값으로 넘김으로써 함수 내에서 클래스의 속성 및 메서드에 접근 가능하도록 함
- 인스턴스 생성
인스턴스(s1) : 클래스를 통해 만들어진 객체
속성과 메서드는 속성접근자 .(점)을 이용하여 실행한다.
s1.model
s1.info()
- 이름 공간
클래스 정의 :
클래스 객체 생성
독립적인 이름공간 생성
속성과 매서드 존재
익스턴스 객체 생성 :
클래스의 이름을 사용해 함수를 호출하는 형태
클래스와 동일하게 독립적인 이름공간 생성
처음에는 클래스와 인스턴스는 동일한 속성과 메서드를 가짐
인스턴스 객체의 속성이 변경되면 인스턴스 이름공간에 변경된 데이터를 저장
<실행 결과>
모델은 iphone 입니다.
samsung 에서 만들었습니다.
색깔은 black 입니다.
모델은 iphone 입니다.
samsung 에서 만들었습니다.
색깔은 black 입니다.
모델은 iphone 입니다.
samsung 에서 만들었습니다.
색깔은 white 입니다.
- 클래스 객체에서 멤버변수(속성) 추가
파이썬에서는 클래스 및 인스턴스 객체에 동적으로 멤버변수(속성) 추가 가능
예시) 클래스 객체에 새로운 멤버 변수 price 추가
<실행 결과>
0
0
100
200
인스턴트 객체를 통해 변수나 함수 이름을 찾을 때, 즉 print(s1.price)를 할 때
인스턴스 객체의 이름 공간 > 클래스 영역 > 전역영역으로 이름을 찾음
이 경우 클래스 영역에서 price가 추가되었으므로 에러가 발생하지 않음.
만약 인스턴트 객체에 동적으로 멤버 변수를 추가하는 경우
추가한 인스턴스 객체를 통해서만 접근 가능
다른 인스턴스 객체(s2)에서는 오류 발생
예시)
- 클래스 객체에서 주의 사항
클래스 메서드 내에서 self를 통해서 멤버변수에 접근해야함
전역변수와 클래스 변수 이름이 동일할 경우 에러를 발생시키지 않으면서, 잘못된 data를 전달할 수 있음
예시)
- 생성자 / 소멸자 메서드
인스턴트 객체를 생성할 때 초기화 작업을 위해 생성자 메서드 지원
메모리 해제 등의 종료작업을 위해서 소멸자 메서드 지원
생성자 메서드 : 인스턴트 객체가 생성될 때 자동으로 호출 됨
소멸자 메서드 : 인스턴트 객체의 레퍼런스 카운트가 0이 될 때 호출됨
__init__
클래스 객체의 초기화, 주로 멤버변수의 값들을 초기화하는 작업
예시)
- 매직메서드
매직메서드 : 함수명이나 변수명 앞뒤로 '__"가 있는 경우에는 특별한 용도로 미리 정의 한 것
__init__ : 클래스 객체의 초기화
__del__ : 종료작업을 위한 소멸자
__new__ : 인스턴트 객체가 생성되면 처음 실행하는 동작을 지정
__getattribute__ : 객체의 속성을 참조할 때 무조건 호출
__getattr__ : 참조 시, 속성이 존재하지 않을 때 호출
__setattr__ : 객체의 속성을 변경할 때 호출
12-2 캡슐화와 상속
- 캡슐화
캡슐로 객체를 감싸서 내부를 보호하고 볼 수 없게 하는 것
객체의 가장 본질적인 특징
중요한 정보들은 비공개로 둠
클래스 안의 메서드에서만 접근 가능
__를 속성 앞에 붙여서 비공개로 사용
클래스 바깥쪽에서 접근할 수 없음
클래스 안에서만 접근 가능
예시)
- 상속
부모클래스의 모든 속성(데이터, 메서드)을 물려줄 수 있음
각 클래스마다 특화된 메서드와 멤버변수를 정의하여 중복코드 작성을 방지하고 유지보수가 용이함
추상화 : 여러 클래스들의 공통된 특징 등을 추출해 기본 클래스로 작성하는 것, 추상화의 결과물이 부모 클래스임
issubclass : 상속 관계에 있는 두 클래스의 관계를 알 수 있는 함수
'공부 > 【Python】' 카테고리의 다른 글
【파이썬프로그래밍】 14주차- 유용한 라이브러리 (0) | 2024.05.13 |
---|---|
【파이썬프로그래밍】 13주차- 모듈과 패키지 (0) | 2024.05.13 |
【파이썬프로그래밍】 11주차- 예외 처리 (0) | 2024.05.11 |
【파이썬프로그래밍】 10주차- 함수 (0) | 2024.05.11 |
【파이썬프로그래밍】 9주차- 파일쓰기 (0) | 2024.05.11 |