파이썬에서 클래스 내부에 정의된 함수와 메서드는 객체 지향 프로그래밍(OOP)의 중요한 부분이다. 클래스 내부에서 정의된 함수는 클래스와 인스턴스의 행동을 정의하는 데 사용된다.
1. 인스턴스 메서드 (Instance Method)
인스턴스 메서드는 클래스의 인스턴스에 대해 동작하며, 첫 번째 매개변수로 항상 self
를 받는다. self
는 해당 메서드가 호출된 인스턴스를 참조한다.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
return f"안녕하세요, {self.name}님! 저는 {self.age}살입니다."
# 객체 생성 및 메서드 호출
person = Person("홍길동", 30)
print(person.greet()) # 안녕하세요, 홍길동님! 저는 30살입니다. 출력
2. 클래스 메서드 (Class Method)
클래스 메서드는 클래스 자체를 대상으로 동작하며, 첫 번째 매개변수로 cls
를 받는다. cls
는 해당 메서드가 호출된 클래스를 참조한다. 클래스 메서드는 @classmethod
데코레이터로 정의된다.
class Person:
population = 0 # 클래스 변수
def __init__(self, name, age):
self.name = name
self.age = age
Person.population += 1
@classmethod
def get_population(cls):
return f"총 인구수는 {cls.population}명입니다."
# 객체 생성
person1 = Person("홍길동", 30)
person2 = Person("김철수", 25)
# 클래스 메서드 호출
print(Person.get_population()) # 총 인구수는 2명입니다. 출력
3. 정적 메서드 (Static Method)
정적 메서드는 클래스나 인스턴스와 관계없이 독립적으로 동작한다. 첫 번째 매개변수로 self
나 cls
를 받지 않는다. 정적 메서드는 @staticmethod
데코레이터로 정의된다.
class Circle:
pi = 3.14159 # 클래스 변수
def __init__(self, radius):
self.radius = radius # 인스턴스 변수
def area(self):
return Circle.pi * (self.radius ** 2) # 인스턴스 메서드
@classmethod
def change_pi(cls, new_pi):
cls.pi = new_pi # 클래스 메서드
@staticmethod
def describe():
return "이 클래스는 원의 넓이와 관련된 메서드를 포함합니다." # 정적 메서드
# 객체 생성
circle = Circle(5)
# 인스턴스 메서드 호출
print(circle.area()) # 78.53975 출력
# 클래스 메서드 호출
Circle.change_pi(3.14)
print(circle.area()) # 78.5 출력
# 정적 메서드 호출
print(Circle.describe()) # 이 클래스는 원의 넓이와 관련된 메서드를 포함합니다. 출력