파이썬에서 클래스를 처음 만들면 모든 메소드의 첫 인자는 'self'라고 놓고 시작하는데요. 왜 그럴까요? 오늘은 그 이유를 간략하게 살펴보겠습니다.
먼저 간단히 클래스를 만들어보겠습니다.
class Person:
def __init__(self, name, job):
self.name = name
self.job = job
def introduce(self):
return f"내 이름은 {self.name}, {self.job}이죠"
인간 클래스를 만들었습니다. 테스트해볼게요.
p = Person("코난", "탐정")
print(p.introduce())
내 이름은 코난, 탐정이죠
문제없이 작동합니다. 그러면 왜 'self'가 필요한지 생각해볼게요. 그 이유는 객체의 메소드를 실행하는 내부동작에 기인합니다. 앞서 코난이 자기소개를 하던 코드를 다시 살펴보겠습니다.
p.introduce()
파이썬 내부적으로 저 코드는 다음과 같은 코드로 변환돼서 실행됩니다.
Person.introduce(p)
구조를 기억해주세요. 클래스.메소드(인스턴스)
클래스의 메소드를 실행시키는데, 그 첫 인자로 인스턴스를 주는거죠. 모든 인스턴스의 메소드는 내부적으로 저런 구조로 번역되어 실행됩니다. 그래서 함수가 인스턴스 메소드라면 첫 인자를 'self'로 줘야 대상이 되는 인스턴스가 정확히 무엇인지 확인할 수 있습니다.
참고로 'self'라는 이름은 원하는 대로 'asdfasdf', 'fffffffffff', 'f*' 등으로 줄 수 있는데요. 'self'는 파이썬에서 공식적으로 권장하고 유저들에게 통일된 양식이라고 생각하시면 됩니다. 그렇기에 나만의 단어를 쓰지 맙시다. :)