• Constructor 객체를 이용하여 마우스 객체를 생성한다.
    • 이 경우, 컨트롤러에서 클래스의 이름을 넘겨주어야 하지만, 새로운 마우스가 생기더라도 Factory 클래스의 수정 없이 유연하게 확장 가능한 코드가 된 것이다.

  • 내가 그의 이름을 불러 주기 전에는 그는 다만 하나의 몸짓에 지나지 않았다.
    내가 그의 이름을 불러 주었을 때, 그는 나에게로 와서 꽃이 되었다. – 김춘수, “꽃”

  • 프로그래밍의 세계에서도, 현실의 검색서비스 그리고 주문서비스의 기능을 제공하는데, 이를 “Self Introspection” 또는 “Reflection”이라고 부른다.

  • 클래스(Class)의 이름만으로 클래스의 정보(필드, 메서드)를 찾거나 새로운 객체(Object)를 생성할 수 있다는 얘기다.


  • 성능(Performance) vs. 유연성(Flexibility)
    • 앞서 말한 바와 같이 “Reflection을 사용한 코드는 느리다”는 사실은 사실이 아니다.

    • 이 말은 Reflection을 사용할 경우 성능이 떨어지지 않는다라는 얘기가 아니다.

    • 오히려, 성능이 떨어진다는 결과가 다수 존재한다.

    • 아래는 Dennis Sosnoski(5. Java Programming dynamics, Part 2: Introducing reflection)가 측정한 Reflection에 관한 성능 결과이다. 그림에서 알 수 있듯이, Reflection을 사용할 경우, 직접(Direct) 또는 참조(Reference)의 경우에 비해 2 ~ 4배 정도 느리다.

그림 5. 필드 변수 Access 시간

 

그림 6. 메서드 호출 시간

'JAVA' 카테고리의 다른 글

GC(Garbage Collector)이란?  (0) 2020.08.07
JVM 이란?  (0) 2020.08.07
Jit 컴파일러란? 최적화 튜닝에 대해서  (0) 2020.08.07
Java 어노테이션 (annotation) 이란?  (0) 2020.08.07
객체지향 5원칙 SOLID 이란?  (0) 2020.07.09

+ Recent posts