인자의 자료형으로는 클래스 대신 인터페이스를 사용해야 한다는 것이다. 만일 적당한 인터페이스 자료형이 있다면 인자나 반환값, 변수, 그리고 필드의 자료형은 클래스 대신 인터페이스로 선언하자. 객체의 실제 클래스를 참조할 필요가 있는 유일한 순간은, 생상자로 객체를 생성할 때다. 


인터페이스를 자료형으로 쓰는 습관을 들이면 프로그램은 더욱 유연해진다. 가령 어떤 객체의 실제 구현을 다른 것으로 바꾸고 싶다고 하자. 호출하는 생성자 이름만 다른 클래스 이름으로 바꾸거나, 아니면 호출하는 정적 팩터리 메서드만 다른 것으로 바꿔주면 된다.


위와 같이 바꾸면 기존의 구현했던 다른 부분들은 실제로 구현했던 클래스가(Vector) 뭐였는지 몰랐으므로 ArrayList로 바꿔줘도 상관없다.


그러나 적당한 인터페이스가 없는 경우에는 객체를 클래스로 참조하는 것이 당연하다. 연관된 인터페이스가 없는 객체 생성 가능 클래스의 경우, 그 클래스가 값 클래스인지의 여부와는 상관없이, 그 객체는 클래스를 통해 참조해야 한다. 그런 클래스 기반 프레임워크에 속한 객체는, 구현 클래스 대신에 보통 abstract로 선언되는 기반 클래스로 참조하는 것이 바람직하다.



+ Recent posts