Programming/Java

[Effective Java] item22 - 인터페이스는 타입을 정의하는 용도로만 사용하라!

VSFe 2021. 3. 16. 00:51
인터페이스는 타입을 정의하는 용도로만 사용하라!

계속해서 인터페이스 이야기가 나온다. 자신을 구현한 클래스의 인스턴스를 참조할 수 있는 타입 역할을 한다고 한다. 즉, 클래스가 특정 인터페이스를 구현하면, 클라이언트로부터 자신의 인스턴스로 할 수 있는 것을 알려주는 것이다. 그리고, 인터페이스는 오직 이 용도로 사용해야 한다.

다만 가끔 일부 사람들이 상수 인터페이스라는 것을 사용하는데, 이는 오직 static final 필드로만 가득 찬 인터페이스이다. 그러나 명시해야 할 점은, 우리가 클래스 내부에서 사용하는 상수는 외부 인터페이스의 역할이 아니다. 어찌보면 내부 API 구현의 일부를 바깥에 공개해버리는 꼴이 된다! 게다가 상황에 따라 해당 상수를 사용하지 않더라도 컴파일 과정에서의 하위호환을 위해 해당 인터페이스를 계속 구현하고 앉아있을 수 있다...

만약 상수를 공개할 목적이라면, 클래스 자체에 static으로 추가하자. Integer 같은 박싱 클래스에 있는 MAX_VALUE나 MIN_VALUE가 다음과 같은 예이다. 정 안되면 앞에서 학습했던 유틸리티 클래스도 괜찮다. 물론, 유틸리티 클래스를 사용할거면 클래스명 까지 명시하거나, static import 하면 된다!