Develop/Spring

@Component 어노테이션과 Validator

롱하 2024. 7. 10. 09:40

 

Validator를 만들면서 @Component 어노테이션을 추가하는 이유가 궁금해져서 이 글을 쓰게 되었다.

 

먼저, Validator에 @Component 어노테이션을 추가한 이유는 Spring의 컴포넌트 스캔 메커니즘을 통해 해당 밸리데이터 클래스를 스프링 컨텍스트에서 관리하는 빈(Bean)으로 등록하기 위함이다.

 

 

이유 및 장점

1. 자동 등록 및 의존성 주입

 

- '@Component' 어노테이션을 사용하면 Spring이 해당 클래스를 스프링 컨택스트의 빈으로 자동으로 등록한다.

이렇게 되면 다른 빈에서 이 밸리데이터를 자동으로 주입 받을 수 있으며 명시적으로 빈을 등록하거나 주입하는 번거로움을 줄일 수 있다.

 

@Component
@RequiredArgsConstructor
public class NoticeValidator implements Validator {
    // 필드와 메서드 정의
}

 

2. 관심사의 분리

 

- 밸리데이터 로직을 별도의 클래스로 분리하여 코드의 재사용성과 유지보수성을 높인다. 밸리데이터가 스프링 빈으로 등록되면 필요한곳에서 쉽게 사용할 수 있다.

 

3. AOP와 같은 기능 사용 가능

 

- '@Component'로 등록된 빈은 AOP(Aspect Oriented Programming) 등의 스프링 기능을 사용할 수 있다. 예를 들어, 로깅이나 트랜잭션 관리 등의 부가 기능을 쉽게 추가할 수 있다.

 

4. 구성 가능성

 

- '@Component'로 등록된 빈은 스프링의 설정 파일이나 프로파일을 통해 쉽게 구성할 수 있다. 예를 들어, 특정 환경에서만 밸리데이터를 활성화하거나 설정을 변경할 수 있다.

 

예시

NoticeValidator 클래스를 @Component로 등록하면, 다른 클래스에서 @Autowired 애노테이션을 사용하여 해당 밸리데이터를 주입 받을 수 있다.

 

@Component
@RequiredArgsConstructor
public class NoticeValidator implements Validator {
    // Validator 구현
}

// 서비스나 컨트롤러 클래스에서 사용 예시
@Service
public class SomeService {

    private final NoticeValidator noticeValidator;

    @Autowired
    public SomeService(NoticeValidator noticeValidator) {
        this.noticeValidator = noticeValidator;
    }

    // 서비스 메서드에서 밸리데이터 사용
    public void someMethod(Object target, Errors errors) {
        noticeValidator.validate(target, errors);
    }
}

 

이렇게 @Component 애노테이션을 추가하면, NoticeValidator 클래스가 스프링 빈으로 등록되어 스프링의 다양한 기능과 통합하여 사용할 수 있게 된다.