인터페이스
MyInf instance1 = new MyInfImpl();
MyInf instance2 = new YourInfImpl();
자바의 인터페이스는 (일반적으로) 구현이나 필드 없이 메소드만 정의되어있는 추상화된 요소이다. 개발자는 인터페이스를 구현하여 동일한 기능을 내부 구현을 다르게하여 만들 수 있다. 클라이언트에서는 다르게 만들어진 인터페이스의 구현체들을 내부 모습을 모른체로 사용할 수 있다. 이처럼 인터페이스는 다양한 구현체의 인스턴스를 참조할 수 있는 타입 역할을 한다.
상수 인터페이스 안티패턴
// 수학 상수들을 정의한 인터페이스
public interface Math {
static final double pi = 3.141592;
...
}
상수 인터페이스란 메소드 없이 상수값들을 static final 필드로 정의한 인터페이스를 말한다. 이러한 패턴은 인터페이스를 잘못 사용한 예다. 인터페이스를 구현하는 클래스 내부에서 사용해야하는 상수라면 이를 외부에 노출하면 안된다. 인터페이스나 클래스에 강하게 연관되어 있고 사용자에게 공개할 상수라면 클래스나 인터페이스 자체에 추가해야한다. 실제로 Integer과 Double에는 MIN_VALUE, MAX_VALUE가 상수로 정의되어있다. 상수만을 나타내는 요소가 필요하다면 enum이나 class를 활용해야 한다.
// enum을 활용한 상수 표현
public enum PhonePrefixEnum {
PREFIX_010("010"), PREFIX_011("011"), PREFIX_017("017");
private String value;
PhonePrefixEnum(String value) {
this.value = value;
}
}
// class를 활용한 상수표현
public class PhonePrefixConstants {
private PhonePrefixConstants() {}
public static final PREFIX_010 = "010";
public static final PREFIX_011 = "011";
public static final PREFIX_017 = "017";
}
728x90
'STUDY > 이펙티브자바' 카테고리의 다른 글
4-10) 멤버 클래스는 되도록 static으로 만들어라 (0) | 2022.09.19 |
---|---|
4-9) 태그 달린 클래스보다는 클래스 계층구조를 활용하라 (0) | 2022.09.19 |
4-7) 인터페이스는 구현하는 쪽을 생각해 설계하라 (0) | 2022.09.13 |
4-6) 추상 클래스보다는 인터페이스를 우선하라 (0) | 2022.09.07 |
4-5) 상속을 고려해 설계하고 문서화하라. 그러지 않았다면 상속을 금지하라 (0) | 2022.09.07 |