본문 바로가기
Programming/Python

[클래스] 정적메서드 사용하기

by 용스토리랜드 2023. 3. 13.

지금까지 클래스의 메서드를 사용할 때 인스턴스를 통해서 호출했습니다. 이번에는 인스턴스를 통하지 않고 클래스에서 바로 호출할 수 있는 정적 메서드클래스 메서드에 대해 알아보겠습니다.

 

class 클래스이름 : 
  @staticmethod
  def 메서드(매개변수1, 매개변수2) : 
  	<code>

정적 메서드 : 정적 메서드는 다음과 같이 메서드 위에 @staticmethod 를 붙인다. 이때 정적 메서드는 매개변수에 self를 지정하지 않는다.

 

@staticmethod 처럼 앞에 @이 붙은 것을 데코레이터라고 하며 메서드(함수)에 추가 기능을 구현할 때 사용한다.

class Calc:
  @staticmethod
  def add(a, b) : 
    print(a + b) 
  
  @staticmethod
  def mul(a, b) :
    print(a*b)
    
Calc.add(10, 20) # 클래스에서 바로 메서드 호출
Calc.mul(10, 20) # 클래스에서 바로 메서드 호출 

>>> 30 
>>> 200

Calc 클래스에서 @staticmethod 를 붙여서 add 메서드와 mul 메서드를 만들었다. 정적 메서드를 호출할 때는 다음과 같이 클래스에서 바로 메서들르 호출하면 된다. 

클래스.메서드()

 

정적 메서드는 self 를 받지 않으므로 인스턴스 속성에는 접근할 수 없다. 그래서 보통 정적 메서드는 인스턴스 속성, 인스턴스 메서드가 필요 없을 때 사용한다. 

 

여기서 만든 Calc 클래스에 들어있는 add, mul 메서드는 숫자 두개를 받아서 더하거나 곱할 뿐 인스턴스의 속성은 필요하지 않습니다. 

 

정적 메서드는 메서드의 실행이 외부 상태에 여향을 끼치지 않는 순수 함수 (pure function) 를 만들 때 사용한다. 수 함수는 부수 효과 (side effect) 가 없고 입력 값이 같으면 언제나 같은 출력값을 반환한다. 즉, 정적 메서드는 인스턴스의 상태를 변화시키지 않는 메서드를 만들때 사용한다.

 

참고 | 파이썬 자료형의 인스턴스 메서드와 정적 메서드 

파이썬의 자료형도 인스턴스 메서드와 정적, 클래스 메서드로 나뉘어져 있다. 예를 들어 세트에 요소를 더할 때는 인스턴스 메서드를 사용하고, 합집합을 구할 때는 정적 메서드를 사용하도록 만들어져 있다.

 

a = {1, 2, 3, 4}
a.update({5}) # 인스턴스 메서드 # instance.method
a 
>>> {1, 2, 3, 4, 5}

# set class 에서 바로 union 이라는 method 를 사용
# 굳이 인스턴스를 만들어서 사용하는 함수가 아님. 
set.union({1, 2, 3, 4}, {5}) # 정적(클래스)메서드 # class.method
>>> {1, 2, 3, 4, 5}
반응형