Skip to content

Latest commit

 

History

History
40 lines (24 loc) · 1.51 KB

item64.md

File metadata and controls

40 lines (24 loc) · 1.51 KB

아이템64 : 객체는 인터페이스를 사용해 참조하라

적합한 인터페이스만 있다면 매게변수뿐 아니라 반환값, 변수, 필드를 전부 인터페이스 타입으로 선언하라는 뜻입니다.

Set<Son> sonSet = new LinkedHashSet<>();

위의 코드는 좋은 예시입니다.

LinkedHashSet<Son> sonSet = new LinkedHashSet<>();

클래스 타입으로 사용했기 때문에 위의 경우는 좋지 않은 타입입니다.

인터페이스를 타입으로 사용하는 습관을 길러두면 프로그램이 훨씬 유연해질 것입니다. 만약에 나중에 구현 클래스른 다른 것으로 교체하고자 한다면 아래와 같이 교체하면 됩니다.

Set<Son> sonSet = new HashSet<>();

이렇게 다른 코드는 전혀 손대지 않고 새로 구현한 클래스로 바꿀 수 있습니다.


인터페이스 대신 클래스 타입을 사용할 때

  • 적합한 인터페이스가 없다면 당연히 클래스로 참조해야 합니다. ex) 값 클래스 = String, BigInteger
  • 클래스 기반으로 작성된 프레임워크가 제공하는 객체들입니다.
  • 인터페이스에는 없는 특별한 메소드를 제공하는 클래스들입니다. ex) PriorityQueue에는 Queue 인터페이스에 없는 comparator 메소드를 제공합니다.

정리

적합한 인터페이스가 없다면 클래스의 계층구조 중 필요한 기능을 만족하는 가장 덜 구체적인(상위의) 클래스를 타입으로 사용하자.