본문으로 건너뛰기
Minsing Log
뒤로 가기

class method란? 중첩클래스에서 nested된 클래스 매서드 접근하는방법?

Programming & CS

중첩된 클래스(nested class)에서 메서드를 사용할 때 인스턴스 메서드가 아닌 클래스 메서드를 사용하는 이유는 중첩 클래스와 외부 클래스 간의 관계와 인스턴스 메서드와 클래스 메서드의 동작 방식의 차이점에서 비롯됩니다.


1. 중첩 클래스와 외부 클래스 간의 관계

이 특성 때문에, 중첩 클래스 내부에서 외부 클래스의 인스턴스를 사용하려면 인스턴스 간 연결이 명시적으로 필요합니다. 반면, 클래스 메서드는 외부 클래스의 인스턴스 없이도 호출 가능하기 때문에 유용합니다.


2. 인스턴스 메서드와 클래스 메서드의 차이

(1) 인스턴스 메서드

(2) 클래스 메서드


3. 중첩 클래스에서 인스턴스 메서드가 안 되는 이유

예제: 인스턴스 메서드 사용 시 문제

class Outer:
    def __init__(self, name):
        self.name = name

    class Inner:
        def greet(self):  # 인스턴스 메서드
            return f"Hello from {self.name}"  # self.name에 접근 시 오류 발생

# 호출
outer = Outer("OuterInstance")
inner = outer.Inner()  # 이 코드는 오류 발생
inner.greet()

결과:

AttributeError: 'Inner' object has no attribute 'name'

4. 클래스 메서드로 해결되는 이유

해결 예제: 클래스 메서드 사용

class Outer:
    name = "OuterClass"

    class Inner:
        @classmethod
        def greet(cls):
            return f"Hello from {cls.__name__}"

# 호출
outer = Outer()
inner = outer.Inner()  # 중첩 클래스 호출
print(inner.greet())

결과:

Hello from Inner

5. 인스턴스 메서드와 클래스 메서드의 차이를 정리

특징인스턴스 메서드클래스 메서드
호출 주체인스턴스(self)클래스(cls)
첫 번째 매개변수self (인스턴스 참조)cls (클래스 참조)
외부 클래스의 인스턴스 필요필요함필요하지 않음
사용 가능 시점인스턴스 생성 후클래스 정의 후 바로
주로 사용하는 경우인스턴스 속성/메서드 조작클래스 속성/메서드 접근, 팩토리 메서드 생성 등

6. 언제 클래스 메서드를 사용할까?

  1. 클래스 레벨의 작업:
    • 클래스 속성이나 클래스 레벨의 작업이 필요할 때.
  2. 외부 클래스와의 연결 없이 독립적인 작업:
    • 중첩 클래스처럼 외부 클래스와의 인스턴스 연결이 필요하지 않을 때.
  3. 팩토리 메서드:
    • 클래스 메서드를 활용해 특정 조건에 따라 객체를 생성.

7. 요약

공개 여정 구독

글이 올라오면 이메일로 보내드릴게요.

개발, 창업, 배움, 실패와 회고를 짧고 솔직하게 기록합니다. 검색으로 스쳐가는 독자가 아니라 여정을 따라오는 팬을 만들기 위한 뉴스레터입니다.

뉴스레터는 준비 중입니다. 그동안 RSS 로 구독하거나 이메일 로 알림을 요청해 주세요.


이 글 공유하기:

댓글

GitHub 계정으로 로그인해 댓글을 남길 수 있습니다.


이전 글
k-fold cross validation에 대해서 Overfitting 되는것
다음 글
용어의 중요성