클래스는 함수들과 변수들을 모아서 데이터를 관리할 수 있는 개념이다. 클래스를 생성함으로써 이미 작성된 코드를 또 다시 작성하지 않아도 된다. 그러니까 재사용성을 줄여준다.
또한, 클래스는 함수와 변수를 모두 담을 수 있기 때문에 다양한 정보와 기능들을 묶어서 사용할 수 있게 된다.
class parent():
def __init__(self):
self.child = 'child'
def say(self, name):
self.child = name
print('I have a', self.child)
parent_class = parent() # class instance 생성
type(parent_class) # <class '__main__.parent'> 출력됨
인스턴스란 클래스에 의해서 만들어진 객체이다. 예를 들어서 붕어빵 틀로 예시를 들면 class는 붕어빵 틀이고, 인스턴스는 붕어빵 틀에서 구워져서 나온 붕어빵이다.
class parent():
def __init__(self):
self.child = 'child'
__init__ 메소드는 클래스의 속성을 생성해주는 역할을 한다. 생성자 함수라고도 불리며, 이 함수는 클래스가 인스턴스화 될 때 사용되는 함수이다.
클래스 내에서 정의된 함수를 "메소드"라고 부르는데, 메소드의 첫번째 인자는 항상 self가 들어가게 되어있다. 위에서 정의한 parent의 say 메소드를 작성할 때, def say(name)이라고 작성했다고 치면 say 메소드를 호출하지 않는 한 에러는 발생하지 않는다. 하지만 say 메소드를 실행하려고 하면 바로 아래와 같은 에러가 나버린다.
class parent():
def say(name):
child = name
print('I have a', child)
parent_class = parent()
parent_class.say('Hyewon')
say는 인자를 1개로 설정했는데, 2개가 주어졌다는 뜻이다. 이게 어떻게 된 일이냐면 파이썬이 자동으로 self를 인자로 전달하지만 자동으로 받아주진 않기 때문에 발생한 에러이다.
여기서 self란 현재 인스턴스 객체를 가리키는 기능을 해준다.
변수의 이름 앞에 \싱글 언더스코어를 사용한 변수를 private처럼 사용할테니 외부에서 접근하지 말라는 뜻을 가진 변수이다. (import할 때는 싱글 언더스코어를 붙인 변수는 import 해 오지 않지만 사용은 가능하다)
외부에서 볼 때는 없는 것처럼 보이지만 실제로는 접근이 가능한 변수이다. 이는 dir()을 사용해서 확인해볼 수 있다.
변수의 이름 앞에 더블 언더스코어를 사용하는 변수도 싱글 언더스코어를 사용한 변수와 마찬가지로 private하게 사용한다는 의미를 가진 변수이다. 더블 언더스코어가 싱글 언더스코어보다 더 private하다는 점이다.
더블 언더스코어를 쓸 경우에는 외부에서 접근이 불가능하고, 만약 접근하려고 시도한다면 AttributeError가 뜨게 된다.
데코레이터는 메소드를 변수처럼 취급할 수 있도록 해준다. 메소드를 작성할 때 바로 위에 @property를 작성하면 바로 아래 적혀있는 메소드는 변수처럼 접근할 수 있게 되는 것이다.
변수처럼 접근할 수 있게 만들어주면 그 뒤에는 해당 특성의 이름을 사용해서 setter/getter를 설정할 수도 있다.
~~ 내용 추가 예정~~