Annotation이란 무엇인가요?

  • 애노테이션(Annotation) 은 사전적 의미로는 주석을 뜻하며, 자바에서 애노테이션은 소스 코드에 추가해서 사용할 수 있는 메타 데이터의 일종이다.

  • 애노테이션은 클래스와 메서드에 추가하여 다양한 기능을 부여하는 역할을 한다.

  • 애노테이션을 정의하고, 원하는 위치(클래스, 메서드, 파라미터 등)에 배치한 후, 코드가 실행되는 도중 자바 리플렉션을 이용해 추가 정보를 획득해 기능을 수행하는 방식으로 동작한다.

  • 애노테이션이 나오기 전에는 XML이나 Serializable 같은 마커 인터페이스를 통해 추가적인 정보를 제공할 수 있었다.

[애노테이션 장점]

  • 가독성 : 클래스, 메서드 등 연관된 코드에 직접적으로 붙어있기 때문에 흐름을 따라가기 쉽다.

  • 설정 간소화 : 별도의 설정 파일 없이 애노테이션 적용을 통해 설정을 간소화할 수 있다.

  • 중복 코드 제거 : 설정을 재사용할 수 있기 때문에 코드의 중복을 줄일 수 있다.

[애노테이션 단점]

  • 런타임 오버헤드 : 런타임 시점에 리플렉션을 사용하여 처리하는 애노테이션의 경우 성능상 오버헤드가 발생할 수 있다.

  • 남용으로 인한 복잡성 : 지나치게 많은 애노테이션을 적용하면 오히려 코드를 이해하기 어려워질 수 있다.

스프링이 애노테이션 기반으로 만든 이유

  • XML을 통한 복잡한 설정은 코드의 복잡성을 올라가게 하고, 가독성을 떨어뜨리면서 유지보수를 어렵게 만드는 요인이 되었다.

  • 반면 애노테이션을 기반 구성은 가독성, 유지보수, 간결함 등의 장점이 존재하기 때문에 스프링에서는 애노테이션 기반 구성을 지원한다.

  • XML도 여전히 지원은 하므로 프로젝트 요구사항에 맞게 선택하여 사용할 수 있다.

스프링 주요 애노테이션

  • @ComponentScan

    • @Component, @Controller, @Service, @Repository, @Configuration이 붙은 클래스를 스프링 빈으로 등록한다.

  • @EnableAutoConfiguration

    • 스프링 부트의 자동 구성을 활성화하는 기능을 제공하는 애노테이션

  • @Component vs @Bean

    • 둘 다 스프링 빈으로 등록하기 위한 애노테이션인데, 차이가 있다.

    • @Component : 개발자가 직접 생성한 클래스를 스프링 빈으로 등록할 때 사용한다.

    • @Bean : 개발자가 직접 제어가 불가능한 외부 라이브러리를 스프링 빈으로 등록할 때 사용한다.

  • 외에도 @Autowired, @SpringBootApplication @Request..., @Response... 등 개발자의 편의를 위한 다양한 애노테이션을 제공한다.

참고

Last updated