(Effective Java) 객체를 참조할 때는 그 인터페이스를 사용하라

만일 적당한 인터페이스가 있다면 인자나 반환값, 변수, 그리고 필드의 자료형은 클래스 대신 인터페이스로 선언하자.

객체의 실제 클래스를 참조할 필요가 있는 유일한 순간은, 생성자(constructor)로 객체를 생성할때다.

예)
//인터페이스를 자료형으로 사용하고 있는 바람직한 예제
List<Subscriber> subscriber = new Vector<Subscriber>();

//클래스를 자료형으로 사용하는 나쁜예제
 Vector<Subscriber> subscribers = new Vector<Subscriber>();

* 인터페이스를 자료형으로 쓰는 습관을 들이면 프로그램은 더욱 유연해진다.

* 한가지 주의점은 만일 원래 구현이 인터페이스의 일반 규약에 없는 특별한 기능을 제공하고 있었고 원래 코드가 그 기능을 사용하고 있었다면, 새로운 구현도 같은 기능을 제공해야 한다.
가령 위의 예에서 원래코드가 Vector의 동기화 정책을 이용하고 있었을 때, Vector를 ArrayList로 바꿔버리면 곤란하다.


* 적당한 인터페이스가 없는 경우에는 객체를 클래스로 참조하는 것이 당연하다.




댓글

이 블로그의 인기 게시물

(네트워크)폴링방식 vs 롱 폴링방식

(ElasticSearch) 결과에서 순서 정렬

(18장) WebSocekt과 STOMP를 사용하여 메시징하기