리플렉션
리플렉션 기능을 이용하면 프로그램에서 임의 클래스에 접근할 수 있다.
- Class 객체가 주어지면 클래스의 Constructor, Method, Field 인스턴스 가져올 수 있고, 인스턴스들로 클래스의 멤버 이름, 필드 타입, 메서드 시그니처 등을 가져올 수 있음
- Constructor, Method, Field 인스턴스 이용해 각각에 연결된 실제 생성자, 메서드, 필드 조작 가능
= 해당 클래스 인스턴스 생성, 메서드 호출, 필드 접근 가능
- Method.invoke는 어떤 클래스의 어떤 객체가 가진 어떤 메서드라도 호출할 수 있게 해준다.
→ 컴파일 당시에 존재하지 않던 클래스도 이용할 수 있다.
자바 리플렉션 (Reflection) 기초
리플렉션 단점
- 컴파일타임 타입 검사가 주는 이점을 하나도 누릴 수 없다.
- 프로그램이 리플렉션 기능을 사용해 존재하지 않는 / 접근할 수 없는 메서드 호출하려 시도하면 런타임 오류가 발생한다.
- 리플렉션을 이용하면 코드가 지저분하고 장황해진다.
- 성능이 떨어진다.
- 리플렉션 통한 메서드 호출은 일반 메서드 호출보다 훨씬 느리다.
→ 단점이 명백해 리플렉션을 사용해야 하는 복잡한 애플리케이션에서도 사용을 줄이고 있다.
→ 리플렉션이 필요한지 확신할 수 없다면 필요 없을 가능성이 크다.