해당 글은 DEPth IT 연합 프로젝트 동아리 활동의 일환인 서버 스터디에 관련되어 있습니다.🐧
컴포넌트 스캔
https://wnehgus101.tistory.com/entry/Study-Plus-2-Week1-2-심화-지식-의존성-주입-Http-상태코드-Getter-and-Setter
<Study Plus - 2> Week1, 2 심화 지식 (의존성 주입, Http 상태코드, Getter and Setter)
Study Plus는 스터디를 진행 한 후에 스스로 부족하다고 느낀 부분과 더 공부가 필요한 부분, 스스로가 생각하지 못한 부분에 대해서 추가적인 공부를 진행한 것입니다. 개인적으로 추가하는 Study
wnehgus101.tistory.com
컴포넌트 스캔에 관한 설명 글입니다.
추가적으로 강의를 듣으면서 굳이 어노테이션을 컴포넌트를 쓰지 않고 웹 어플리케이션 계층 구조인 레포지토리, 서비스 등의 어노테이션 또한 가능하다는 것을 알게되었습니다. 각각의 해당 어노테이션 문서를 살펴보면 거기에 다시 컴포넌트 어노테이션이 존재했습니다.
또한 스프링이 빈으로 등록하기 위해서는 SpringApplication 하위에 있는 것들만 자동으로 등록 된다는 사실이었습니다.
new를 통해서 객체를 만들게 된다면 해당 객체를 사용하는 다른 컨트롤들이 사용할 때마다 인스턴스가 생성되게 되므로 의존성 주입을 통해서 하나의 객체를 사용하는 것이 효율적입니다.
자바 코드로 직접 의존성 추가
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import hello.hellospring.service.MemberService;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService(){
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository(){
return new MemoryMemberRepository();
}
}
상위 단계의 패키지 파일에 위와 같은 설정 클래스 파일을 만듭니다. 이때 설정 파일이라는 것을 알려주기 위한 @Configuration 어노테이션을 사용합니다. 해당 어노테이션을 사용하면 설정 파일임을 알 수 있습니다. 해당 클래스에서 @Bean 어노테이션을 사용해서 스프링 컨테이너에 등록할 빈을 정의합니다. 따라서 위에서는 MemberService, MemoryMemberRepository를 스프링 컨테이너에 등록하고 빈으로써 관리되게 됩니다.
해당 설정 파일과 같이 직접적으로 의존성을 주입하는 경우는 불가피하게 구현 클래스를 변경해야 하는입니다. 예를 들어서 지금은 memory에 직접 데이터를 저장하는 형식이지만 만약 DB를 이용하게 된다면 DB를 이용하는 클래스를 생성한 후 설정 파일에서 의존성을 Memory에서 DB로 바꾸어주면 될것입니다. 또한 웹 어플리케이션 계층 구조를 이루는 형식이 아닌 다른 정형화 되지 않은 형식이라면 직접 의존성을 추가할 수도 있습니다.
따라서 직접 의존성을 추가하는 방법과 어노테이션을 이용해서 자동으로 추가하는 방법을 적절하게 사용하는 것이 적절해 보입니다.