[아이템 65] 리플렉션보다는 인터페이스를 사용하라
요약
- 리플렉션은 인스턴스 생성에만 사용해라
- 리플렉션으로 만든 인스턴스는 인터페이스나 상위 클래스로 참조해 사용해라
리플렉션 이란?
java.lang.reflect 패키지에서 제공하는 기능들
- 리플렉션으로 가능한 것
- Constructor, Method, Field 인스턴스 가져오기
- 클래스의 멤버 이름, 필드 타입, 메서드 시그니처 가져오기
- 연결된 생성자, 메서드 필드 조작하기
- 조작 후 클래스의 인스턴스를 생성하거나, 메서드를 호출하거나, 필드에 접근 가능
리플렉션의 장점
- 컴파일 당시에 존재하지 않던 클래스를 이용 가능
- 런타임에 존재하지 않을 수도 있는 클래스, 메서드, 필드와의 의존성을 관리할 때 적합
- 버전이 여러개 존재하는 외부 패키지를 다룰 때 유용
리플렉션의 단점
- 컴파일타임 때 가능한 타입 검사 및 예외 검사가 런타임으로 늦춰짐
- 코드가 지저분하고 장황해짐
- 성능이 떨어짐
패키지 호환성을 위해 리플렉션의 사용할 때
- 가장 오래된 패키지만을 지원하도록 컴파일 후, 새로운 버전의 패키지는 리플렉션으로 인스턴스 생성 후 접근
- 리플렉션으로 접근하는 클래스나 메서드가 런타임에 존재하지 않는 경우에 대한 예외처리 필요