클래스
- 붕어빵 틀
- 변수와 함수를 묶어서 하나의 새로운 객체(타입)으로 만드는 것
인스턴스
- 붕어빵 (슈붕파 손들어~)
- 붕어빵 틀에 반죽을 넣어 만들어진 붕어빵
class BusinessCard:
def set_info(self,name,email,addr):
self.name=name
self.email=email
self.addr=addr
→ set_info 메서드는 네 개의 인자를 받는데 name,email,addr은 사용자로부터 받은 데이터를 메서드로 전달할 때 사용되는 인자이다. 그렇다면 self는 무엇일까?
클래스 내부에 정의된 함수(메서드)의 첫번째 인자는 반드시 self여야 한다.
class Foo:
def func1():
print("func 1")
def func2(self):
print("func 2")
이제 해당 클래스에 대한 인스턴스를 생성하고 인스턴스 메서드를 호출해보자.
f = Foo() # Foo에 대한 인스턴스
f.func2()
>> func 2
f.func1()
>> Typeerror: func1() takes 0 positional arguments but 1 was given
- func2 메서드는 인자가 self 뿐이므로 메서드 호출 시에는 인자를 전달할 필요가 없이 정상적으로 기능이 작동한다.
- 왜냐하면 첫번째 인자 self 값은 파이썬이 자동으로 넘겨주기 때문이다.
- 그러나 func1 메서드와 같이 정의할 때부터 아무 인자도 없는 경우에는 오류가 발생한다.
- 왜냐하면 파이썬 메서드의 첫번째 인자로 항상 인스턴스가 전달되기 때문이다.
더 이해하기 위해 파이썬 내장함수 id를 이용하여 인스턴스가 메모리에 할당된 주소값을 확인해보자.
class Foo:
def func1():
print("func 1")
def func2(self):
print(id(self))
print("func 2")
f = Foo()
id(f)
>> 43219856
- Foo 클래스에 대한 인스턴스가 메모리의 43219856번지부터 할당돼있음을 확인할 수 있다.
- 즉, 클래스 내에 정의된 self는 클래스 인스턴스임을 알 수 있다.
정리
- self는 객체의 인스턴스 그 자체이다.
- 즉, 객체 자기 자신을 참조하는 매개변수이다.
- 객체지향 언어에서와는 달리 파이썬은 메서드를 정의할 때 self를 명시한다.
- 메서드를 불러올 때 self는 자동 전달되고, self를 사용하여 클래스 내에 정의된 멤버에 접근할 수 있다.
'Python > 개념' 카테고리의 다른 글
자료형 (0) | 2023.04.08 |
---|---|
기초100제 문법 (0) | 2023.01.09 |
투 포인터 (0) | 2022.09.20 |
파이썬 라이브러리 (0) | 2022.09.11 |
문자열 (0) | 2022.09.06 |