실버를 위한 코딩/파이썬

클래스의 매개변수 self에 대해 알아보기

forSilver 2024. 12. 5. 04:36
반응형

클래스의 매개변수 self를 알기 쉽게 정리


1. self란?

  • self는 클래스 내부에서 "현재 사용 중인 객체 자기 자신"을 의미합니다.
  • 객체를 통해 메서드를 호출하면 Python이 자동으로 해당 객체를 메서드의 첫 번째 매개변수로 전달합니다.
  • 즉, self는 객체가 메서드와 속성에 접근할 수 있도록 돕는 역할을 합니다.

2. self가 필요한 이유

  • 클래스는 설계도이고, 객체는 설계도로 만든 실제 제품입니다.
  • 각 객체가 자신의 속성동작(메서드)을 독립적으로 유지하기 위해 self를 사용합니다.
class Person:
    def __init__(self, name):
        self.name = name  # 객체마다 독립적인 name을 가짐

p1 = Person("홍길동")
p2 = Person("김영희")

print(p1.name)  # 홍길동
print(p2.name)  # 김영희

3. self의 역할

  1. 객체 속성 관리
    • 객체의 속성(필드)을 정의하고 접근할 때 사용됩니다.
    • self.속성명 = 값 형태로 객체마다 고유의 값을 설정합니다.
      class Car:
        def __init__(self, brand, model):
            self.brand = brand  # 객체의 브랜드 설정
            self.model = model  # 객체의 모델명 설정
      
      car1 = Car("현대", "아반떼")
      car2 = Car("기아", "K5")
      
      print(car1.brand) # 현대
      print(car2.model) # K5
  2. 메서드 간 상호 호출
      • 클래스 내부에서 다른 메서드를 호출할 때도 self를 사용합니다.
    class Calculator:
      def __init__(self, value):
          self.value = value
    
      def add(self, amount):
          self.value += amount
    
      def display(self):
          self.add(10)  # self를 통해 add 호출
          print(f"현재 값: {self.value}")
    
    calc = Calculator(100)
    calc.display() # 출력: 현재 값: 110
  3. 객체 간 독립성 유지
    • self 덕분에 여러 객체를 생성해도 각 객체의 속성은 독립적으로 유지됩니다.

4. 이름이 꼭 self일 필요는 없다

  • self관례적인 이름일 뿐, 다른 이름을 사용해도 동작은 동일합니다.
  • 하지만 관례를 따르는 것이 가독성협업에 유리합니다.
class Example:
    def __init__(this, value):  # self 대신 this 사용
        this.value = value

    def show(this):
        print(this.value)

ex = Example(10)
ex.show()  # 출력: 10

5. self 없는 메서드

  • self를 생략하면 객체가 메서드를 호출할 때, Python이 객체를 전달하지 않으므로 오류가 발생합니다.
    class Test:
      def greet():  # self를 생략하면 오류 발생
          print("안녕하세요")
    obj = Test()
    
    obj.greet() # TypeError: greet() takes 0 positional arguments but 1 was given


정리: 쉽게 말해 self란?

  • self는 "현재 객체 자신"을 가리키는 특별한 매개변수입니다.
  • 이를 통해 객체의 속성(값)과 메서드(함수)를 관리하고 사용할 수 있습니다.
  • 모든 객체는 독립적인 속성과 메서드를 가지며, 이를 가능하게 하는 것이 self입니다.

한 줄 요약

self는 객체 자신을 참조하는 매개변수로, 클래스 내부에서 객체의 속성과 메서드에 접근할 때 사용됩니다.