파이썬에서 self 이해하기

2024. 5. 23. 22:08Python/Python Programming

반응형

파이썬에서 self 이해하기

 

파이썬을 처음 배우는 많은 사람들이 self라는 키워드를 접하고 혼란스러워합니다.

self는 클래스와 객체지향 프로그래밍에서 중요한 역할을 하지만, 그 개념이 다소 추상적일 수 있습니다.

이번 블로그에서는 self가 무엇인지, 왜 필요한지, 그리고 어떻게 사용하는지를 알아보겠습니다.

 

1. self란 무엇인가?

self 파이썬의 인스턴스 메서드에서 번째 매개변수로 사용됩니다.

이는 메서드가 호출될 자동으로 현재 인스턴스를 참조하게 해줍니다.

예를 들어, 클래스 내부의 메서드에서 인스턴스 변수에 접근하거나 다른 메서드를 호출할 self 사용합니다.

class MyClass:
    def __init__(self, value):
        self.value = value
    
    def display(self):
        print(self.value)

위 예제에서 __init__ 메서드와 display 메서드의 첫 번째 매개변수가 바로 self입니다.

이를 통해 각각의 인스턴스가 고유의 value 값을 가질 수 있습니다.

 

2. 왜 self가 필요한가?

 

파이썬은 메서드 호출 시 인스턴스를 자동으로 첫 번째 인수로 전달합니다.

예를 들어, my_instance.display()를 호출하면 실제로는 MyClass.display(my_instance)가 호출되는 것입니다.

self는 이렇게 전달된 인스턴스를 참조하여 인스턴스 변수와 메서드에 접근할 수 있게 합니다.

만약 self가 없다면, 클래스 내의 메서드가 어느 인스턴스의 변수를 참조해야 하는지 알 수 없게 되어 객체지향 프로그래밍의 장점을 잃게 됩니다.

 

3. self 사용 예시

 

다음은 self 사용하는 간단한 예시입니다.

class Dog:
    def __init__(self, name):
        self.name = name
    
    def bark(self):
        print(f"{self.name} says woof!")
    
    def change_name(self, new_name):
        self.name = new_name

# 인스턴스 생성
dog1 = Dog("Buddy")
dog2 = Dog("Lucy")

# 메서드 호출
dog1.bark()  # Buddy says woof!
dog2.bark()  # Lucy says woof!

# 인스턴스 변수 변경
dog1.change_name("Max")
dog1.bark()  # Max says woof!

위 예제에서 dog1dog2는 각각 name이라는 인스턴스 변수를 가지고 있으며, bark 메서드는 각 인스턴스의 name을 출력합니다. change_name 메서드를 통해 name을 변경할 수도 있습니다.

 

4. 클래스 메서드와 정적 메서드에서의 self

 

클래스 메서드와 정적 메서드는 self 사용하지 않습니다.

대신 클래스 메서드는 cls 번째 매개변수로 받으며, 이는 클래스 자체를 참조합니다.

정적 메서드는 인스턴스나 클래스를 참조하지 않기 때문에 매개변수를 필요로 하지 않습니다.

class MyClass:
    class_variable = "Hello"

    @classmethod
    def class_method(cls):
        print(cls.class_variable)
    
    @staticmethod
    def static_method():
        print("This is a static method")

# 클래스 메서드 호출
MyClass.class_method()  # Hello

# 정적 메서드 호출
MyClass.static_method()  # This is a static method

 

결론

self 파이썬의 객체지향 프로그래밍에서 매우 중요한 개념입니다. 이는 인스턴스 메서드에서 현재 인스턴스를 참조하게 해주며, 이를 통해 인스턴스 변수와 메서드에 접근할 있습니다. self 개념을 이해하고 활용하면, 보다 효율적이고 구조적인 코드를 작성할 있습니다. 객체지향 프로그래밍의 기초를 탄탄히 다지는 도움이 되기를 바랍니다.

반응형