📢 김영한님이 지음,
[스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술] 강의를 정리한 글입니다.
📌 IOC(Inversion of Control)?
📌 스프링 빈이란?
💻 회원 컨트롤러에 의존관계 추가
우선 /hello.hellospring/controller 하위에 MemberController 를 생성합니다.
MemberController
는 MemberService
를 의존을 하고 있기 때문에 의존관계를 추가해줍니다.
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
}
@Controller
어노테이션은 적용이 된 클래스가 컨트롤러임을 나타내는 빈으로 등록이 되게 됩니다. @Autowired
는 스프링 IoC 컨테이너가 의존 객체에 해당하는 빈을 찾아서 의존성을 주입해주는 어노테이션입니다. 👀 의존성 주입이란?
- 객체가 의존하는 또 다른 객체를 외부에서 선언하고 이를 주입받아 사용하는 것이다.
- 의존성을 주입하는 방법으로는 객체를 생성할 때 생성자를 통해 전달하는 방식과 Setter() 메소드를 통해 전달하는 방식이 있습니다.
- 의존성 주입을 이용하면 주입받는 대상이 변하더라도 기존 구현자체를 수정할 일이 없어 재사용성이 높아집니다.
💻 회원 서비스 빈 등록
MemberController
가 의존하고 있는 MemberService
를 찾아서 주입을 해주기 위해서는
MemberService
에 @Service
어노테이션을 추가해 빈으로 등록을 해줘야 합니다.
@Service
public class MemberService {
private final MemberRepository memberRepository;
@Autowired
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
}
💻 회원 리포지토리 빈 등록
MemberService
도 MemoryMemberRepository
을 의존을 하고 있기 때문에 MemoryMemberRepository
에도 @Repository
어노테이션을 이용해 빈으로 등록해줍니다.
@Repository
public class MemoryMemberRepository implements MemberRepository {}
📌 컨포넌트 스캔
@Componet
어노테이션을 가진 모든 대상을 가져와서 빈을 등록하기 위해 찾는 과정을 뜻합니다.@Controller
, @Service
, @Repository
, @Configuration
모두 코드 내부에 @Component
이 들어가 있으므로 컴포넌트 스캔 대상에 포함됩니다. 위와 같은 방식말고도 직접 설정을 통해 스프링 빈으로 등록할 수 있는 방법이 있다.
위에서 작성한 @Service
,@Repository
, @Autowired
어노테이션을 제거하고 /hello.hellospring/SpringConfig.java
파일을 생성해 다음과 같이 작성해줍니다.
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
@Bean
어노테이션을 통해 MemberRepository
를 스프링 빈으로 등록을 하고 MemberService
에 주입을 해줍니다.