리플렉션이란?
- 힙 영역에 로드된 Class 타입의 객체를 통해, 원하는 클래스의 인스턴스를 생성할 수 있도록 지원하고, 인스턴스의 필드와 메소드를 접근 제어자와 상관 없이 사용할 수 있도록 지원하는 API
- 여기서 로드된 클래스라고 함은, JVM의 클래스 로더에서 클래스 파일에 대한 로딩을 완료한 후, 해당 클래스의 정보를 담은 Class 타입의 객체를 생성하여 메모리의 힙 영역에 저장해 둔 것을 의미한다.
리플렉션 장단점
- 런타임 시점에서 클래스의 인스턴스를 생성한다
- 접근 제어자와 관계 없이 필드와 메소드에 접근하여 필요한 작업을 수행할 수 있는 유연성을 가지고 있다.
- 캡슐화 저해
리플렉션을 언제 사용하는가?
- 가령 사용자가 덧셈을 입력하고 싶다고 하면 덧셈에 관한 class를 사용해야하고, 뺄셈이라고 명령어를 입력하면 뺄셈에 대한 class를 사용해야한다고 가정하자. 이를 일반적으로 구현하려면 if-else문을 사용해야한다. 하지만 리플렉션을 사용하면 다음과 같은 일이 가능하다
String className = getUserInput();
Class<?> clazz = Class.forName(className);
Object operation = clazz.newInstance();
- 즉, 리플렉션을 사용하면 사용자 입력이나 설정파일과 같이 런타임에야만 알 수 있는 정보를 가지고 인스턴스를 생성할 수 있습니다
글 재미있게 봤습니다.