@Controller / @Service / @Repository

2023. 6. 6. 17:55기술 창고/어노테이션 창고

728x90
SMALL

@Controller / @Service / @Repository

Spring Bean 객체를 만들 때 @Component 어노테이션으로 지정하여 해당 객체를 Bean 객체로 등록하고 생성해주었습니다.

하지만 더 나아가서 명확한 역할에 따른 스테레오 타입의 어노테이션들이 있습니다.

대표적인 어노테이션으로는 Controller, Service, Repository 가 있습니다.

 

- @Controller : 클라이언트의 요청을 받아 비즈니스 로직을 수행하는 단계의 서비스로 매핑을 시켜주거나, 모델에서 데이터를 가져오기 위해 연결시켜주는 Bean 객체를 지정하는 어노테이션.

- @Service : 비즈니스 로직을 본격적으로 수행하는 Bean 객체 지정 어노테이션.

- @Repository : 모델에 데이터를 넣거나 호출, 관리하거나 하는 데이터와 연관된 작업을 수행하는 Bean 객체를 지정하는 어노테이션.

 

 

<Controller>

@Controller
public class BusinessController{
    
    private BusinessCalcultaionService service;
    
    public BusinessController(BusinessCalcultaionService service){
        this.service = service;
    }
    
    public int findMaxNum(){
        return service.findMax();
    }

}

 

 

<Service>

//@Component
@Service // 비즈니스 로직이 있는 경우에  Component 대신 Service로 표현할 수 있다.
public class BusinessCalcultaionService {

    private DataService db;

    public BusinessCalcultaionService(DataService db){
        this.db = db;
    }

    public int findMax(){
        return Arrays.stream(db.retrieveData()).max().orElse(0);
    }
}

 

 

<Repository>

//@Component
@Repository // 데이터를 import 하거나 불러오거나 관리하기 위한 목적의 클래스는 Repository 어노테이션으로 대체할 수 있다.
@Primary
public class MongoDbDataService implements DataService{
    @Override
    public int[] retrieveData() {
        return new int[] {11, 22, 33, 44, 55};
    }
}

 

Component 를 사용해서 Bean 객체를 지정하고 관리해주는 것보다 스테레오 타입의 어노테이션을 사용하는 이유는 보다 개발자가 어떤 객체가 어떤 역할을 담당하고 있는지 명확하게 파악하고 이해하기 위함입니다.

728x90
반응형
LIST

'기술 창고 > 어노테이션 창고' 카테고리의 다른 글

@Named / @Inject (ft. CDI)  (0) 2023.05.31
@PostConstruct / @PreDestroy  (0) 2023.05.30
@Scope  (0) 2023.05.30
@Lazy  (0) 2023.05.30
@Primary  (0) 2023.05.30