정적 메소드란 무엇인가요? - Python으로 쉽게 이해하기
파이썬의 인스턴스, 클래스 및 정적 메서드 배우기
이 튜토리얼에서는 Python 3 클래스를 작성하여 인스턴스 메서드, 클래스 메서드 및 정적 메서드의 예제를 자세히 설명합니다. 이 세 가지 메서드 유형의 차이를 직관적으로 이해하면, 의도를 분명하게 전달하고 장기간 유지 관리하기 쉬운 객체 지향 Python을 작성할 수 있습니다.
인스턴스, 클래스 및 정적 메서드 개요
먼저, 인스턴스 메서드, 클래스 메서드 및 정적 메서드의 예를 포함하는 (Python 3) 클래스를 작성해보겠습니다:
인스턴스 메서드
MyClass
의 첫 번째 메서드는 method
라는 일반적인 인스턴스 메서드입니다. 이는 대부분의 경우 사용하는 기본 메서드 유형입니다. 이 메서드는 self
라는 매개변수를 사용하며, 메서드가 호출될 때 MyClass
의 인스턴스를 가리킵니다 (물론 인스턴스 메서드는 하나 이상의 매개변수를 받을 수 있습니다).
인스턴스 메서드는 self
매개변수를 통해 동일한 객체의 속성 및 다른 메서드에 자유롭게 액세스할 수 있습니다. 이를 통해 객체의 상태를 수정하는데 많은 기능을 제공합니다.
또한 인스턴스 메서드는 self.__class__
속성을 통해 클래스 자체에도 액세스할 수 있습니다. 이는 인스턴스 메서드가 클래스 상태도 수정할 수 있다는 것을 의미합니다.
클래스 메서드
두 번째 메서드인 MyClass.classmethod
은 클래스 메서드로 표시하기 위해 @classmethod
데코레이터를 사용했습니다.
클래스 메서드는 self
매개변수 대신 매개변수인 cls
를 사용합니다. 이 cls
매개변수는 메서드가 호출될 때 객체 인스턴스가 아닌 클래스를 가리킵니다.
클래스 메서드는 cls
인수만 사용할 수 있기 때문에 객체 인스턴스 상태를 수정할 수는 없습니다. 이는 self
에 액세스할 필요가 있기 때문입니다. 그러나 클래스 메서드는 여전히 클래스 전체에 적용되는 클래스 상태를 수정할 수 있습니다.
정적 메서드
세 번째 메서드인 MyClass.staticmethod
는 @staticmethod
데코레이터를 사용하여 정적 메서드로 표시되었습니다.
정적 메서드는 객체 인스턴스나 클래스에 액세스할 수 없습니다. 이는 정적 메서드는 독립적으로 호풀될 수 있으며, 클래스나 인스턴스의 상태를 수정할 수 없다는 것을 의미합니다.
실제 적용해보기!
이제 세 가지 메서드 유형이 어떻게 동작하는지 실제로 확인해보겠습니다. 아래 예제 코드를 실행하여 결과를 확인하세요:
위의 코드를 실행하면 다음과 같은 결과가 출력됩니다:
@classmethod를 사용한 맛있는 피자 공장
이제 @classmethod
데코레이터를 사용하여 맛있는 피자 공장을 만들어보겠습니다. 아래의 예제 코드를 실행하여 결과를 확인하세요:
위의 코드에서 Pizza
클래스는 __init__
메서드를 통해 피자의 재료를 초기화합니다. __repr__
메서드를 통해 피자 객체의 문자열 표현을 반환합니다.
@classmethod
데코레이터를 사용하여 margherita
메서드와 prosciutto
메서드를 정의합니다. 이들은 각각 치즈와 토마토 혹은 치즈와 햄으로 구성된 피자 객체를 생성합니다.
아래의 예제 코드를 실행하여 맛있는 피자 공장을 사용해보세요:
위의 코드를 실행하면 다음과 같은 결과가 출력됩니다:
@classmethod
를 사용하면 다른 메서드 대신 클래스 자체를 초기화하는 유용한 메서드를 생성할 수 있습니다.
정적 메서드를 사용하는 시점
정적 메서드는 클래스와 인스턴스에 액세스할 필요가 없는 독립적인 메서드를 만들기 위해 사용됩니다. 예를 들어 유틸리티 함수나 간단한 수학 연산과 같은 일부 작업을 수행할 때 정적 메서드를 사용할 수 있습니다.
정적 메서드를 사용하여 다음과 같이 원의 넓이를 계산하는 유틸리티 함수를 작성해보겠습니다:
위의 코드에서 Circle
클래스는 생성자인 __init__
메서드로 원의 반지름을 초기화합니다.
@staticmethod
데코레이터를 사용하여 calculate_area
메서드를 정의합니다. 이 메서드는 반지름을 인수로 받아 원의 넓이를 계산합니다.
아래의 예제 코드를 사용하여 원의 넓이를 계산해보세요:
위의 코드를 실행하면 다음과 같은 결과가 출력됩니다:
정적 메서드를 사용하면 클래스 또는 인스턴스에 액세스할 필요 없이 독립적인 작업을 수행할 수 있습니다.
정리하기
인스턴스 메서드, 클래스 메서드 및 정적 메서드는 각각 다른 용도와 특징을 가지고 있습니다.
인스턴스 메서드는 객체 인스턴스의 상태를 수정하고 객체 자체 및 클래스에 액세스할 수 있습니다.
클래스 메서드는 객체 인스턴스 상태를 수정하지 않고 클래스 자체에만 액세스할 수 있습니다.
정적 메서드는 객체 인스턴스나 클래스에 액세스할 수 없는 독립적인 메서드입니다.
이 세 가지 메서드 유형을 활용하여 객체 지향 프로그래밍에 더욱 익숙해지세요!