상황)
SQL로 Select했을 때 name 칼럼에 클래스의 변수명이 들어있어서 DTO에 넣으려면 name 칼럼의 값을 확인하고 DTO와 매칭 시켜서 값을 담아주어야 한다.
과정)
하나하나 setter로 모두 담아주려고 보니 코드가 길어지고 가독성이 떨어지는 것 같아서 한번에 담을 수 없을까라는 생각에 리플렉션을 공부하게 되었다.
리플렉션이란?
리플렉션은 구체적인 클래스 타입을 알지 못해도, 그 클래스의 메서드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API
리플렉션을 언제 사용하는가?
정적 언어인 자바를 동적인 문제로 해결해야 하는 경우가 있는데 이때 리플렉션을 사용한다고 한다.
클래스의 변수 명을 비교한 뒤 값을 넣어주어야 하는 나의 상황도 이러한 상황이라고 할 수 있을 것 같다.
리플렉션은 애플리케이션 개발보단 프레임워크, 라이브러리에서 많이 사용된다.
프레임워크, 라이브러리는 사용하는 사람이 어떤 클래스를 만들지 모르기 때문에 동적으로 해결해주기 위해 리플렉션을 사용한다고 한다.
대표적인 사용 예로는 스프링의 DI, Proxy, ModelMapper 등이 있다.
사용 예시)
class Ad {
private int idx;
private String title;
private String content;
}
Class<Ad> c = Ad.class;
Field[] fields = class.getDeclaredFields();
for (final Field field : fields) {
System.out.printf("%s %s\n", field.getType(), field.getName());
}
'Java' 카테고리의 다른 글
ObjectMapper (0) | 2022.08.24 |
---|---|
@PostConstruct, @PreDestroy (0) | 2022.08.24 |
UnrecognizedPropertyException (0) | 2022.08.23 |
JsonNode to Object (0) | 2022.08.23 |
mac 자바 8 설치 (0) | 2022.08.19 |
상황)
SQL로 Select했을 때 name 칼럼에 클래스의 변수명이 들어있어서 DTO에 넣으려면 name 칼럼의 값을 확인하고 DTO와 매칭 시켜서 값을 담아주어야 한다.
과정)
하나하나 setter로 모두 담아주려고 보니 코드가 길어지고 가독성이 떨어지는 것 같아서 한번에 담을 수 없을까라는 생각에 리플렉션을 공부하게 되었다.
리플렉션이란?
리플렉션은 구체적인 클래스 타입을 알지 못해도, 그 클래스의 메서드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API
리플렉션을 언제 사용하는가?
정적 언어인 자바를 동적인 문제로 해결해야 하는 경우가 있는데 이때 리플렉션을 사용한다고 한다.
클래스의 변수 명을 비교한 뒤 값을 넣어주어야 하는 나의 상황도 이러한 상황이라고 할 수 있을 것 같다.
리플렉션은 애플리케이션 개발보단 프레임워크, 라이브러리에서 많이 사용된다.
프레임워크, 라이브러리는 사용하는 사람이 어떤 클래스를 만들지 모르기 때문에 동적으로 해결해주기 위해 리플렉션을 사용한다고 한다.
대표적인 사용 예로는 스프링의 DI, Proxy, ModelMapper 등이 있다.
사용 예시)
class Ad {
private int idx;
private String title;
private String content;
}
Class<Ad> c = Ad.class;
Field[] fields = class.getDeclaredFields();
for (final Field field : fields) {
System.out.printf("%s %s\n", field.getType(), field.getName());
}
'Java' 카테고리의 다른 글
ObjectMapper (0) | 2022.08.24 |
---|---|
@PostConstruct, @PreDestroy (0) | 2022.08.24 |
UnrecognizedPropertyException (0) | 2022.08.23 |
JsonNode to Object (0) | 2022.08.23 |
mac 자바 8 설치 (0) | 2022.08.19 |