Docs에서 찾아본 Java의 Introspector의 기능은 .. 다음과 같습니다.
The Introspector class provides a standard way for tools to learn about the properties, events, and methods supported by a target Java Bean.
Docs에 게제된 설명만으로는 확실히 이해하기 어려우니 관련된 용어부터 차근차근 알아가보겠습니다.
Java Bean
JavaBean은 Java 클래스를 어떻게 작성할지에 대한 표준 중 하나입니다. JavaBean의 특징은 다음과 같습니다.
- 모든 properties는 private 속성을 가집니다. (public getter, setter을 설정합니다)
- 인자가 없는 public constructor을 가집니다.
- Serializable을 implement해야 합니다.
JavaBean을 사용함으로써 해당 클래스가 어떻게 구현됐고 어떤 특징이 있는지 미리 알 수 있기 때문에 다양한 라이브러리에서 JavaBean의 특징을 활용해서 코드를 작성할 수 있습니다. 예를 들어 객체를 네트워크 상에서 송수신하는 메서드가 있다고 가정하면, 해당 메서드가 송수신하는 객체는 Serializable을 구현해야합니다. 해당 클래스가 JavaBean이라면 Serializable을 구현했을것이기에 메서드는 해당 클래스의 객체를 네트워크로 송수신할 수 있습니다.
JavaBean의 구성요소는 다음과 같습니다.
- Properties
- JavaBean 규칙을 따른 클래스의 fields입니다.
- JavaBean의 property로 등록하기 위해서는 설정하고자 하는 field를 public getter와 public setter을 설정해줘야 합니다.
- Methods
- Property 설정과 관련없는 JavaBean의 모든 public method를 의미합니다.
- Events
- JavaBean은 event를 발생시킬 수 있는데, event는 다른 JavaBean의 메서드를 호출하는데 사용할 수 있습니다.
Introspection
Introspection의 사전적 의미는 자아성찰 또는 자기반성입니다. JavaBean을 Introspect한다는 의미는 JavaBean의 구조를 파악해 properties, methods 와 events를 파악함을 의미합니다. Introspection은 runtime에 진행됩니다(Reflection 기법을 통해서). Introspection이 정상적으로 동작하려면 introspect의 대상인 클래스를 JavaBean의 디자인 패턴에 맞게 작성해야 합니다. JavaBean의 properties, methods, events에 대해 추가적인 정보를 제공하고 싶으면 BeanInfo 인터페이스의 구현체를 제공하면 됩니다.
Introspector
Introspector은 JavaBean의 properties, methods, events를 분석하는 클래스입니다. BeanInfo가 제공되지 않는다면 Introspector은 Reflection을 통해 JavaBean의 구조를 분석합니다. Introspector은 JavaBean의 BeanInfo 클래스들을 캐싱함으로써 성능을 높이기도 합니다.
Reference
https://docs.oracle.com/javase/tutorial/javabeans/writing/properties.html
https://www.cs.auckland.ac.nz/references/java/java1.5/tutorial/javabeans/introspection/index.html
'Java > Deep Java' 카테고리의 다른 글
[Java] LocalDate.now()를 사용하면 안되는 이유 (0) | 2023.09.01 |
---|---|
[Java] Java 네트워크 Deep Dive (0) | 2023.07.30 |
[Java] Java 실행원리 Deep Dive (4) | 2023.01.23 |
[Java] Java Thread Deep Dive (2) | 2022.12.17 |
[Java] System.out.println() 동작원리 native method까지 까보기 (2) | 2022.05.03 |