'Application'클래스가 있다고 가정합니다. 초기화되기 위해서는 생성자에서 특정 설정이 필요합니다. 또한 설정의 수가 너무 많아서 자신의 클래스에 배치하는 것이 중요하다고 가정 해 보겠습니다."Public"중첩 클래스가 아닌지
이 시나리오의 두 가지 구현을 비교해보십시오.
구현 1 :
class Application
{
Application(ApplicationSettings settings)
{
//Do initialisation here
}
}
class ApplicationSettings
{
//Settings related methods and properties here
}
구현 2 : 나에게
class Application
{
Application(Application.Settings settings)
{
//Do initialisation here
}
class Settings
{
//Settings related methods and properties here
}
}
는, 두 번째 방법은 매우 바람직하다. 그것은 두 클래스 사이의 관계를 강력하게 강조하므로 더 읽기 쉽습니다. Application 클래스를 어디서나 인스턴스화하는 코드를 작성할 때 두 번째 접근법이 더 예쁘게 보일 것입니다.
이제 설정 클래스 자체가 유사하게 "관련"클래스를 가지고 있다고 가정 해보십시오. 그리고 그 클래스도 마찬가지로 그렇게했습니다. 그러한 레벨을 세 단계 만 가면 클래스 네이밍은 '중첩되지 않은'경우에 발생합니다. 그러나 둥지를 틀면 물건은 여전히 우아합니다. 중첩 된 클래스들은 외부 세계에 표시하지 않은 경우에만 정당화되어 있는지에 StackOverflow에 말
위에도 불구하고, 내가 읽은 사람; 즉, 클래스를 포함하는 클래스의 내부 구현에만 사용되는 경우입니다. 일반적으로 언급 된 이의 제기는 클래스의 소스 파일을 포함하는 크기를 늘리는 것이지만 부분 클래스는 그 문제에 대한 완벽한 해결책입니다.
제 질문은 중첩 된 클래스의 "공개적으로 노출 된"사용에주의해야하는 이유는 무엇입니까? 그러한 사용에 반대하는 다른 주장이 있습니까?
최근 빌더 코드를 작성하고이 게시물을 기억했습니다. 그것은 매우 유용한 접근 방법으로 밝혀졌습니다. 감사합니다. –
* "빌더가 외부 클래스의 전용 멤버에 액세스 할 수도 있습니다."* 명시 적 참조 만 사용하면 정확합니다 (Java의 내부 클래스처럼 암시 적이 아님). – samosaris
@SamusArin : 예, 포함하는 클래스의 인스턴스에 대한 암시 적 참조는 없습니다. 그러나 정적 멤버에 액세스 할 수도 있습니다. 기본적으로 나는 접근성에 대해서만 이야기했다. –