2014-12-03 4 views
0

나는 Component 클래스를 확장하는 추상 클래스 AbstractBarrelComponent가 있다고 가정 해 보겠습니다. 이 클래스는 상상의 목적으로 Barrel이라는 클래스를 사용합니다.자바 클래스는 매우 제한적으로 사용되지만 하나의 클래스에만 국한되지는 않습니다. 외부 또는 내부?

Barrel 클래스는 어디에 사용합니까/사용해야 할 클래스가 AbstractBarrelComponent 및 그 하위 클래스 인 경우에 있습니까?

"reside"란 클래스가 자체 파일 Barrel.java에 있어야하거나 AbstractBarrelComponent.java에서 패키지로 보호되는 클래스 여야한다는 의미입니까? 이런 종류의 상황에 대해 공통된 규정이 있습니까?

+0

* "사용할 수 있거나 사용할 수있는 유일한 클래스"인 경우 * 귀하의 질문에 대답하는 것 같습니다. 일반적으로, 나는 그것을 "지원"의 관점에서 바라보고, 내부 클래스는 외부 클래스를 "지원"하지만 그것은 단지 나를위한 것입니다 ... – MadProgrammer

+0

@MadProgrammer 지원 클래스를 내부 클래스로 만드는 것은 나에게 바람직하지 않습니다./그녀의 버전 인'AbstractBarrelComponent'는'Barrel' 클래스가 어디서 어디서 무엇인지 파악하기가 어렵습니다. 반면에,'Barrel' 클래스를 자신의 소스 파일에 존재하게하는 것은 그것이 더 넓은 용도를 가지고 있음을 의미합니다. 그러므로 나의 딜레마. –

+0

* "자신의 버전 인'AbstractBarrelComponent'를 구현하는 누군가는 배럴 클래스가 무엇이고 어디서 어디 있는지 알아내는 것이 힘들 것입니다. * - 정말로 동의 할지는 모르겠지만, 다시 한번, 저는 이것을 아주 많이합니다. 나는 그것을 많이 본다. 수업을 잘 문서화하십시오. 중요한 문제는 아닙니다. IMHO – MadProgrammer

답변

1

다른 프로그래머와 조직은 이에 대해 서로 다른 표준을 사용하며 하나의 정답은 없다고 생각합니다. 중요한 것은 표준을 고수하고 그것에 충실하는 것입니다.

내 개인적인 표준은 내부 클래스가 항상 개인적인 것입니다. 서브 클래스가 액세스 할 필요가있는 경우는, 외부로부터 보호 된 클래스에 있을지 어떨지, 또는 그 메소드에의 액세스가 위양을 통해서 이용 가능하게되어있을 필요가 있습니다. 이것에 대한 유일한 단점은 당신이 더 작은 수업으로 끝나야한다는 것입니다. 그러나 솔직히 말하면, 현대적인 깨끗한 코딩 스타일은 코드를 쉽게 탐색 할 수 있도록 좋은 IDE에 의존하므로 탐색을위한 클래스를 그룹화해야 할 필요성이 거의 사라졌습니다.

제쳐두고, Java 설계자가 하위 클래스에 의한 액세스 보호와 동일한 네임 스페이스의 모든 클래스에 의한 액세스 보호를 구분하지 않았다는 사실은 불행한 일입니다. 이것들은 실제로 완전히 별개의 사용 사례입니다. 상황에 따라 하위 클래스에 대한 액세스를 제한하기 위해 외부 보호 클래스가 아닌 내부 보호 클래스로 만드는 경향이 있습니다. 이 두 가지 용도로 별도의 키워드가 있다면 더 좋았을 것입니다.