어노테이션

코드에 메타데이터를 붙이는 방법입니다. @ 기호로 시작하며, 컴파일러나 프레임워크에게 "이 코드를 이렇게 처리해줘"라고 알려줍니다.

왜 필요한가?

Java 기본 어노테이션

어노테이션용도
@Override메서드 오버라이드 명시
@Deprecated더 이상 사용 권장하지 않음
@SuppressWarnings컴파일러 경고 무시
@FunctionalInterface함수형 인터페이스 명시

예시

// 기본 어노테이션
public class Child extends Parent {
    @Override  // 부모 메서드 오버라이드임을 명시
    public void sayHello() {
        System.out.println("Hello");
    }
}

// Spring 어노테이션
@RestController
@RequestMapping("/api/users")
public class UserController {

    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        return userService.findById(id);
    }
}

Spring에서 자주 쓰는 어노테이션

어노테이션용도
@Component빈으로 등록
@Service서비스 계층 빈
@Repository데이터 접근 계층 빈
@ControllerMVC 컨트롤러
@Autowired의존성 자동 주입
@Transactional트랜잭션 처리

어노테이션 동작 시점

시점설명예시
SOURCE컴파일 전까지만 유지@Override
CLASS클래스 파일까지 유지기본값
RUNTIME런타임에도 유지@Controller

커스텀 어노테이션 만들기

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogExecutionTime {
}

// 사용
@LogExecutionTime
public void someMethod() { ... }

어노테이션 vs XML 설정

항목어노테이션XML
위치코드와 함께별도 파일
가독성직관적분리되어 파악 어려움
변경재컴파일 필요재시작만 필요
현재 추세선호됨레거시

CSLOG에서 보기