티스토리 뷰

이펙티브 자바 Effective Java 2/E
국내도서
저자 : 조슈아 블로크(Joshua Bloch) / 이병준역
출판 : 인사이트 2014.09.01
상세보기

인터페이스를 구현하는 클래스를 만들게 되면, 그 인터페이스는 해당 클래스의 객체를 참조할 수 있는 자료형 역할을 하게 된다. 인터페이스를 클래스가 구현한다는 것은 클라이언트에게 클래스의 객체가 어떤일을 하게 될지 알려주는 것이다. 다른 목적으로 인터페이스를 정의하고 사용하는 것은 적절치 못하다.


이 기준에 미달하는 사례로는 상수 인터페이스 라는 것이 있다.
상수 인터페이스 : 메서드가 없고, static final 필드만 있는 인터페이스
상수 이름 앞에 클래스 이름을 붙이는 번거로움을 피하기 위해서 다음과 같은 인터페이스를 만든다.

//상수 인터페이스 안티 페턴!!! public interface PhysicalConstants { static final double AVOGADROS_NUBMER = 6.123123124; static final double BOLTZMANN_CONSTANT = 1.123123123; static final double ELECTRON_MASS = 9.123123123; }

상수 인터페이스는 인터페이스를 잘못 사용한 예이다.
상수 정의를 인터페이스에 포함시키면 구현 세부사항이 클래스의 공개 API에 스며들게 된다.

//이렇게 스며 들게 된다. public interface TestInterface { static final double AVOGADORS_NUMBER = 1.123123123; } public class TestClass implements TestInterface { } TestClass tc = new TestClass(); double t = tc.AVOGADORS_NUMBER;

클래스가 상수 인터페이스를 구현한다는 사실은 클래스 사용자에게는 중요한 정보가 아니다.

상수 유틸리티 클래스를 만들어서 제공하는게 바람직하다.

public class PhysicalConstants { private PhysicalConstants() { } //객체 생성을 막음 public static final double AVOGADROS_NUBMER = 6.123123124; public static final double BOLTZMANN_CONSTANT = 1.123123123' public static final double ELECTRON_MASS = 9.123123123; }

인터페이스는 자료형을 정의할 때만 사용해야 한다. 특정 상수를 API의 일부로 공개할 목적으로는 적절치 않다.


공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함