본문 바로가기

백엔드 개발/SpringMVC

컴포넌트 스캔과 의존관계 설정

1. Class 간의 의존관계 설정

// 컨트롤러 Class 안에 필드값으로 멤버 서비스의 객체를 가짐
@Controller // 스프링 컨테이너에 등록
public class MemberController {

    private final MemberService memberService; // 멤버 서비스 객체 선언

    @Autowired // 밑의 클래스를 의존하도록 주입
    public MemberController(MemberService memberService)
    {
        this.memberService = memberService; //멤버 서비스 객체에 대한 초기화
    }
}
//MemberService Class 가 저장소 Class를 자신의 Field 값으로 가지도록 설정 = 클래스 간의 의존관계 
public class MemberService
{
    private final MemberRepository memberRepository; // 필드값으로 다른 클래스의 객체 선언
    @Autowired
    public MemberService(MemberRepository memberRepository)
    {
        this.memberRepository =memberRepository; // 해당 객체 초기화
    }

Class간의 의존관계

MemberController는 MemberService의 객체를 필드 값으로 가지므로 MemberService 객체에 의존한다고 볼 수 있다. 서비스와 저장소 관계에서도 마찬가지이다. 한 클래스가 다른 클래스의 객체를 필드값으로 가지게 하는 것을 의존성 주입이라고 한다. 이들은 모두 생성자를 통하여 의존성을 주입했다.

 

하지만 이렇게 의존관계를 설정하기만 해서는 해당 클래스들이 스프링부트와 연관이 되지 않는다.

스프링부트가 톰캣으로부터 요청을 받으면 자신이 만들어놓은 컨테이너에 해당 요청을 다를 수 있는 컨트롤러가 있는지 확인하게 되는데, 이런 절차를 가능하게 하려면 사전에 컨트롤러와 여러 Class를 스프링부트 컨테이너에 등록 해야한다.

그러면 스프링부트는 등록된 클래스들의 객체들을 각각 딱 하나만 만들고, 모든 요청이 그 안에서 이뤄질 수 있도록 관리한다.

2. 컴포넌트란?

하나의 독립된 모듈을 뜻한다.

클래스 위에 @Component 애노테이션이 적혀 있으면 해당 클래스는 스프링 빈에 자동 등록된다.

@Controller, @Service, @Repository 모두 @Component의 일부이다.

 

@autowired는 스프링 컨테이너 속에 객체가 생성되는 시점에 발동하며, 해당 클래스가 필요로 하는 의존성을 주입 시킨다.

@component를 통해 각 Class가 등록됨. 화살표(의존성)는 @autowired에 의해 서로 연결됨.

'백엔드 개발 > SpringMVC' 카테고리의 다른 글

회원 웹 기능 등록  (0) 2022.12.01
회원 웹 기능 홈 화면 추가  (0) 2022.12.01
회원 서비스 테스트  (0) 2022.12.01
회원서비스(비즈니스 로직) 만들기  (0) 2022.11.30
Api Test build 코드 분석  (0) 2022.11.30