런타임 주석 처리
리플렉션으로 런타임에 주석을 읽어 유효성 검사, 라우팅 또는 주입 로직을 구현합니다.
런타임 주석 처리은(는) CoddyKit의 무료 Java Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Java Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
클래스 수준 애너테이션 읽기
Class.getAnnotation()으로 클래스의 애너테이션 하나를 가져오고, getAnnotations()로 모두 가져옵니다. 애너테이션이 없으면 null을 반환합니다.
@Service
@RequestMapping("/api")
public class UserController {}
RequestMapping rm = UserController.class.getAnnotation(RequestMapping.class);
if (rm != null) System.out.println(Arrays.toString(rm.value())); // ["/api"]메서드 애너테이션 읽기
method.getAnnotation()으로 메서드 애너테이션을 가져옵니다. 클래스의 모든 메서드를 검색하려면 getDeclaredMethods()를 순회합니다.
for (Method m : UserController.class.getDeclaredMethods()) {
GetMapping gm = m.getAnnotation(GetMapping.class);
if (gm != null) System.out.println(m.getName() + " -> " + Arrays.toString(gm.value()));
}필드 애너테이션 읽기
필드 애너테이션은 검증 및 ORM 프레임워크에서 사용됩니다. getDeclaredFields()를 순회하며 관련된 각 애너테이션을 확인합니다.
for (Field f : User.class.getDeclaredFields()) {
Column col = f.getAnnotation(Column.class);
if (col != null) System.out.println(f.getName() + " -> column: " + col.name());
}매개변수 애너테이션 읽기
매개변수 애너테이션은 method.getParameterAnnotations()으로 가져올 수 있습니다. 이 메서드는 2차원 배열을 반환하며, 매개변수마다 한 행이 있고 각 행에는 해당 매개변수의 애너테이션이 들어갑니다.
Method m = UserController.class.getDeclaredMethod("create", UserDto.class);
Annotation[][] pa = m.getParameterAnnotations();
for (Annotation a : pa[0]) System.out.println(a.annotationType().getSimpleName()); // e.g. ValidisAnnotationPresent
애너테이션 값을 읽기 전에 isAnnotationPresent(AnnotationType.class)를 사용하여 null 안전성을 확보한 상태로 빠르게 확인합니다.
if (m.isAnnotationPresent(Transactional.class)) {
beginTransaction();
m.invoke(target, args);
commitTransaction();
}간단한 의존성 주입 컨테이너 만들기
@Component가 지정된 클래스를 패키지에서 검색하고, 리플렉션으로 인스턴스화한 다음 map에 저장합니다. 이는 단순화한 Spring 컨테이너입니다.
Map<Class<?>, Object> beans = new HashMap<>();
for (Class<?> cls : scanPackage("com.example")) {
if (cls.isAnnotationPresent(Component.class)) {
beans.put(cls, cls.getDeclaredConstructor().newInstance());
}
}@Inject가 지정된 필드 주입하기
빈을 생성한 후 @Inject가 지정된 필드를 검색하고 리플렉션으로 값을 설정하여 필드 주입을 모방합니다.
for (Object bean : beans.values()) {
for (Field f : bean.getClass().getDeclaredFields()) {
if (f.isAnnotationPresent(Inject.class)) {
f.setAccessible(true);
f.set(bean, beans.get(f.getType()));
}
}
}애너테이션 값으로 런타임 검증하기
제약 애너테이션의 값(예: @Range(min=1, max=100))을 읽고 런타임에 필드 값이 해당 제약 조건을 만족하는지 검증합니다.
for (Field f : dto.getClass().getDeclaredFields()) {
Range range = f.getAnnotation(Range.class);
if (range != null) {
f.setAccessible(true);
int val = (int) f.get(dto);
if (val < range.min() || val > range.max())
throw new ValidationException(f.getName() + " out of range");
}
}반복 가능한 애너테이션 읽기
@Repeatable 애너테이션에는 getAnnotationsByType()을 사용하여 컨테이너 애너테이션에서 모든 인스턴스를 투명하게 가져옵니다.
Tag[] tags = MyClass.class.getAnnotationsByType(Tag.class);
for (Tag t : tags) System.out.println(t.value());ClassPath 라이브러리로 패키지 검색하기
표준 Java 리플렉션으로는 패키지의 모든 클래스를 나열할 수 없습니다. Reflections, ClassGraph 또는 Spring의 ClassPathScanningCandidateComponentProvider와 같은 라이브러리를 사용하여 클래스 경로 항목을 검색합니다.
Reflections reflections = new Reflections("com.example.service");
Set<Class<?>> services = reflections.getTypesAnnotatedWith(Service.class);
services.forEach(System.out::println);런타임 애너테이션 처리: 요약
런타임 애너테이션 처리는 의존성 주입, 검증, 라우팅 및 객체 관계 매핑을 지원합니다. 이 작업은 초기화 시점에 수행해야 합니다. 시작할 때 애너테이션을 한 번 처리하고 결과를 캐시하여 요청마다 실행되는 경로에서 리플렉션을 사용하지 않도록 합니다.
빠른 확인
@Repeatable 애너테이션의 모든 인스턴스를 가져오는 메서드는 무엇인가요?
정리
단일 애너테이션에는 getAnnotation/isAnnotationPresent를 사용합니다. getDeclared*로 메서드와 필드를 검색합니다. 반복 가능한 애너테이션에는 getAnnotationsByType을 사용합니다. 시작할 때 처리하고 결과를 캐시합니다.
자주 묻는 질문
“런타임 주석 처리” 강의는 무료인가요?
네 — “런타임 주석 처리” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Java Academy 강의 전체를 잠금 해제할 수 있습니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“런타임 주석 처리”에서 뭘 배우나요?
리플렉션으로 런타임에 주석을 읽어 유효성 검사, 라우팅 또는 주입 로직을 구현합니다. 브라우저에서 직접 실행하는 실습 코드로 Java Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Java Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Java Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“런타임 주석 처리” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Java Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Java Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.