자바_리플랙션_01
리플랙션
- 리플랙션은 언어이며, JVM 기능이고 실행동안 클래스와 객체 정보를 얻을 수 있음
- 리플랙션 API는 JDK에 달린 클래스 집합과 메서드.
그래서 너가 뭘 할 수 있는데?
- 리플랙션 API로 유연한 코드 작성
- 소스코드를 수정하지않고 새로운 프로그램 순서 만들수있음
- 다목적 알고리즘 작성가능 -> 실행하고 있는 클래스와 객체에 따라 알고리즘 조정가능
자바 리플랙션 사용된 곳
리플랙션 Entry Point - Class<?>
- Class<?> 는 어플리케이션 진입점
- Class<?>은 객체의 런타임에 관한 정보가 있거나, 앱에 있는 특정한 클래스를 확인
클래스를 확인하는 세 가지 방법
- Object.getClass() ```java String stringObejct = “hello”; Car car = new Car(); Map<String, Integer> map = new HashMap<>();
==>
Class
primitive 타입은 객체가 아니라 타입정보를 못얻음
1
2
3
4
5
6
7
<br>
2. .class
```java
Class intTYpe = int.class
- Class.forName(…)
1 2
Class<?> carType = Class.forName("패키지명.클래스명"); Class<?> carType = Class.forName("패키지명.클래스명$내부 클래스명");
인스턴스를 확인하거나 만들려는 타입이 사용자 정의 구성 파일에서 전달될 떄 사용
- 우리가 확인하려는 클래스가 프로젝트에 없고 코드를 컴파일할 떄 클래스가 없으면 사용 —
? - 와일드 카드
- 제네릭 - 와일드카드
- Integer클래스는 Number 추상클래스를 상속받음
- String은 CharSequence 인터페이스를 상속
- 그러나 List
은 상위객체가 없음 - 와일드카드는 제네릭의 타입 목록이면 전부 상위목록으로 해당된다
- Class<?> - 와일드카드
- 와일드카드가 있는 클래스로 매개변수 클래스 객체를 생성가능
- 이 클래스가 상위 클래스임
- 클래스의 제네릭 매개변수가 제네릭 타입이면 와이들카드를 사용해야함
1 2 3 4 5
public List<String> findAll(Class<? extends Collection> clazz) { // 컬렉션을 상속받은 클래스만 받을 수 있음. } // 클래스가 메서드로 전달되는걸 제한할 수 있음 // 매개변수가 특정한 클래스와 인터페이스만 실행하도록 제한함
This post is licensed under CC BY 4.0 by the author.