기록이 힘이다.

리플렉션보다 인터페이스를 사용하라. 본문

JAVA

리플렉션보다 인터페이스를 사용하라.

dev22 2023. 4. 24. 20:27
728x90

리플렉션은 코어단에서 많이 사용을 한다.

객체를 사용할 때 사용해야 한다. 주의해서 사용하라는 것 같다. 

 

리플랙션을 사용하면 임의의 클래스에 접근가능.

클래스의 Constructor, Method, Field 인스턴스를 가져올수 있음.

각각에 연결된 각 생성자 메서드 필드를 조작할 수 있다.

Method.invoke는 어떤 클래스의 어떤 객체가 가진 어떤 메서드라도 호출할 수 있다.

단점!

  1. 컴파일타임 타입 검사가 주는 이점을 하나도 누릴 수 없다.
    1. 리플랙션으로 없는 메서드를 호출하면 런타임 오류가 발생함.
  2. 리플렉션을 이용하면 코드가 지저분하고 장황해진다.
  3. 성능이 떨어진다.

프레임워크 단에서 리플랙션을 사용하여 구현하는 로직들이 있음. 이들도 리플랙셔 사용을 지양하는 방향으로 진행되고있음. (단점이 명확하기 때문이다!)

리플랙션은 아주 제한된 형태로만 사용해야 그 단점을 피하고 이점만 취할수 있다.

→ 주로 리플랙션은 인스턴스 생성에만 쓰고, 이렇게 만든 인스턴스는 인터페이스나 상위 클래스로 참조하여 사용하는 방향이 좋다.

리플랙션의 단점을 보여주는 예제 (65-1)

두가지 단점.

  1. 첫번째 런타임에 총 여섯가지나 되는 예외를 던질 수 있다.
    1. java7 부터 지원하는 ReflectiveOperationException으로 런타임 에러를 잡을 수 있긴함.
  2. 클래스 이름만으로 인스턴스를 생성해내기 위해 무려 25줄이나 되는 코드를 사용함.
    1. 리플랙션이 아니었다면 생성자 한줄로 가능함

 

함께 스터디를 하면서 서로의 현업에 대해 이야기하고 환경을 알 수 있어 좋은 것 같다. 리플렉션 같은 경우도 기술면접에서 질문이 나오기도 하였는데 이번기회에 알아가는 시간을 가져서 좋았다.