2009-04-18 4 views
1

중첩 클래스에서 얻을 수있는 이점을 찾기 위해 인터넷 검색을 해왔습니다. 이 작업을 수행하는 방법에 대한 많은 예제가 있지만 다른 클래스 내에서 클래스를 선언하는 이유에 대해서는 찾을 수있는 예제가 없습니다. 나는 새로 도착한 "Code Complete"와 상담을하기도했지만 언급이 없었습니다. 나는 그것을 읽는 것이 더 어렵다는 단점을 볼 수 있습니다.중첩 클래스에 대한 이유는 무엇입니까

+0

이 질문은 언어를 불가지롭게 할 수 있습니까? – dfa

답변

11

일반적으로 중첩 된 클래스는 컨테이너 클래스의 기능을 지원하기위한 목적으로 만 존재하며 자체적으로는 실행 가능성이 없습니다. 예를 들어, 메인 클래스의 생성자를 관리 가능하게 유지하는 초기화를 위해 더 많은 수의 매개 변수를 수집하는 역할을 할 수 있습니다. 또는 주 클래스를 지원하는 특수 컬렉션을 정의하기 위해 상속 될 수 있습니다.

의미 상 별도의 클래스에는 차이가 없지만 중첩은 클래스를 자체적으로 사용하지 말아야한다는 명확한 메시지를 보냅니다.

+1

"[...]하지만 중첩은 클래스가 의미가 없다는 명확한 메시지를 보냅니다." 내가 생각하는 것처럼 중요한 포인트입니다. +1! – Gregor

0

부모 클래스에 일부 모델 만 필요하지만 다른 모든 클래스는 작동하지 않을 경우 사용하십시오. 내부 표현/일부 데이터의 도우미.

0

나는 일반적으로 private로 선언 했으므로 외부 클래스 내부에서만 필요한 일부 기능에 사용할 수 있으므로 필요한 보조 클래스가 아닌 이름 공간을 깨끗하게 유지할 수 있습니다.

0

내 견해로 볼 때 중첩 클래스는 필수는 아닙니다. 보통 작은 개체 인 경우에만 클래스를 중첩합니다. 특정 클래스와 관련이 있습니다.

2

는 중첩 클래스 만들기로 끝나는 여러 디자인 결정이있다 : 두 클래스 사이의 더 명확한 관계를 만들고 싶어

  • 을; a. 이름이 같은 네임 스페이스에 두 개의 클래스가
  • 상황에 게재 클래스에 의해 둘러싸인 최상위 중첩 클래스로
  • 상황에 따라 클래스 이 의존성을 명확하게하는 것이 더 명시 적입니다
  • 네임 스페이스 오염
  • 을 방지 "이러한 것들이을 togheter 간다"
  • 은 소스 파일의 수를 감소

그래서 중첩 된 클래스 뒤에 두 가지 원칙이 있습니다 : 의존성더 나은 조직

0

외부 클래스의 구현과 관련된 개념을 모델링하기 위해 중첩 클래스를 사용할 수 있지만 다른 클래스에서 중첩 클래스를 사용하지 않는 것이 외부 클래스와 밀접하게 연관되어 있습니다. 중첩 된 클래스는 공개 클래스의 가시성을 가지며 공개 클래스의 일부가 아닌 외부 클래스의 세부 정보에 명시 적으로 의존 할 수 있습니다.

일반적인 패턴은 중첩 클래스가 공용 인터페이스를 구현하고 반환 클래스가 공용 인터페이스 인 메서드를 통해 중첩 클래스의 인스턴스를 노출하는 것입니다. iterator 패턴은 이것의 한 예이다.

관련 문제