승상의 코딩 블로그

self 의 역할 (함수의 메모리) 본문

Python (파이썬)

self 의 역할 (함수의 메모리)

양승상 2023. 1. 23. 13:07

파이썬(python)에서 클래스에 사용되는 self 를 왜 써주는 것일까? 

메모리와 연관시켜봐야한다.

멤버 변수와 멤버 함수

class Calculator:
    def __init__(self, x):
        self.x = x
    def add(self, a):
    	return self.x + a

Calculator 클래스는 초기화 때 넣은 값에 따라, 1을 더해주는 계산기, 2를 더해주는 계산기, ... 등을 만들 수 있다. 

이 클래스는 어떻게 메모리에 관리되어야 할까?

복잡한 이야기는 생략하고 간단하게 생각해보자.

클래스의 멤버 변수는 생성하는 인스턴스에 따라 달라질 수 있다. 즉, 멤버 변수 별로 메모리를 할당 받을 필요가 있을 것이다.

그러나, 멤버 함수는 로직은 동일하고 사용하는 변수만 다르다. (동일한 코드에 들어가는 입력만 다를 뿐이다)

그렇다면 멤버 함수는 메모리에 한번만 저장되게 해놓고 호출하는 인스턴스에 따라 변수만 다르게 실행하면 된다. (인스턴스를 받는 부분이 필요하고 이를 self 를 통해 넘겨 받는 것이다.)

굳이 멤버 함수를 각 클래스 별로 메모리를 할당해줄 필요가 없다.

(자세한 내용을 깊게 파고 들면, 어려워지므로 이정도까지만 이해해봅시다.)

멤버 함수 메모리 확인

위의 내용대로라면, Caculator 의 add 함수는 전역변수처럼 쓰이고, 함수 호출 시에 객체를 매개변수로 받는 것으로 이해할 수 있다.

class Calculator:
    def __init__(self, x):
        self.x = x

    def add(self, a):
        return self.x + a


addOneCalculator = Calculator(1)
print(id(addOneCalculator.add)) # 4377286144
addTwoCalculator = Calculator(2)
print(id(addTwoCalculator.add)) # 4377286144

두 개의 인스턴스(1을 더해주는 계산기, 2를 더해주는 계산기) 를 만들고 함수의 주소를 id 함수를 통해 확인해보자. 

두 인스턴스의 함수는 동일한 주소를 가지고 있는 것을 알 수 있다. (주소는 코드 실행 시마다 달라진다.)

반응형
Comments