JAVA
리플렉션보다 인터페이스를 사용하라.
dev22
2023. 4. 24. 20:27
728x90
리플렉션은 코어단에서 많이 사용을 한다.
객체를 사용할 때 사용해야 한다. 주의해서 사용하라는 것 같다.
리플랙션을 사용하면 임의의 클래스에 접근가능.
클래스의 Constructor, Method, Field 인스턴스를 가져올수 있음.
각각에 연결된 각 생성자 메서드 필드를 조작할 수 있다.
Method.invoke는 어떤 클래스의 어떤 객체가 가진 어떤 메서드라도 호출할 수 있다.
단점!
- 컴파일타임 타입 검사가 주는 이점을 하나도 누릴 수 없다.
- 리플랙션으로 없는 메서드를 호출하면 런타임 오류가 발생함.
- 리플렉션을 이용하면 코드가 지저분하고 장황해진다.
- 성능이 떨어진다.
프레임워크 단에서 리플랙션을 사용하여 구현하는 로직들이 있음. 이들도 리플랙셔 사용을 지양하는 방향으로 진행되고있음. (단점이 명확하기 때문이다!)
리플랙션은 아주 제한된 형태로만 사용해야 그 단점을 피하고 이점만 취할수 있다.
→ 주로 리플랙션은 인스턴스 생성에만 쓰고, 이렇게 만든 인스턴스는 인터페이스나 상위 클래스로 참조하여 사용하는 방향이 좋다.
리플랙션의 단점을 보여주는 예제 (65-1)
두가지 단점.
- 첫번째 런타임에 총 여섯가지나 되는 예외를 던질 수 있다.
- java7 부터 지원하는 ReflectiveOperationException으로 런타임 에러를 잡을 수 있긴함.
- 클래스 이름만으로 인스턴스를 생성해내기 위해 무려 25줄이나 되는 코드를 사용함.
- 리플랙션이 아니었다면 생성자 한줄로 가능함
함께 스터디를 하면서 서로의 현업에 대해 이야기하고 환경을 알 수 있어 좋은 것 같다. 리플렉션 같은 경우도 기술면접에서 질문이 나오기도 하였는데 이번기회에 알아가는 시간을 가져서 좋았다.