2011-09-26 3 views
0

클래스 내부에서 인터페이스를 중첩하는 것에 대해 읽었을 때 의도는 컴포지션을 통해 인터페이스의 추상 동작을 캡슐화하는 것입니다. 그러나 나에게 클래스 외부의 인터페이스를 만든 다음 getter/setter를 사용하고 인터페이스 유형의 인스턴스를 반환하는 것이 더 중요합니다. 내가 보지 못하고있는 이익이 있어야합니다. 이것은 단순히 "선택"의 문제입니까?구체적인 클래스 내부에 인터페이스를 중첩하는 대신 실용적인 디자인 대안이 무엇입니까?

+0

예 당신이 상황을 평가할 필요가 있다고 생각합니다. 때로는 중첩 된 클래스 나 인터페이스가 유용 할 수 있습니다. 액세스를 제한하거나 중첩 된 클래스로 부모 클래스를 연결하려는 경우 일반적으로 인터페이스는 클래스 외부에서 정의되어야합니다. 더 많은 구현. –

+0

나는 그것을 닫아야한다는 데 동의한다. @hvgotcodes가 게시 한 질문은 내가 얻으려고했던 것입니다. –

답변

1

에 대한 메일 발송 서버를 사용할 수있는 다른 종류의 많은 강하게 일부 클래스와 관련 인터페이스, 그것은 합리적인 수 있습니다 경우 수업 내에서 그것을 중첩시킨다. 예 : SurfaceHolder.Callback : 클라이언트가 Android에서 서페이스에 대한 변경 정보를 수신 할 수있게합니다. 콜백 인터페이스는 SurfaceHolder 내에 중첩되어 있으며 해당 컨텍스트 내에서 액세스하고 찾는 것이 더 쉽습니다.

그러나 스레드에 의해 실행될 인스턴스가있는 클래스에 의해 구현되는 Runnable과 같은 제네릭 인터페이스의 경우이 인스턴스는 완전히 클래스 외부에 있습니다 (이 예의 경우 java.lang 패키지에 있음). 이것은이 인터페이스가 모든 클래스에서 사용될 수 있기 때문에 더 의미가 있습니다. 특정 컨텍스트 내에서 필요하지는 않습니다.)

0

매우 복잡하고 확장 가능하며 재사용 가능한 시스템에 대해 이야기하는 것은 중요하지 않습니다. S.O.L.I.D.라는 이름이 있습니다. 인터페이스의 사용을 가정하는 디자인 원칙 (의존성 주입과 제어의 반전). 이들을 사용하는 이유는 다음과 같습니다.

1) 코드 내의 모델 분리. 클래스가 다른 프로젝트에서 사용할 수 없을 때 클래스 내에 객체를 만들면

2) 올바른 단위 테스트 용 모의 객체를 만들 가능성이 있습니다. 귀하는 하위 레벨의 모든 메소드를 호출하는 최상위 레벨을 테스트하여 구체적인 레이어를 테스트 할 수 있습니다.

3) 인터페이스가 결합되어 여러 곳에서 전체 시스템 전반에 걸쳐 사용할 수 있도록 예를

관련 문제