콘텐츠로 이동

Inner Classes and Functions

2.6 중첩(Nested) / 지역(Local) / 내부(Inner) 클래스 및 함수

중첩된 지역 함수나 클래스는 지역 변수를 캡처하기 위해 사용할 수 있습니다다. 내부 클래스는 사용해도 괜찮습니다.

2.6.1 정의

클래스는 메서드, 함수 또는 다른 클래스 내부에 정의될 수 있습니다. 함수는 메서드나 함수 내부에 정의될 수 있습니다. 중첩된 함수는 외부 범위에서 정의된 변수에 대해 읽기 전용으로 접근할 수 있습니다.

2.6.2 장점

매우 제한된 범위에서만 사용되는 유틸리티 클래스와 함수를 정의할 수 있습니다. 추상 데이터 타입(ADT)과 유사한 특성을 가집니다. 주로 데코레이터를 구현할 때 활용됩니다.

2.6.3 단점

중첩된 함수와 클래스는 직접 테스트할 수 없습니다. 중첩이 많아지면 외부 함수의 길이가 길어지고 가독성이 떨어질 수 있습니니다.

2.6.4 권장 사항

일부 주의사항을 고려하면 사용해도 괜찮습니다. 다만, self 또는 cls 이외의 지역 변수를 캡처하는 경우가 아니라면 중첩된 함수나 클래스는 피해야 합니다. 단순히 모듈 사용자로부터 함수를 숨기기 위해 중첩하지 말고 대신 모듈 수준에서 함수 이름 앞에 _를 붙여 테스트에서 접근할 수 있도록 하십시오.