이펙티브 자바 #item22 인터페이스는 타입을 정의하는 용도로만 사용하라

임현규·2023년 1월 27일
0

이펙티브 자바

목록 보기
22/47
post-thumbnail

타입이란?

객체지향의 사실과 오해 라는 책에서 의미를 빌리면 타입은 개념이다. 개념이란 우리가 표현하고자 하는 물체의 본질이라 할 수 있다. 예를 들면 이상한 나라의 엘리스에서 정원사, 병정, 하트퀸, 하트 킹 등은 트럼프 인간으로 볼 수 있고 트럼프 인간은 납작한 트럼프 카드 모양이며, 팔 다리가 있다. 이런 객체 별 공통적인 특성을 대표하는 것을 개념, 또는 타입이라 한다.

인터페이스는 타입을 정의하는 용도로만 사용해라

인터페이스는 오로지 타입의 용도로만 사용해야 한다. 자신의 인스턴스가 무엇을 할 수 있는지 정의해주는 것이라 할 수 있다. 단순히 클래스로 타입을 표현할 수 있다면 사용할 일이 없겠지만, 어떤 행위를 정의하고 타입으로 사용하는 경우 사용하면 되겠다.

상수 인터페이스로 사용하지 않기

상수를 인터페이스로 정의해서 사용하면 안되다. 이는 안티패턴이다. 클래스 내부에서 사용하는 상수는 외부 인터페이스가 아니라 내부 구현에 해당한다. 따라서 상수 인터페이스를 구현하는 것은 내부 구현을 클래스의 API로 노출하는 것과 같다.

API와 구현 분리 원칙에도 어긋날 뿐 더러 캡슐화가 제대로 지켜지지 않으니 나중에 코드를 관리할 때 굉장히 힘들어진다.

보통 열거형 상수를 보관하고 싶은 경우 class로 만들어도 되긴 하지만 Enum을 적극 활용하자

profile
엘 프사이 콩그루

0개의 댓글