Python/개념

파이썬의 self

spring_sunshine 2023. 4. 7. 01:34

클래스

  • 붕어빵 틀
  • 변수와 함수를 묶어서 하나의 새로운 객체(타입)으로 만드는 것

인스턴스

  • 붕어빵 (슈붕파 손들어~)
  • 붕어빵 틀에 반죽을 넣어 만들어진 붕어빵

 

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를 사용하여 클래스 내에 정의된 멤버에 접근할 수 있다.