Python(파이썬) - 클래스 메서드
Python(파이썬) - 클래스 메서드 알아보기
이전에 알아보았던 객체의 메서드와 변수는 인스턴스에 소속된 메서드와 변수였습니다
이번에는 클래스에 소속되어 있는 메서드와 변수에 대해 알아보도록 하겠습니다.
관련글 :
Python(파이썬) - 객체(Object) - http://server-talk.tistory.com/210
Python(파이썬) - 객체제작 - http://server-talk.tistory.com/212
Python(파이썬) - Class(클레스)와 생성자 - http://server-talk.tistory.com/211
Python(파이썬) - 인스턴스 변수와 메서드 - http://server-talk.tistory.com/213
Python(파이썬) - 상속 - http://server-talk.tistory.com/214
Python - 인스턴스 메서드와 클래스메서드란? |
인스턴스 메서드는 인스턴스에서 사용이되고, 클레스 메서드는 클래스에서만 사용할수 있습니다
먼저 인스턴스 메서드부터 보겠습니다
1. 인스턴스 메서드
인스턴스 메서드 : 인스턴스에 따라서 다르게 동작하여야 되는 메서드 입니다
C2 = Calc(20,10) C2.sum()
위 코드를 보시면 C2에는 Calc 클래스의 인스턴스가 들어있습니다 그리고 C2의 인스턴스 메서드를 호출하게 되는것입니다
즉 인스턴스에 있는 메서드를 출력하게 됩니다
용도 : 인스턴스 혹은 변수의 따라서 다르게 동작하여야 되는 메서드들은 인스턴스의 소속으로 사용하게 됩니다
2. 클래스 메서드
클래스 메서드 : 클래스에 직접 접근하는 것이 클래스 메서드 입니다
C2 = Calc(20,10) Calc.c_m()
위 코드를 보시면 인스턴스가 들어있는 C2의 인스턴스 사용하여 호출하지 않고 Calc 클래스의 직접 접근하여 c_m 메서드를 호출하게 됩니다
용도 : 인스턴스에 내부적인 데이터(변수)하고 상관없이 동작하는 메서드는 클래스 소속으로 사용하게 됩니다
Python - 인스턴스 메서드와 클래스메서드란? |
파이썬에서는 클래스 소속의 메서드가 Static Method와 Class Method가 있습니다 우선 사용방법부터 알아보겠습니다
class Cs: @staticmethod def s_m(): print("Static method") @classmethod def c_m(cls): print("Class method") Cs.s_m() Cs.c_m()
위 코드를 보시면 Static Method와 Class Method는 사용하는 방법은 메서드 위에 장식자를 입력하여야 됩니다
Static 메서드는 위에 장식자(@staticmethod)만 입력하시면 되며, Class 메서드는 장식자(@classmethod)와 메서드에는 첫번쨰 매개변수가 꼭! 있어야 됩니다 인스턴스 메서드의 첫번째 매개변수처럼 매개변수를 입력하여 주시면 됩니다
그리고 클래스 소속의 메서드의 사용시에는 직접 클래스를 입력후 메서드의 접근하시면 됩니다.
Python - 클래스 메서드와 클래스 변수의 활용 |
이번에는 클래스 변수를 이용하여 생성된 인스턴스의 개수를 만드는 클래스 메서드를 만들어보겠습니다
i1 = Cs() i2 = Cs() i3 = Cs() i4 = Cs() Cs.get_count()
위 코드의 i1 ~ i4까지 4개의 인스턴스가 만들어진 것을 볼 수 있으며, get_conut라는 클래스 메서드를 이용하여 생성된 인스턴스 개수를 확인하는 메서드입니다
이제 클래스를 만들어 보겠습니다
class Cs: conut = 0 def __init__(self): Cs.conut = Cs.conut + 1 @classmethod def get_count(cls): print(Cs.conut) i1 = Cs() i2 = Cs() i3 = Cs() i4 = Cs() Cs.get_count()
위 코드의 생성자 코드를 보시면 Cs.conut + 1을 보실 수 있으며, 생성자를 실행할 때마다 변수명에 1을 더한 값을 넣는 과정으로 인스턴스의 개수를 추가하는 과정입니다
그리고 클래스 변수를 사용 시에는 즉 클래스 안에 메서드 밖에는 변수명만 입력하며, 메서드 안에서는 클래스명 과 .(점)을 이용하여 변수를 접근하여야 됩니다.
class Calc(object): def __init__(self, num1, num2): self.num1 = num1 self.num2 = num2 def sum(self): return self.num1 + self.num2 def sub(self): return self.num1 - self.num2 class Ref(Calc): def multi(self): return self.num1 * self.num2 C2 = Ref(20,10) print(C2.sum()) print(C2.multi()) Calc.history()
위 코드의 마지막 줄 Calc.history() 라는 클래스 메서드를 실행하면 메서드 안에 결괏값을 각각 출력하는 부분을 만들어 보겠습니다
Python - 클래스 메서드와 클래스 변수의 응용 |
class Calc(object): _history = [] def __init__(self, num1, num2): self.num1 = num1 self.num2 = num2 def sum(self): result = self.num1 + self.num2 Calc._history.append("add : "+str(result)) return self.num1 + self.num2 def sub(self): result = self.num1 - self.num2 Calc._history.append("sub : "+str(result)) return self.num1 - self.num2 @classmethod def history(cls): for item in Calc._history: print(item) class Ref(Calc): def multi(self): result = self.num1 * self.num2 Calc._history.append("multi : "+str(result)) return self.num1 * self.num2 C2 = Ref(20,10) print(C2.sum()) print(C2.sub()) print(C2.multi()) Calc.history()
위 코드는 Clac 클래스의 메서드를 추가한 코드입니다
Calc 클래스의 인스턴스 메서드의 결괏값을 담기 위해 _history 변수를 선언하였고 Calc 클래스의 각각의 인스턴스 메서드에는 결괏값을 변수로 만들어 클래스 변수의 append 함수를 이용하여 배열(_history)의 배열을 추가하였습니다
그리고 클래스 메서드 사용하였을 때 클래스 배열의 데이터를 출력하는 과정입니다
위의 출력결과를 확인하시면 추가한 클래스메서드의 결괏값이 잘출력되는것을 확인하실 수 있습니다