객체
객체(object)는 특정 타입의 인스턴스(instance) 이다.
- 1, 1000, 930 모두 int의 인스턴스
- 'hi', 'sun'은 모두 string의 인스턴스
- [232, 1], []은 모두 list의 인스턴스
# int 클래스
a = 1
# 위의 코드는 사실상 다음 코드와 동일
a = int(1)
# 즉, int라는 클래스를 활용하여 a라는 instance를 찍어내는 것이다.
객체의 특징
- 타입(type) : 어떤 연산자(operator)와 조작(method)이 가능한가?
- 속성(attribute) : 어떤 상태(data)를 가지는가?
- 조작법(method) : 어떤 행위(함수)를 할 수 있는가?
is 연산자
- 객체의 아이덴티티를 검사하는 연산자
type(10) is int
=> True
isinstance 함수
- isinstance(object, classinfo)
- 인자로 넘겨받은 object가 classinfo 의 인스턴스인가? 를 확인
- classinfo의 subclass에 의해 object가 만들어진 경우에도 True 반환
isinstance(0, (int, bool, complex))
=> True
객체 - 속성
<object>.<attribute>- 속성은 객체의 상태/데이터
객체 - 메서드
<object>.<method>- 메서드는 특정 객체에 적용될 수 있는 행위를 의미함
- 일반적으로 클래스 내부에 정의된 함수임
- 기존 함수와는 다르게, 특정 객체가 메서드를 호출한다라고 이해하면 됨
# str 클래스 내부...
class str:
...
def capitalize(self):
...
# 호출
'text'.capitalize()
객체 지향 프로그래밍
Object-Oriented-Programming 이라고 하며, 컴퓨터 프로그래밍의 패러다임 중 하나임
컴퓨터 프로그램을 명령어의 목록으로 보는 관점에서 벗어나, 여러 개의 독립딘 단위, 즉
객체들의 모임으로 파악하고자 하는 것이다.반대의 개념으로 절차 지향 프로그래밍(Procedual Programming)이 있음
왜 OOP를?
- 현실 세계를 프로그램 설계에 반영하기 위함 - 이를 추상화라 한다
클래스와 인스턴스
- 클래스 정의, 인스턴스 생성, 메서드 호출, 속성
- 클래스를 정의하고, 인스턴스들을 만들어 활용함
- 클래스: 객체들의 분류(class)
- 인스턴스 : 하나하나의 실체. 행동 대장
- 클래스의 이름은 Pascal case를, 메서드는 snake case를 따른다.
속성
- 특정 데이터 타입/클래스의 객체들이 가지게 될 상태/데이터를 의미
메서드
- 특정 데이터 타입/클래스의 객체가 공통적으로 호출할 수 있는 행위(함수)
self
인스턴스 자기 자신
인스턴스 메서드는 호출 시, 첫 번째 인자로 인스턴스 자신이 전달되도록 설계됨
매개변수 이름으로 self 를 지정하도록 약속
'apple'.capitalize()
# 위 코드는 다음 코드와 사실상 동일
str.capitalize('apple')
예시
# 클래스 예시
class Person:
def __init__(self, name): # (생성자)메서드
self.name = name # 속성
print('{name}이 생성되었습니다.')
def __del__(self):
print('{self.name}이 소멸되었습니다.')
def talk(self): # 인스턴스 메서드
return 'Hi, my name is {self.name}'
생성자(constructor)
인스턴스 객체가 생성될 때 호출되는 메서드
위 예시 참고
소멸자(destructor)
- 인스턴스 객체가 소멸되기 직전 호출되는 메서드
- 위 예시 참고
매직 메서드
- double underscore(__)가 있는 메서드는 특수한 동작을 위해 만들어진 메서드로, 스페셜 메서드 혹은 매직 메서드라고 불림
- 어떤 것들이 있나?
# 여러가지 매직 메서드
- __str__(self), __repr__(self)
- __le__(self, other), __eq__(self, other)
- 사용예시
class Person:
def __init__(self, name, height): # (생성자)메서드
self.name = name # 속성
self.height = height # 속성
print('키가 {height}인 {name}이 생성되었습니다.')
def __del__(self):
print('{self.name}이 소멸되었습니다.')
def talk(self): # 인스턴스 메서드
return 'Hi, my name is {self.name}'
def __gt__(self, other):
return self.heigt > other.height # 객체간 > 연산자로 비교했을 때 해당 내용 리턴
# 이 경우, 각 개체가 갖고 있는 height 속성값 크기 비교
# 결과 확인
p1 = Person('sun', 171)
p2 = Person('Hun', 201)
p1 > p2
=> 키가 171인 sun이 생성되었습니다.
=> 키가 201인 hun이 생성되었습니다.
=> False
댓글