[Chapter 03] 자바 리플렉션 기법 #16
Replies: 3 comments
-
리플렉션(reflection) 뜻 자체가 반사, 투영이라는 뜻을 가지고 있습니다. 아래는 리플렉션 기법을 이용한 또 다른 예시로 클래스 로더를 통해 @Slf4j
@SpringBootApplication
public class CorockApplication {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
Class<?> aClass = Class.forName("com.cowaine.corock.chapter03.di.OrderPrinter");
Constructor<?> constructor = aClass.getConstructor(Formatter.class);
OrderPrinter orderPrinter = (OrderPrinter) constructor.newInstance(new LocalDateTimeFormatter());
log.info(orderPrinter.toString());
}
} 그냥 인스턴스 만드는 거 아니야? 라고 생각할 수 있지만, @Service
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
@ToString
public class OrderPrinter implements Printer<OrderProduct> {
private Formatter<LocalDateTime> formatter;
// (...)
} 애플리케이션을 실행하면, 터미널에 찍힌 로그를 통해 정상적으로 인스턴스가 생성된 것을 확인할 수 있습니다. 2023-08-22 19:25:11.711 INFO 12644 --- [ main] com.cowaine.corock.CorockApplication : OrderPrinter(formatter=LocalDateTimeFormatter(formatter=Value(YearOfEra,4,19,EXCEEDS_PAD)'-'Value(MonthOfYear,2)'-'Value(DayOfMonth,2)'T'Value(HourOfDay,2)':'Value(MinuteOfHour,2)':'Value(SecondOfMinute,2))) 스프링 웹 개발을 한다면 다음과 같은 클래스를 참고하는 것도 도움이 될 것 같습니다. |
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
리플렉션을 직접적으로 사용하기보다 라이브러리에서 많은 예시를 볼 수 있는 것 같습니다. https://frost-canvas-b44.notion.site/Mapstruct-7307e37839f34b279ff269a9c2ced991?pvs=4 |
Beta Was this translation helpful? Give feedback.
-
P. 135 마지막 문단에서 private 키워드가 선언된 변수들은 클래스 외부에서 접근이 자유롭지 못하기 때문에 테스트 케이스를 작성할 때,
자바 리플렉션 기법이나 테스트 프레임워크를 사용하여 mocking 작업을 해야 한다. 라고 되어있는데
여기서 자바 리플렉션 기법이 어떤 건지 찾아봤는데 런타임 중에 클래스의 정보를 조작하는 기법? 이라는게 뭔가 명확히 개념이 잡히지 않아서
리플렉션 기법이 어떤 건지 궁금합니다.
Beta Was this translation helpful? Give feedback.
All reactions