본문 바로가기

SpringBoot

10월 6일 Spring Boot DIP와 생성자 주입

이전까지 역활과 구현을 사용해서 객체를 사용하는 경우 

MemberService memverService = new MemberServiceImpl();

위와 같이 직접 값을 정해주는 방식으로 사용하였는데

 

이 부분을 해소해기 위해 DIP를 사용한다.

DIP란 의존성 역전의 원칙으로서

간단하게 말해 

위와 같이 구현하고자 하는 객체가 있다면 

MemberService memverService = new MemberServiceImpl();

그 객체에 대해 값을 넣어주는 것은 개발자가 아닌 Spring이 된다.

코드가 개발자를 의존하지 않고 Spring을 의존하는것을 DIP 라고 한다.

 

예를들어

MemberServiceImpl 에서

Private final MemberRepository = new MemoryMemberRepository();위와 같이 구현했던 코드가 있다면이 경우 "구현"에 해당하는 "new MemoryMemberRepository();" 의 객체를 변경시 인터페이스자체를 변경해야하는 문제가 발생한다. 이래서 이부분을 Private final MemberRepository memberRepository;일단 객체를 받을 수 있게 필드로 공간만 마련해두고 나머지는 추상화에 의존합니다.

 

@AutoWiredpublic MemberServiceImpl(memberRepository , memberRepository){ this.memberRepository = memberRepository}

MemberServiceImpl의 생성자를 만들때 매개변수로 MemberRepository를 상속받아 만들어진 자식을 받아

this.memberRepository에 넣어주는 방식입니다.

여기서 알고가야 할점은 매개변수의 형태를 "인터페이스" 설정한것입니다.

 

위와 같이 생성자를 통해 객체를 생성하는 시점에 필드값을 주입해주는것을 "생성자 주입"이라고 합니다,

또한

인터페이스속에서도 인터페이스를 상속받은 구현체를 필요로 할 경우에도 "생성자 주입"을 사용한다.