본문 바로가기

프로젝트/KimsBoard

기능(Service)를 구현한다는 것의 의미와 Spring 의존성 주입 복습


SignUP기능을 구현한다는 것은 User테이블에 데이터를 넣는 작업을 가능하도록 한다는 것. 이것이 가능하기 위해서는 repository폴더에 있는 UserRepository클래스와 연관시켜 작업을 해주어야 함

 

=============================================================================

복습. Spring의 의존성 주입에는 3가지 방법이 있고 각 방법에 @Autowired를 붙여준다(생성자에 @Autowired가 있으면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어준다. 이렇게 객체 의존관계를 외부에서 넣어주는 것을 DI (Dependency Injection), 의존성 주입이라 한다.).
1. 생성자를 통한 의존성주입

2. 멤버변수(필드)를 통한 의존성 주입

3. setter를 통한 의존성 주입

보통은 생성자를 통한 의존성 주입이 권장되고 많이 사용됨. 또한 Bean 컨테이너에 등록하게 하게끔 하는 @Controller, @Service, @Repository, @Component어노테이션을 클래스에 붙이고 위와 같이 생성자 혹은 멤버변수 혹은 setter에 @Autowired를 붙이면 의존성이 주입됨(@Component, @Controller, @Repository, @Service 가 붙은 클래스는 모두 스프링 컨테이너에서 객체를 생성(new)하여 컨테이너에 등록을 합니다)

생성자에 @Autowired 가 있으면 스프링이 연관된 객체를 스프링 컨테이너에서 찾아서 넣어준다. 이렇게
객체 의존관계를 외부에서 넣어주는 것을 DI (Dependency Injection), 의존성 주입이라 한다. 
개발자가 직접 의존성을 주입하는 것은(memberRepository = new MemoryMemberRepository();, memberService = new MemberServiceD(memberRepository); 과같이 new키워드를 통해 개발자가 직접 의존성을 주입한다는 것이고 스프링에 의한DI는 new키워드를 사용하지 않아도 스프링이 Bean 컨테이너에 등록된 객체를 주입해 준다는 의미임)

스프링 빈(Bean)이란 객체다. 스프링에 의해 생성되고 관리되는 자바 객체이다. 제어역전의 대상이 되는 객체이다.

생성자가 1개만 있으면 @Autowired를 생략할 수 있다

 

여기서 더 간편함을 추구하여 lombok의 @RequiredArgsConstructor을 사용하면 생성자를 따로 정의해 주지 않아도 된다.  단 변수를 반드시 final로 지정해야함. 즉 아래와 같은 코드로 userRepository는 의존성을 저절로 주입받게 되는 것이다.

userRepository는 의존성을 주입받았음