우와한 개발자

[Python] 클래스 메서드, 정적 메서드, 생성자와 소멸자 - @classmethod, @staticmethod, __init__

by 우와한개발자

1. 클래스 메서드와 정적 메서드

  • 객체를 생성하지 않고 클래스 이름으로 참조하는 메서드

 

1) 클래스(class) 메서드

  • 클래스 변수(클래스 멤버)를 참조하거나 수정할 때 사용
  • @classmethod 데코레이터 선언
  • 첫 번째 인수로 클래스 자기자신 cls 선언 (자동으로 전달됨)
class Person:
    count = 0   # 클래스 변수

    def __init__(self, name):
        self.name = name
        Person.count += 1

    @classmethod
    def get_count(cls):
        return cls.count   # 클래스 변수 참조

p1 = Person('홍길동')
p2 = Person('김철수')
print(Person.get_count())   # 2

 

2) 정적(static) 메서드

  • 클래스/인스턴스 변수에 접근할 필요 없을 때 사용
  • @staticmethod 데코레이터 선언
  • self, cls 파라미터 없음
class MathUtils:
    @staticmethod
    def add(a, b):
        return a + b

print(MathUtils.add(3, 5))   # 8

 

2. 생성자와 소멸자

1) 생성자 : __init__()

  • 객체가 생성될 때 자동으로 실행
  • 첫 번째 인수로 self 정의
  • 자바처럼 클래스 상단에 멤버 변수를 미리 선언하지 않고, 생성자 안에서 self.변수명으로 동적으로 선언
  • 생성자를 이용해 인스턴스 변수를 초기화
  • 생성자 중복 정의(오버로딩) 안되기 때문에 파라미터가 많고 기본값을 지정하는 경우가 많음
class Person:
    def __init__(self, name, gender='미설정', age=0):
        self.name = name      # 인스턴스 변수 동적 선언
        self.gender = gender
        self.age = age

p1 = Person('홍길동')              # gender, age 기본값 사용
p2 = Person('김철수', '남자', 30)  # 모두 전달

 

2) 소멸자 : __del__()

  • 객체의 참조 수가 0이 될 때 자동 실행
  • del 키워드로 직접 삭제하거나 None을 할당하면 참조 수가 줄어듦
class Person:
    def __init__(self, name):
        self.name = name
        print(f'{self.name} 생성')

    def __del__(self):
        print(f'{self.name} 소멸')

p1 = Person('홍길동')   # '홍길동 생성'
del p1                  # '홍길동 소멸'

p2 = Person('김철수')   # '김철수 생성'
p2 = None               # '김철수 소멸' — 참조 수 0이 되어 소멸

블로그의 정보

우와한개발자 님의 블로그

우와한개발자

활동하기