class
에서 바로 호출할 수 있는 static method와 class method 사용 방법에 대해 정리함
앞에 @
가 붙은 것을 decorator라고 하며, method(함수)에 추가 기능을 구현할 때 사용함
static method는 관련 method를 논리적인 방법으로 그룹화할 수 있고, instance를 만들지 않고 class에서 직접 호출할 수 있기 때문에 유용함
일반적으로 utility function에 사용되며, 코드를 더 쉽게 읽고 유지 관리할 수 있음
@staticmethod
데코레이터를 사용해서 class
에 method를 선언하면 해당 method는 정적(static) method가 됨
class 클래스이름:
@staticmethod
def 메서드(매개변수1, 매개변수2):
코드
instance method나 class method와 달리 첫 번째 매개변수가 할당되지 않음
따라서, static method 내에서는 instance/class attribute나 method를 호출하는 것이 필요하지 않을 때 사용함
class Calc:
@staticmethod
def add(a, b):
print(a + b)
@staticmethod
def mul(a, b):
print(a * b)
Calc.add(10, 20) # 30
Calc.mul(10, 20) # 200
위 예제처럼, static method는 method의 실행이 외부 상태(instance)에 영향을 끼치지 않고 결과만 구하면 될 때 활용될 수 있음
method 위에 @classmethond
를 사용해서 선언하며, 첫 번째 매개변수에 cls를 지정해야함
class 클래스이름:
@classmethod
def 메서드(cls, 매개변수1, 매개변수2):
코드
class method는 static method처럼 instance 없이 호출할 수 있다는 점은 같지만, class method는 method 안에서 class attribute나 class method에 접근해야 할 때 사용함
intance method와 달리 instance attribute나 다른 intance method를 호출하는 것은 불가능함
class Person:
count = 0 # 클래스 속성
def __init__(self):
Person.count += 1 # 인스턴스가 만들어질 때
# 클래스 속성 count에 1을 더함
@classmethod
def print_count(cls):
print('{0}명 생성되었습니다.'.format(cls.count)) # cls로 클래스 속성에 접근
james = Person()
maria = Person()
Person.print_count() # 2명 생성되었습니다.
cls
를 사용하면 method 안에서 현재 class의 instance를 만들 수도 있음
@classmethod
def create(cls):
p = cls() # cls()로 인스턴스 생성
return p
class에 데코레이터(decorator) 없이 method를 선언하면 instance method로 취급이 되며, 첫 번째 매개 변수로 class의 instance가 self
라는 이름으로 넘어옴
이 self
를 통해 instance attribute에 접근하거나 다른 instance method를 호출할 수 있음
static method나 class method는 instance를 통하지 않고 class
에서 바로 호출할 수 있음
[chatGPT] python에서 utility function는 더 큰 프로그램 내에서 특정 작업이나 계산을 수행하는 함수로, static method나 class method로 class의 일부이거나 독립된 함수로 사용됨
일반적으로 프로그램의 핵심 기능과 직접적인 관련이 없는 작업을 수행하는 데 사용됨
특정 작업을 분리하고 재사용 가능한 기능으로 캡슐화함으로써 프로그램을 더 쉽게 작성하고 유지관리할 수 있음
또한, 별도로 테스트하고 디버깅할 수 있기 때문에 코드를 더 쉽게 이해하고 오류의 위험을 줄일 수 있음