그니까 클레스 변수, 인스턴스변수 차이점 알겠는데, 클레스내에서 그냥 선언한 메서드def는 클레스 변수, 인스턴스 변수 둘다 호출가능하고,
@클레스 매서드 는 클레스 변수에만 접근 가능하죠. 이럴거면 왜 쓰는건지 도저히 이해가 안갑니다. 다시 말씀드리면 클레스 변수에 접근하고 싶을 때 그냥 메소드 def 만들고 안에 클레스명.(클레스변수명) 해서 이용할 수 있는데, 굳이 @데코레이션 해서 한줄 더 써서 클레스 메소드를 사용해야하는 이점이 있을까요? 제가 같은 말만 반복해서 저도 미치겠네요.
+0
2022년 1월 29일
클래스 메소드는 인스턴스가 있고 없고는 상관 없습니다. 그냥 클래스에서 관리하는 변수이기 때문에 인스턴스 메소드에서 접근도 가능하지만 인스턴스 메소드 외에 그냥 클래스명.클래스 메소드() 의 형식으로도 사용이 가능합니다. 중요한 것은 클래스 메소드는 클래스 변수에 접근하기 위해 만든 게 아닙니다. 클래스 메소드는 클래스 변수와 무관하게 클래스 단위로 처리하는 동작이 있기 때문에 있을 뿐입니다. 그리고 이렇게 정의된 클래스 메소드는 모든 인스턴스가 공통으로 가지는 동작이구요. 인스턴스 메소드는 모든 인스턴스가 같은 동작을 하지만 인스턴스 메소드는 인스턴스마다 다른 처리가 발생합니다. 코드는 동일하기 때문에 같은 처리 같아보이지만 사용되는 값이 모든 인스턴스가 각자 관리하는 값이기 때문이에요.
클래스 메소드는 인스턴스 메소드들 중 모두 동일한 동작을 해야 하는 메소드를 클래스 메소드로 만든다고 보시면 됩니다.
당장 이해가 가지 않으신다면 조금 더 고민하면서 지나쳐보시는 것도 좋습니다. 저도 배울 당시에는 잘 몰랐는데 어느 순간 이런 게 필요한 시점이 오더라구요.
댓글 2개
@클레스 매서드 는 클레스 변수에만 접근 가능하죠. 이럴거면 왜 쓰는건지 도저히 이해가 안갑니다.
다시 말씀드리면 클레스 변수에 접근하고 싶을 때 그냥 메소드 def 만들고 안에 클레스명.(클레스변수명) 해서 이용할 수 있는데,
굳이 @데코레이션 해서 한줄 더 써서 클레스 메소드를 사용해야하는 이점이 있을까요?
제가 같은 말만 반복해서 저도 미치겠네요.
클래스 메소드는 인스턴스 메소드들 중 모두 동일한 동작을 해야 하는 메소드를 클래스 메소드로 만든다고 보시면 됩니다.
당장 이해가 가지 않으신다면 조금 더 고민하면서 지나쳐보시는 것도 좋습니다. 저도 배울 당시에는 잘 몰랐는데 어느 순간 이런 게 필요한 시점이 오더라구요.