(Effective Java) 리플렉션 대신 인터페이스를 이용하라

* java.lang.reflect의 리플렉션 기능을 이용하면 메모리에 적재된(load) 클래스의 정보를 가져오는 프로그램을 작성할 수 있다.
또한 리플렉션을 이용하면, 소스코드가 컴파일 될 당시에는 존재하지도 않았던 클래스를 이용할 수 있다. 하지만 이런 능력에는 댓가가 따른다.



  • 컴파일 시점에 자료형을 검사함으로써 얻을 수 있는 이점들을 포기해야 한다.(예외검사 Exception Checking 포함). 리플렉션을 통해 존재하지 않는, 또는 접근 할 수 없는  메소드를 호출하면 실행도중에 오류가 발생할 것이다. 
  • 리플렉션 기능을 이용하면 코드는 보기 싫은데다 장황하다. 영리한 코드와는 거리가멀고, 가독성도 떨어진다.
  • 성능이 낮다. 리플렉션을 통한 메소드 호출 성능은, 일반적인 메소드 호출에 비해 훨씬낮다. 

* 명심할 것은, 일반적인 프로그램은 프로그램 실행중에 리플렉션을 통해 객체를 이용하려 하면 안된다는 것이다.


* 리플렉션을 아주 제한적으로만 사용하면 오버헤드는 피하면서도 리플렉션의 다양한 장점을 누릴 수 있다. 
컴파일 시점에 존재하지 않는 클래스를 이용해야 하는 프로그램 가운데 상당수는, 해당 클래스 객체를 참조하는데 사용할 수 있는 인터페이스나 상위클래스는 컴파일 시점에 이미 갖추고 있는 경우가 많다.
그럴때는, 객체생성은 리플렉션으로 하고 객체 참조는 인터페이스나 상위 클래스르 통하면 된다.


댓글

이 블로그의 인기 게시물

(네트워크)폴링방식 vs 롱 폴링방식

(ElasticSearch) 결과에서 순서 정렬

(18장) WebSocekt과 STOMP를 사용하여 메시징하기