인터페이스 : 자신을 구현한 클래스의 인스턴스를 참조할 수 있는 타입 역할.
즉, 클래스가 어떤 인터페이스를 구현한다는 것은 자신의 인스턴스로 무엇을 할 수 있는지를 클라이언트에 얘기해주는 것이다.
인터페이스는 위의 지침에 맞지 않는 예로 상수 인터페이스라는 것이 있다. 상수 인터페이스란 메서드 없이, 상수를 뜻하는 static final 필드로만 가득 찬 인터페이스를 말한다.
상수 인터페이스 안티패턴의 예시
// 상수 인터페이스 예시
public interface CarConstants {
int MAX_SPEED = 240;
String ERROR_MESSAGE = "Operation not allowed";
}
// 위의 상수 인터페이스는 이런식으로 사용될 수 있다.
public class SportsCar implements CarConstants {
public void drive() {
System.out.println("Driving at speed: " + MAX_SPEED);
}
}
이러한 패턴은 상수 인터페이스 안티패턴이다 - 절대 사용하면 안된다.
안티패턴을 사용하지 않고 상수를 공유하기 위한 더 좋은 방법은 열거형(enum)을 사용하거나, 클래스 내부에 상수를 정의하는 것이다.
public final class CarUtils {
private CarUtils() {} // 인스턴스화 방지
public static final int MAX_SPEED = 240;
public static final String ERROR_MESSAGE = "Operation not allowed";
}
결론 : 인터페이스는 타입을 정의하는 용도로만 사용해야 한다. 상수 공개용 수단으로 사용하지 말자.
'이펙티브 자바' 카테고리의 다른 글
[이펙티브 자바] 아이템 24. 멤버 클래스는 되도록 static으로 만들라 (0) | 2024.03.25 |
---|---|
[이펙티브 자바] 아이템 23. 태그 달린 클래스보다는 클래스 계층구조를 활용하라 (2) | 2024.03.22 |
[이펙티브 자바] 아이템 21. 인터페이스는 구현하는 쪽을 생각해 설계하라 (0) | 2024.03.22 |
[이펙티브 자바] 아이템 20. 추상 클래스보다는 인터페이스를 우선하라 (0) | 2024.03.21 |
[이펙티브 자바] 아이템 19. 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라 (0) | 2024.03.21 |