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

인터페이스란

인터페이스는 자신을 구현한 클래스의 인스턴스를 참조할 수 있는 타입 역할을 한다. 즉 클래스가 어떤 인터페이스를 구현한다는 것은 자신의 인스턴스로 무엇을 할 수 있는지를 클라이언트에게 이야기해 주는 것이다.

이 지침에 맞지 않는 예로 상수 인터페이스가 있다. 상수 인터페이스란 메소드 없이 상수를 뜻하는 static final 필드로만 가득 찬 인터페이스다. 이는 인터페이스를 잘못 사용한 예다. 클래스 내부에서 사용하는 상수는 외부 인터페이스가 아니라 내부 구현에 해당한다. 그렇기 때문에 이는 내부 구현을 외부 API로 노출 시키는 결과를 낳는다.

상수를 공개할 목적이라면 다음과 같은 선택지를 고려하자.

  1. 특정 클래스나 인터페이스와 강하게 연관된 상수라면 그 클래스나 인터페이스 자체에 추가하라
  2. 열거 타입으로 나타내기 적합한 상수라면 열거 타입으로 공개하라
  3. 인스턴스화 할 수 있는 유틸리티 클래스로 공개하라
Author: Song Hayoung
Link: https://songhayoung.github.io/2020/08/09/Languages/Effective%20JAVA/item22/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.