static method와 class method 사용 방법

leeway·2023년 1월 5일
0

python

목록 보기
1/4
post-thumbnail

class에서 바로 호출할 수 있는 static method와 class method 사용 방법에 대해 정리함

앞에 @가 붙은 것을 decorator라고 하며, method(함수)에 추가 기능을 구현할 때 사용함

static 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를 호출하는 것이 필요하지 않을 때 사용함

Example

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)에 영향을 끼치지 않고 결과만 구하면 될 때 활용될 수 있음

class method 사용하기

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를 호출하는 것은 불가능함

Example

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

기존 instance method와 비교

class에 데코레이터(decorator) 없이 method를 선언하면 instance method로 취급이 되며, 첫 번째 매개 변수로 class의 instance가 self라는 이름으로 넘어옴

self를 통해 instance attribute에 접근하거나 다른 instance method를 호출할 수 있음

static method나 class method는 instance를 통하지 않고 class에서 바로 호출할 수 있음



용어 설명

  • Utility function

    [chatGPT] python에서 utility function는 더 큰 프로그램 내에서 특정 작업이나 계산을 수행하는 함수로, static method나 class method로 class의 일부이거나 독립된 함수로 사용됨
    일반적으로 프로그램의 핵심 기능과 직접적인 관련이 없는 작업을 수행하는 데 사용됨
    특정 작업을 분리하고 재사용 가능한 기능으로 캡슐화함으로써 프로그램을 더 쉽게 작성하고 유지관리할 수 있음
    또한, 별도로 테스트하고 디버깅할 수 있기 때문에 코드를 더 쉽게 이해하고 오류의 위험을 줄일 수 있음



Reference

profile
AI Engineer

0개의 댓글