반응형
[Effective Java] 타입을 정의할 때만 인터페이스를 사용하자. |
-
인터페이스를 구현한다는 것은 해당 클래스가 해당 인터페이스의 "타입" 이 될 수 있다는 것을 의미.
따라서 인터페이스는 인스턴스로 할 수 있는 일을 나타내야 하고, 다른 목적으로 정의하는 것을 옳지 않다.
-
상수 인터페이스(constant interface) 가 인터페이스의 기본 목적에 어긋난다.
메소드를 갖지 않고, 외부에 제공하는 상수 값을 갖는 static final 필드만을 갖는다.
이렇게 하지 말자!!
상수 인터페이스는 인터페이스를 "형편없이" 사용하는 예이다.
상수 인터페이스는 네임 스페이스를 줄이는 역할도 한다.
-
상수를 외부에 제공하고 싶다면 다음의 방법을 사용하는 것이 좋다.
만일 어떤 상수가 기존 클래스나 인터페이스와 밀접하게 연관되면, 그 상수를 해당 클래스나 인터페이스에 추가해야 한다.
만일 상수가 열거 타입(enumerated type)의 멤버가 되는 것이 좋다면 enum 타입으로 한다.
상수만 갖는 경우는 인스턴스를 생성할 수 없는 유틸리티 클래스에 상수를 두는 것이 좋다.
Summary
인터페이스는 타입을 정의할 때만 사용해야 한다.
상수를 외부에 제공하기 위해 사용하면 안 된다.
반응형
'프로그래밍 놀이터 > 디자인 패턴, 리펙토링' 카테고리의 다른 글
[Effective Java] 전략을 표현할 때 함수 객체를 사용하자. (0) | 2016.11.15 |
---|---|
[Effective Java] 태그(tagged) 클래스보다는 클래스 계층을 사용하자. (0) | 2016.11.14 |
[Effective Java] 추상 클래스보다는 인터페이스를 사용하자. (0) | 2016.11.07 |
[Effective Java] 상속을 위한 설계와 문서화를 하자. 그렇지 않다면 상속의 사용을 금지시킨다. (0) | 2016.11.01 |
[Effective Java] 가급적 상속(inheritance) 보다는 컴포지션(composition)을 사용하자. (0) | 2016.10.27 |
댓글