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

Jung Ho Seo·2020년 7월 20일
0

Java

목록 보기
2/2
post-thumbnail

Interface

인터페이스의 적절한 용도

인터페이스는 자신을 구현한 클래스의 인스턴스를 참조할 수 있는 타입 역할을 한다. 달리 말해, 클래스가 어떤 인터페이스를 구현한다는 것은 자신의 인스턴스로 무엇을 할 수 있는지를 클라이언트에 얘기해 주는 것이다. 인터페이스는 오직 이 용도로만 사용되어야 한다.

이 지침에 맞지않는 예로는 상수 인터페이스가 있다

상수 인터페이스 - 안티패턴이다 사용금지!

public interface PhysicalConstants {

    static final double ELECTRON_MASS = 9.19203900 ....;
    
    // 이하 코드 생략
}

이는 인터페이스를 완전히 잘못 사용한 예다. 클래스 내부에서 사용하는 상수는 내부 구현에 해당한다.
따라서 상수인터페이스로 구현한다면 이는 내부 구현을 클래스의 API로 노출하는 행위를 의미한다. 사용자의 혼란을 가중시킬 뿐이다.

상수를 공개할 목적이라면 더 합당한 선택지가 몇 가지 있다. 특정 클래스나 인터페이스와 같하게 연관된 상수라면 그 클래스나 인터페이스 자체에 추가해야 한다. 대표적으로 Integer와 Double에 선언된 MIN_VALUE, MAX_VALUE가 있다.

상수 유틸리티 클래스

public class PysicalConstants {

	private PysicalConstants() { } // 인스턴스화 방지
    
    public static final double AVOGADROS_NUMBER = 12312;
    
}

인터페이스는 타입을 정의하는 용도로만 사용해야 한다. 상수 공개용 수단으로 사용하지 말자

profile
책, 글, 개발

0개의 댓글