1) 리플렉션(reflection)이란?
- 리플렉션 기능(java.lang.reflect)을 이용하면 프로그램에서 임의의 클래스에 접근할 수 있습니다.
Class 객체가 주어지면 그 클래스의 생성자, 메서드, 필드에 해당하는
Constructor, Method, Field 인스턴스를 가져올 수 있습니다.
그리고 이 인스턴스들로는 그 클래스의 멤버 이름, 필드 타입, 메서드 시그니처 등을 가져올 수 있습니다.
- 나아가 Constructor, Method, Field 인스턴스를 이용해 각각에 연결된
실제 생성자, 메서드, 필드를 조작할 수도 있습니다.
이 인스턴스들을 통해 해당 클래스의 인스턴스를 생성하거나, 메서드를 호출하거나,
필드에 접근할 수 있다는 뜻입니다.
- 예를 들어, Method.invoke는 어떤 클래스의 어떤 객체가 가진 어떤 메서드라도
호출할 수 있게 해줍니다.
2) 리플렉션(reflection)의 단점
(1) 컴파일타임 타입 검사가 주는 이점을 하나도 누릴 수 없다
- 리플렉션을 사용하면, 코드에서 타입이나 메서드를 동적으로 다룹니다.
따라서 프로그램이 리플렉션 기능을 써서 존재하지 않는
혹은 접근할 수 없는 메서드를 호출하려 시도하면 런타임 오류만 검출 가능합니다.
(2) 리플렉션을 이용하면 코드가 지저분하고 장황해진다
- 지루한 일이고, 읽기도 어렵습니다.
(3) 성능이 떨어진다
- 리플렉션을 통한 메서드 호출은 일반 메서드 호출보다 훨씬 느립니다.
'Effective Java' 카테고리의 다른 글
[이펙티브 자바] 아이템 20. 추상 클래스보다는 인터페이스를 우선하라 (0) | 2024.12.18 |
---|---|
[이펙티브 자바] 아이템69. 예외는 진짜 예외 상황에만 사용하라 (0) | 2024.06.23 |
[이펙티브 자바] 아이템 44. 표준 함수형 인터페이스를 사용하라 (0) | 2024.06.23 |
[이펙티브 자바] 아이템 45. 스트림은 주의해서 사용하라 (0) | 2024.06.21 |