[파이썬] @classmethod 는 무엇인가?
파이썬 메서드에는 크게 3종류가 존재한다.
1. 인스턴스 메서드 (instance method)
2. 정적 메서드 (static method)
3. 클래스 메서드 (class method)
instance method 가 가장 흔하게 쓰인다.
instance method 의 변수에 접근하기 위해서 첫번째 파라미터에 반드시 self 라는 파라미터를 갖는다.
아래에서 set_name() 이 인스턴스 메서드에 해당한다.
set_name() 은 여러 파라미터를 가질 수 있지만 첫번째는 반드시 self 를 갖는다.
인스턴스 변수
하나의 클래스로부터 여러 객체 인스턴스를 만들어 사용할 수 있다.
클래스 변수가 하나의 클래스에 단1개만 존재하는 반면,
인스턴스 변수는 각 객체 인스턴스마다 별도로 존재한다.
클래스의 정의에서 매서드 안에서 사용되면서 'self.변수명' 처럼 사용되는 변수를 인스턴스 변수(instance variable)라고 하며,
이는 각 객체별로 서로 다른값을 갖는 변수다.
인스턴스 변수는 클래스 내부에서는 self.name 과 같이 'self.'을 사용하여 엑세스하고, 클래스 밖에서는 '객체변수.인스턴스변수' 와 같이 엑세스 한다.
파이썬에서는 관례상, 내부적으로만 사용되는 변수나, 메서드는 그 이름 앞에 하나의 밑줄(_)를 붙인다.
만약 특정 변수명이나 메서드를 private로 만들어야한다면 두개의 밑줄(__)을 이름 앞에 붙이면 된다.
초기자 (initialize)
클래스로부터 새 객체를 생성할때마다 실행되는 특별한 메서드로 __init__() 이라는 메서드가 있는데, 이는 클래스로부터 객체를 만들때, 인스턴스 변수를 초기화하거나 객체의 초기 상태를 만들기 위한 문장들이다.
정적 메서드 @ staticmethod & 클래스 메서드 @classmethod
인스턴스 메서드가 self 를 통해 엑세스 할 수 있는 반면, 정적 메서드는 이러한 인스턴스 변수에 엑세스 할 수 없다.
그래서 정적 메서드는 보통 객체 필드와 독립적이지만 로직상 클래스 내에 반드시 포함되는 메서드에 사용된다. 정적 메서드 앞에는 반드시 @staticmethod 로 표시한다.
클래스 메서드는 정적 메서드와 인스턴스 변수에 접근할 필요가 없는 것은 비슷하지만 클래스 변수에 접근하라 필요가 있을때 사용된다. 마찬가지로 @classmethod 로 표시한다.
클래스 변수에 접근하는 방법은 cls 라는 클래스를 의미하는 파라미터를 전달받는다.('cls.')
(인스턴스 변수에 접근하는 방법은 self 파라미터를 전달받는다.' self. ')
댓글
댓글 쓰기