인자의 자료형으로는 클래스 대신 인터페이스를 사용해야 한다는 것이다. 만일 적당한 인터페이스 자료형이 있다면 인자나 반환값, 변수, 그리고 필드의 자료형은 클래스 대신 인터페이스로 선언하자. 객체의 실제 클래스를 참조할 필요가 있는 유일한 순간은, 생상자로 객체를 생성할 때다.
인터페이스를 자료형으로 쓰는 습관을 들이면 프로그램은 더욱 유연해진다. 가령 어떤 객체의 실제 구현을 다른 것으로 바꾸고 싶다고 하자. 호출하는 생성자 이름만 다른 클래스 이름으로 바꾸거나, 아니면 호출하는 정적 팩터리 메서드만 다른 것으로 바꿔주면 된다.
위와 같이 바꾸면 기존의 구현했던 다른 부분들은 실제로 구현했던 클래스가(Vector) 뭐였는지 몰랐으므로 ArrayList로 바꿔줘도 상관없다.
그러나 적당한 인터페이스가 없는 경우에는 객체를 클래스로 참조하는 것이 당연하다. 연관된 인터페이스가 없는 객체 생성 가능 클래스의 경우, 그 클래스가 값 클래스인지의 여부와는 상관없이, 그 객체는 클래스를 통해 참조해야 한다. 그런 클래스 기반 프레임워크에 속한 객체는, 구현 클래스 대신에 보통 abstract로 선언되는 기반 클래스로 참조하는 것이 바람직하다.
'개발서적 > 이펙티브자바' 카테고리의 다른 글
[일반적인 프로그래밍 원칙들]규칙54. 네이티브 메서드는 신중하게 사용하라 (0) | 2017.05.06 |
---|---|
[일반적인 프로그래밍 원칙들]규칙53.리플렉션 대신 인터페이스를 이용하라 (0) | 2017.05.06 |
[일반적인 프로그래밍 원칙들]규칙51. 문자열 연결시 성능에 주의하라 (0) | 2017.05.05 |
[일반적인 프로그래밍 원칙들]규칙50. 다른 자료형이 적절하다면 문자열 사용은 피하라 (0) | 2017.05.05 |
[일반적인 프로그래밍 원칙들]규칙49. 객체화된 기본 자료형 대신 기본 자료형을 이용하라 (0) | 2017.05.05 |