중첩 클래스에서 얻을 수있는 이점을 찾기 위해 인터넷 검색을 해왔습니다. 이 작업을 수행하는 방법에 대한 많은 예제가 있지만 다른 클래스 내에서 클래스를 선언하는 이유에 대해서는 찾을 수있는 예제가 없습니다. 나는 새로 도착한 "Code Complete"와 상담을하기도했지만 언급이 없었습니다. 나는 그것을 읽는 것이 더 어렵다는 단점을 볼 수 있습니다.중첩 클래스에 대한 이유는 무엇입니까
답변
일반적으로 중첩 된 클래스는 컨테이너 클래스의 기능을 지원하기위한 목적으로 만 존재하며 자체적으로는 실행 가능성이 없습니다. 예를 들어, 메인 클래스의 생성자를 관리 가능하게 유지하는 초기화를 위해 더 많은 수의 매개 변수를 수집하는 역할을 할 수 있습니다. 또는 주 클래스를 지원하는 특수 컬렉션을 정의하기 위해 상속 될 수 있습니다.
의미 상 별도의 클래스에는 차이가 없지만 중첩은 클래스를 자체적으로 사용하지 말아야한다는 명확한 메시지를 보냅니다.
"[...]하지만 중첩은 클래스가 의미가 없다는 명확한 메시지를 보냅니다." 내가 생각하는 것처럼 중요한 포인트입니다. +1! – Gregor
부모 클래스에 일부 모델 만 필요하지만 다른 모든 클래스는 작동하지 않을 경우 사용하십시오. 내부 표현/일부 데이터의 도우미.
나는 일반적으로 private로 선언 했으므로 외부 클래스 내부에서만 필요한 일부 기능에 사용할 수 있으므로 필요한 보조 클래스가 아닌 이름 공간을 깨끗하게 유지할 수 있습니다.
내 견해로 볼 때 중첩 클래스는 필수는 아닙니다. 보통 작은 개체 인 경우에만 클래스를 중첩합니다. 특정 클래스와 관련이 있습니다.
는 중첩 클래스 만들기로 끝나는 여러 디자인 결정이있다 : 두 클래스 사이의 더 명확한 관계를 만들고 싶어
- 을; a. 이름이 같은 네임 스페이스에 두 개의 클래스가 상황에 게재 클래스에 의해 둘러싸인 최상위 중첩 클래스로
- 상황에 따라 클래스 이 의존성을 명확하게하는 것이 더 명시 적입니다
- 네임 스페이스 오염 을 방지 "이러한 것들이을 togheter 간다"
- 은 소스 파일의 수를 감소
그래서 중첩 된 클래스 뒤에 두 가지 원칙이 있습니다 : 의존성 및 더 나은 조직
외부 클래스의 구현과 관련된 개념을 모델링하기 위해 중첩 클래스를 사용할 수 있지만 다른 클래스에서 중첩 클래스를 사용하지 않는 것이 외부 클래스와 밀접하게 연관되어 있습니다. 중첩 된 클래스는 공개 클래스의 가시성을 가지며 공개 클래스의 일부가 아닌 외부 클래스의 세부 정보에 명시 적으로 의존 할 수 있습니다.
일반적인 패턴은 중첩 클래스가 공용 인터페이스를 구현하고 반환 클래스가 공용 인터페이스 인 메서드를 통해 중첩 클래스의 인스턴스를 노출하는 것입니다. iterator 패턴은 이것의 한 예이다.
- 1. 중첩 클래스에 대한 NHibernate 쿼리
- 2. 기본 클래스에 대한 할당이 유효하지만 파생 클래스에 대한 컴파일 오류가 할당되는 이유는 무엇입니까?
- 3. rt.jar의 com.sun. * 클래스에 대한 API 설명서를 찾을 수없는 이유는 무엇입니까?
- 4. 오버로드 된 할당 연산자가 클래스에 대한 참조를 반환하는 이유는 무엇입니까?
- 5. 모든 클래스에 대한 구현 대신 인터페이스가 생성되는 이유는 무엇입니까?
- 6. 매핑 된 클래스에 대한 중첩 형식 또는 다른 솔루션
- 7. 중첩 클래스의 '액세스하는 클래스에 대한 액세스'개인 데이터 멤버
- 8. C# : 중첩 클래스에 대한 명명 규칙 및 적절한 구현?
- 9. C#은 중첩 클래스에 대한 역 참조를 허용합니까?
- 10. 중첩 템플릿 클래스에 대한 C++ 비 멤버 함수
- 11. 컬렉션을 포함하는 중첩 클래스에 대한 NSObject 설명 메서드의 올바른 구현
- 12. 일반 외부 클래스의 중첩 된 내부 클래스에 대한 포인터를 반환하십시오.
- 13. 내 Game 클래스에 GraphicsHeight가없는 이유는 무엇입니까?
- 14. 하위 클래스에 연결할 수있는 이유는 무엇입니까?
- 15. 정적 클래스에 소멸자가없는 이유는 무엇입니까? 이것에
- 16. 다음 클래스에 가상 테이블이있는 이유는 무엇입니까?
- 17. Button 클래스에 getOnClickListener가없는 이유는 무엇입니까? (Android)
- 18. 추상 클래스에 대한 참조
- 19. 중첩 서명에 대한 구문은 무엇입니까?
- 20. INTERSECT가 중첩 된 JOIN만큼 느린 이유는 무엇입니까?
- 21. ComboBox를 클래스에 중첩 된 enum에 바인딩
- 22. Java에서 클래스에 대한 참조를 저장하는 방법은 무엇입니까?
- 23. 중첩 배열이나 구조체 또는 클래스에 헝가리 방식으로 표시하는 방법은 무엇입니까?
- 24. instancable 클래스에 대한 스레드 Proc?
- 25. 클래스에 대한 + = 연산자의 정규형
- 26. Java 클래스에 대한 질문
- 27. NSUserDefault 클래스에 대한 질문
- 28. 클래스에 대한 액세스
- 29. 클래스에 대한 "사용"비교
- 30. 클래스에 대한 참조 전달
이 질문은 언어를 불가지롭게 할 수 있습니까? – dfa