Spring 03 Annotation

Kang.__.Mingu·2024년 9월 7일

Spring

목록 보기
3/21

어노테이션을 사용하기 전

AnnotationBean.java

AnnotationBeanApp

04-3_beanAnnotation.xml

어노테이션을 사용한 후

ComponentAnnotationBean.java

ComponentAnnotationBeanApp.java

04-3_beanAnnotation.xml

위에 보면 @Componebt 어노테이션을 쓴 것을 볼 수 있다. 해당 어노테이션을 사용하기 전에 xml(Spring Container) 환경설정파일에 설정을 해줘야한다.

component-scan

<context:component-scan base-package="xyz.itwill04.bean"/>

component-scan 이란?
스프링 컨테이너가 클래스에서 사용된 스프링 어노테이션을 검색해 처리할 수 있도록 설정하는 엘리먼트이다.

  • base-package 속성: 스프링 어노테이션을 사용한 클래스가 작성된 패키지를 속성값으로 설정
    => 상위 패키지를 속성값으로 설정하면 하위 패키지도 자동으로 포함된다.

component-scan의 역할

  • <context:component-scan>: XML 설정 파일에서 이 설정은 지정된 패키지를 스캔하여 @Component, @Service, @Repository, @Controller와 같은 어노테이션이 붙은 클래스를 자동으로 Bean으로 등록한다.

@Component

  • 클래스를 스프링 컨테이너가 관리하는 Spring Bean으로 등록하기 위한 어노테이션이다.

  • 클래스의 이름을 식별자(beanName)로 사용하고, 첫번째 문자는 소문자로 변환되어 사용한다.

    • ComponentAnnotationBean 클래스에서 @Component만 사용한 경우 beanName은 componentAnnotationBean 첫 번째 문자만 소문자로 인식한다.
  • @Component 어노테이션의 value 속성을 사용하여 식별자 변경 가능하다.

    • ComponentAnnotationBean 클래스에서 @Component("bean")value 속성을 사용한 경우beanName은 bean 으로 설정된다.

어노테이션의 주요 장점(어노테이션과 XML 비교)

  1. 코드의 간결성과 가독성 향상

    • 어노테이션 사용: 클래스 위에 직접 어노테이션을 추가함으로써, 해당 클래스가 어떤 역할을 하는지 즉시 알 수 있습니다. 예를 들어, @Component나 @Service와 같은 어노테이션을 보면 해당 클래스가 Spring Bean으로 사용된다는 것을 바로 알 수 있습니다.

    • XML 설정 사용: XML 파일을 열어 설정을 확인해야 하며, 설정과 코드가 분리되어 있어 가독성이 떨어질 수 있습니다.

      @Component
      public class MyComponent { }
      
      <bean class="com.example.MyComponent" id="myComponent"/>
      
  2. 설정과 코드의 일관성

    • 어노테이션 사용: 설정과 코드가 같은 파일에 존재하므로, 변경 사항을 쉽게 추적하고 수정할 수 있습니다. 개발자가 코드를 작성하면서 설정까지 동시에 처리할 수 있어 실수를 줄이고 일관성을 유지할 수 있습니다.

    • XML 설정 사용: 설정 파일과 코드가 분리되어 있어 코드 변경 시 설정 파일을 함께 수정해야 하며, 이로 인해 불일치가 발생할 수 있습니다.

  3. 유지보수와 관리가 용이함

    • 어노테이션 사용: 코드와 설정이 한 곳에 있기 때문에 유지보수가 쉬워지고, 코드의 변화에 따른 설정 변경이 자동으로 관리됩니다.

    • XML 설정 사용: XML 설정 파일이 많아지면 관리가 어려워지고, 어떤 설정이 어떤 클래스에 대응되는지 찾기가 번거로울 수 있습니다.

  4. 자동 스캔을 통한 Bean 등록

    • component-scan과 @Component 사용: @ComponentScan이나 <context:component-scan>을 설정하면 해당 패키지 내 모든 @Component, @Service, @Repository 등의 어노테이션이 붙은 클래스가 자동으로 Bean으로 등록됩니다.

    • XML 설정 사용: 모든 Bean을 하나하나 엘리먼트로 등록해야 합니다. 클래스가 추가될 때마다 새로운 설정을 추가해야 하며, 실수로 빠뜨리기 쉽습니다.

      <!-- XML 설정을 통한 Bean 등록 -->
      <context:component-scan base-package="com.example"/>
      
      // @Component 어노테이션 사용
      @Component
      public class MyComponent { }
      
  5. 자동 의존성 주입의 간편함

    • 어노테이션 사용: @Autowired, @Inject, @Qualifier 등을 사용하여 자동으로 의존성을 주입할 수 있습니다. 의존성 주입 설정이 코드에 직접 포함되어 있어 변경 사항을 쉽게 적용할 수 있습니다.

    • XML 설정 사용: 의존성을 주입하려면 <property> 태그를 사용해야 하며, XML 파일을 수정해야 합니다. 이는 유지보수 시 번거로움을 야기합니다.

      // @Autowired를 사용한 의존성 주입
      @Service
      public class MyService {
        @Autowired
        private MyRepository myRepository;
      }
      
      <!-- XML을 사용한 의존성 주입 -->
      <bean class="com.example.MyService" id="myService">
        <property name="myRepository" ref="myRepository"/>
      </bean>
      
  6. 어노테이션 기반 설정의 유연성

    • 어노테이션 기반 설정은 코드 내에서 Bean의 생성, 초기화, 소멸을 포함한 라이프사이클 메서드를 쉽게 정의할 수 있습니다. XML 설정에서는 , 등을 추가해야 하는 반면, 어노테이션에서는 @PostConstruct, @PreDestroy 같은 어노테이션을 사용하여 간편하게 설정할 수 있습니다.
  7. 명확한 역할 구분과 관리

    • 어노테이션은 코드의 역할을 명확히 구분해줍니다. @Service, @Repository, @Controller 등의 어노테이션을 통해 각 클래스의 역할을 즉시 파악할 수 있어, 협업 시에도 코드의 이해도가 높아집니다.
profile
최선을 다해 꾸준히 노력하는 개발자 망고입니당 :D

0개의 댓글