Project/Spring

Retention, Reflection, Annotation

east-wind 2025. 4. 1. 23:56

1. Retention (보유 정책 - @Retention)

  • Java의 어노테이션 유지 정책을 정의하는 개념
  • @Retention 어노테이션을 사용하여 특정 어노테이션이 얼마나 오래 유지될 것인지 설정
  • RetentionPolicy의 세가지 유형
    • SOURCE : 컴파일 후 제거됨 (예: @Override)
    • CLASS : 컴파일 후 클래스 파일에 포함되지만, 런타임에는 사용 불가 (기본값)
    • RUNTIME : 런타임에도 유지되며 리플렉션(Reflection)으로 접근 가능

2. Reflection (리플렉션)

  • 클래스, 메서드, 필드 등의 메타데이터를 런타임에 동적으로 조회하고 조작할 수 있는 기능
  • 컴파일 시점이 아니라 실행 중에 객체의 정보를 가져오거나 수정할 수 있음.
  • 주로 프레임워크(Spring, Hibernate 등)에서 많이 사용
  • 예 : 동적으로 객체를 생성해야할 때(JSON 설정 파일에서 클래스 이름을 읽어와서 객체 생성)
  • Spring에서 @Autowired로 의존성 주입을 할 때도 리플렉션 사용 - Spring이 내부적으로 어떤 클래스를 주입해야하는지 런타입에 결정
  • 보안 문제(private 필드도 접근 가능), 성능 저하(일반적인 메서드 호출보다 느림, 메서드를 찾고 실행하기 때문) 문제 발생 가능

3. Annotation (어노테이션)

  • 메타데이터를 추가할 수 있는 기능.
  • 코드에 특별한 정보를 추가하여 컴파일러나 런타임 환경이 특정 동작을 수행하도록 함.
  • 코드  가독성, 유지보수성 향상
  • 비즈니스 로직과 분리하여 대상의 Validation check, 값 주입, 역할 부여 등을 수행할 수 있음
  • 예:
    • @Override → 부모 클래스의 메서드를 재정의할 때 사용
    • @Deprecated → 더 이상 사용되지 않는 메서드임을 표시
    • 사용자 정의 어노테이션도 가능

 

 

'Project > Spring' 카테고리의 다른 글

DB Control  (0) 2025.03.26
이미지 업로드  (0) 2025.03.25
Object DTO/페이지네이션  (0) 2025.03.25
로그인 기능  (0) 2025.03.25
로그인 방식  (0) 2025.03.24