Item 19.
타입을 정의할 때만 인터페이스를 사용하
자.
Chapter 4. 클래스와 인터페이스
Interface?
• 클래스가 구현하는 인터페이스는 클라이언트가 그 클래
스의 인터페이스로 할 수 있는 일을 나타낸다.
Constant interface?
• 메소드를 갖지 않고, 외부에 제공하는 상수 값을 갖는
static final 필드만으로 구성된다.
• Constant interface를 구현하는 클래스에서 상수 필드 앞
에 별도의 클래스 이름을 붙이지 않고 사용하기 위해 구현
한다.
Constant interface?
// Constant interface
public interface PhysicalConstants {
// 아보가드로 수
static final double AVOGADROS_NUMBER = 6.012414e23;
// 볼쯔만 상수
static final double BOLTZMANN_CONSTANT = 1.14214e-14;
// 전자 질량
static final double ELECTRON_MASS = 9.1514e-31;
}
Constant interface?
• 상세 구현이(상수가) 클래스 외부로 노출됨
• 상수가 필요 없어지더라도 binary 호환성을 유지하기 위
해 그 상수 interface를 유지
• subclass에서 상수 이름과 같은 이름의 변수 이용 못함
상수를 외부로 제공하는 방법
• 상수가 기존클래스나 인터페이스와 밀접하게 관계 된다
면
– 해당 클래스나 인터페이스에 추가
ex) Integer나 Double의 MIN_VALUE, MAX_VALUE
• 열거타입의 멤버가 되는 것이 좋은 지 고려(enum)
• 유틸리티 클래스에 상수를 둠
상수를 외부로 제공하는 방법
• 유틸리티 클래스에 상수를 둠
public class PhysicalcontantsUClass {
private PhysicalcontantsUClass() {
} // 인스턴트 생성 방지
static final double AVOGADROS_NUMBER = 6.012414e23;
static final double BOLTZMANN_CONSTANT = 1.14214e-14;
static final double ELECTRON_MASS = 9.1514e-31;
}
public class Test {
public static void main(String[] arg){
double boltzmann =
PhysicalcontantsUClass.BOLTZMANN_CONSTANT;
double avogadros =
PhysicalcontantsUClass.AVOGADROS_NUMBER;
double electron = PhysicalcontantsUClass.ELECTRON_MASS;
}
}
상수를 외부로 제공하는 방법
• 유틸리티 클래스에 상수를 둠
public class PhysicalcontantsUClass {
private PhysicalcontantsUClass() {
} // 인스턴트 생성 방지
static final double AVOGADROS_NUMBER = 6.012414e23;
static final double BOLTZMANN_CONSTANT = 1.14214e-14;
static final double ELECTRON_MASS = 9.1514e-31;
}
import static test.PhysicalcontantsUClass.*;
public class Test {
public static void main(String[] arg){
double boltzmann = BOLTZMANN_CONSTANT;
double avogadros = AVOGADROS_NUMBER;
double electron = ELECTRON_MASS;
}
}
요약
• 상수를 외부에 제공하기 위해 사용하면 안
됨.
• 즉, 인터페이스는 타입을 정의할 때만 사용.

Item 19. 타입을 정의할 때만 인터페이스를 사용하자.

  • 1.
    Item 19. 타입을 정의할때만 인터페이스를 사용하 자. Chapter 4. 클래스와 인터페이스
  • 2.
    Interface? • 클래스가 구현하는인터페이스는 클라이언트가 그 클래 스의 인터페이스로 할 수 있는 일을 나타낸다.
  • 3.
    Constant interface? • 메소드를갖지 않고, 외부에 제공하는 상수 값을 갖는 static final 필드만으로 구성된다. • Constant interface를 구현하는 클래스에서 상수 필드 앞 에 별도의 클래스 이름을 붙이지 않고 사용하기 위해 구현 한다.
  • 4.
    Constant interface? // Constantinterface public interface PhysicalConstants { // 아보가드로 수 static final double AVOGADROS_NUMBER = 6.012414e23; // 볼쯔만 상수 static final double BOLTZMANN_CONSTANT = 1.14214e-14; // 전자 질량 static final double ELECTRON_MASS = 9.1514e-31; }
  • 5.
    Constant interface? • 상세구현이(상수가) 클래스 외부로 노출됨 • 상수가 필요 없어지더라도 binary 호환성을 유지하기 위 해 그 상수 interface를 유지 • subclass에서 상수 이름과 같은 이름의 변수 이용 못함
  • 6.
    상수를 외부로 제공하는방법 • 상수가 기존클래스나 인터페이스와 밀접하게 관계 된다 면 – 해당 클래스나 인터페이스에 추가 ex) Integer나 Double의 MIN_VALUE, MAX_VALUE • 열거타입의 멤버가 되는 것이 좋은 지 고려(enum) • 유틸리티 클래스에 상수를 둠
  • 7.
    상수를 외부로 제공하는방법 • 유틸리티 클래스에 상수를 둠 public class PhysicalcontantsUClass { private PhysicalcontantsUClass() { } // 인스턴트 생성 방지 static final double AVOGADROS_NUMBER = 6.012414e23; static final double BOLTZMANN_CONSTANT = 1.14214e-14; static final double ELECTRON_MASS = 9.1514e-31; } public class Test { public static void main(String[] arg){ double boltzmann = PhysicalcontantsUClass.BOLTZMANN_CONSTANT; double avogadros = PhysicalcontantsUClass.AVOGADROS_NUMBER; double electron = PhysicalcontantsUClass.ELECTRON_MASS; } }
  • 8.
    상수를 외부로 제공하는방법 • 유틸리티 클래스에 상수를 둠 public class PhysicalcontantsUClass { private PhysicalcontantsUClass() { } // 인스턴트 생성 방지 static final double AVOGADROS_NUMBER = 6.012414e23; static final double BOLTZMANN_CONSTANT = 1.14214e-14; static final double ELECTRON_MASS = 9.1514e-31; } import static test.PhysicalcontantsUClass.*; public class Test { public static void main(String[] arg){ double boltzmann = BOLTZMANN_CONSTANT; double avogadros = AVOGADROS_NUMBER; double electron = ELECTRON_MASS; } }
  • 9.
    요약 • 상수를 외부에제공하기 위해 사용하면 안 됨. • 즉, 인터페이스는 타입을 정의할 때만 사용.