- Constructor 객체를 이용하여 마우스 객체를 생성한다.
- 이 경우, 컨트롤러에서 클래스의 이름을 넘겨주어야 하지만, 새로운 마우스가 생기더라도 Factory 클래스의 수정 없이 유연하게 확장 가능한 코드가 된 것이다.
- 이 경우, 컨트롤러에서 클래스의 이름을 넘겨주어야 하지만, 새로운 마우스가 생기더라도 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배 정도 느리다.
- 앞서 말한 바와 같이 “Reflection을 사용한 코드는 느리다”는 사실은 사실이 아니다.
'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 |