본문 바로가기
Language/Python

[Python] @classmethod 를 사용하면 좋은 경우 | LIM

by forestlim 2023. 5. 16.
728x90
반응형

@classmethod는 Python에서 특정 인스턴스가 아닌 클래스 자체를 대상으로 하는 메서드에 유용하다.

 

1. 대체 생성자(Alternative Constructor):

@classmethod를 대체 생성자로 사용하여 일반적인 __init__ 메서드와 다른 초기화 로직을 정의할 수 있다.

인스턴스 생성 방식에 유연성을 제공하는데 도움이 된다.

class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height

    @classmethod
    def create_square(cls, side_length):
        return cls(side_length, side_length)

square = Rectangle.create_square(5)

 이 예시에서 create_square 클래스 메서드를 사용하여 폭과 높이가 동일한 Rectangle 인스턴스, 즉 정사각형을 생성할 수 있다.

@classmethod 데코레이터를 사용함으로써 클래스 자체에서 메서드를 호출하여 명시적으로 클래스를 인스턴스화하지 않고도 정사각형을 생성할 수 있다. 

 

 

2. 팩토리 메서드(Factory Methods):

@classmethod는 특정 조건이나 parameter에 기반하여 클래스의 인스턴스를 생성하고 반환하는 Factory Method로 사용될 수도 있다. 이는 복잡한 인스턴스화 로직을 캡슐화하고자 할 때 특히 유용하다. 

(팩토리 메서드 패턴을 통해 클래스의 인스턴스를 생성하는 다양한 방법을 한 클래스 내에서 정의할 수 있다.)

class Shape:
    def __init__(self, sides):
        self.sides = sides

    @classmethod
    def create_shape(cls, sides):
        if sides == 3:
            return cls("Triangle")
        elif sides == 4:
            return cls("Rectangle")
        elif sides == 5:
            return cls("Pentagon")
        else:
            return cls("Polygon")

triangle = Shape.create_shape(3)

이 예시에서 create_shape 클래스 메서드는 주어진 변의 수에 따라 Shape 클래스의 인스턴스를 생성하는 팩토리 메서드로 작동한다. 입력 매개변수에 기반하여 생성할 도형의 유형을 동적으로 결정할 수 있다. 

 

 

3. Class-specific Utility Method: 

때로는 클래스별 속성을 조작하거나 클래스 전체에 관련된 작업을 수행하는 메서드가 있을 수 있다. 이러한 경우 클래스 메서드를 사용하여 인스턴스 없이도 클래스 수준의 속성에 액세스 하고 작업할 수 있다. 

class MathUtils:
    PI = 3.14159

    @classmethod
    def calculate_circle_area(cls, radius):
        return cls.PI * radius**2

area = MathUtils.calculate_circle_area(5)

이 예시에서 calculate_circle_area 클래스 메서드는 제공된 반지름을 기반으로 원의 면적을 계산한다. @classmethod 데코레이터를 사용함으로써 MathUtils 클래스의 인스턴스 없이도 클래스 수준의 상수인 PI에 액세스 할 수 있다. 

 

 


📚참고

https://niceman.tistory.com/181

 

파이썬(Python) - 팩토리 메소드(Factory Method) 패턴(디자인패턴)

파이썬(Python) - Factory Method Pattern 오늘은 디자인 패턴 중에서 특정 언어에 국한되지 않고 많이 사용되는 팩토리 메소드(Factory Method) 패턴에 대해서 알아보겠습니다. 팩토리는 뜻 그대로 '공장' 즉,

niceman.tistory.com

 

728x90
반응형

댓글