본문 바로가기
코딩 공부/web & Java

[Spring] 스테레오 타입 어노테이션

by 현장 2023. 10. 9.

Spring 프레임워크 스테레오 타입 어노테이션

 

@Component

제네릭 어노테이션이며 모든 클래스에 적용이 가능합니다. 예를 들면 특정 클래스에 Spring Bean을 생성하려는 경우 사용합니다. 모든 스테레오 타입 어노테이션의 기초며 다양하게 나누어져 있습니다.

 

1. @Service

@Service
public class BussinessCalculationService {
    private DataService dataService;

    public BussinessCalculationService(DataService dataService) {
        super();
        this.dataService = dataService;
    }

    public int finMax() {
        return Arrays.stream(dataService.retrieveData())
                .max().orElse(0);
    }

}

@Service는 보통 어노테이션한 클래스에서 비즈니스 로직이 있다는 것을 나타냅니다. 즉, 클래스에 비즈니스 로직이 있으 @Component를 대신하여 사용할 수 있습니다.

 

2. @Controller

@Controller는 웹 컨트롤러와 같이 컨트롤러 클래스 인경우 자주 사용되는 어노테이션입니다. 웹 어플리케이션과 REST API에서 컨트롤러를 정의하는 데 사용됩니다.

 

3. @Repository

@Repository
@Primary
public class MongoDbDataService implements DataService {
    @Override
    public int[] retrieveData() {
        return new int[] {11, 22, 33, 44, 55};
    }
}

@Repository는 Bean이 DB와 통신하는 경우, 데이터를 저장하거나 검색하여 조작하는 경우 @Component를 대신하여 사용됩니다.


이와 같이 @Component 이외에도 @Component를 특하한 것이 많습니다. 또한 위에서 서술한 @Component, @Service, @Controller, @Repository 모두 스테레오 타입 어노테이션이라고 합니다.

 

스테레오 어노테이션 중 무엇을 선택해 사용하나요?

각자의 설명에 맞는 구체적인 어노테이션을 사용하고 @Service, @Controller, @Repository에 포함되지 않는 경우 @Component를 사용해야합니다. 그 이유는 

 

  • 구체적 어노테이션을 사용하면 자신의 의도한 바를 확실히 나타낼 수 있습니다.
  •  AOP(관점 지향 프로그래밍)를 사용하여 어노테이션을 감지하고 그 위에 부가적인 동작을 추가할 수 있습니다. 예를 들어 @Repository 어노테이션이 있다면 Spring 프레임워크에서 자동으로 JDBC 예외 변환 기능에 연결합니다.