(Effective Java) 객체를 참조할 때는 그 인터페이스를 사용하라
만일 적당한 인터페이스가 있다면 인자나 반환값, 변수, 그리고 필드의 자료형은 클래스 대신 인터페이스로 선언하자.
객체의 실제 클래스를 참조할 필요가 있는 유일한 순간은, 생성자(constructor)로 객체를 생성할때다.
예)
//인터페이스를 자료형으로 사용하고 있는 바람직한 예제
List<Subscriber> subscriber = new Vector<Subscriber>();
//클래스를 자료형으로 사용하는 나쁜예제
Vector<Subscriber> subscribers = new Vector<Subscriber>();
* 인터페이스를 자료형으로 쓰는 습관을 들이면 프로그램은 더욱 유연해진다.
* 한가지 주의점은 만일 원래 구현이 인터페이스의 일반 규약에 없는 특별한 기능을 제공하고 있었고 원래 코드가 그 기능을 사용하고 있었다면, 새로운 구현도 같은 기능을 제공해야 한다.
가령 위의 예에서 원래코드가 Vector의 동기화 정책을 이용하고 있었을 때, Vector를 ArrayList로 바꿔버리면 곤란하다.
* 적당한 인터페이스가 없는 경우에는 객체를 클래스로 참조하는 것이 당연하다.
객체의 실제 클래스를 참조할 필요가 있는 유일한 순간은, 생성자(constructor)로 객체를 생성할때다.
예)
//인터페이스를 자료형으로 사용하고 있는 바람직한 예제
List<Subscriber> subscriber = new Vector<Subscriber>();
//클래스를 자료형으로 사용하는 나쁜예제
Vector<Subscriber> subscribers = new Vector<Subscriber>();
* 인터페이스를 자료형으로 쓰는 습관을 들이면 프로그램은 더욱 유연해진다.
* 한가지 주의점은 만일 원래 구현이 인터페이스의 일반 규약에 없는 특별한 기능을 제공하고 있었고 원래 코드가 그 기능을 사용하고 있었다면, 새로운 구현도 같은 기능을 제공해야 한다.
가령 위의 예에서 원래코드가 Vector의 동기화 정책을 이용하고 있었을 때, Vector를 ArrayList로 바꿔버리면 곤란하다.
* 적당한 인터페이스가 없는 경우에는 객체를 클래스로 참조하는 것이 당연하다.
댓글
댓글 쓰기