장점
DB가 선정되지 않은 가정에서 MemberRepository를 인터페이스로 생성하고, MemeoryMemberRepository로 구현체를 생성하였는데 나중에 위의 설정 파일에서 아래처럼 DbMemoryRepository()하나만 변경해주면 DB 연결 손쉽게 가능하다!
2. Setter 주입
단점 : setMemberService가 public으로 열려있기 때문에 어느 개발자든 누구나 이것을 호출할 수 있게 된다.
어플리케이션이 조립될 때 딱 한번 주입되고 끝나야하는데 public의 Setter로 주입하게 되면 public의 특징으로 문제가 생길 수도 있다.
packagehello.hellospring.service;importhello.hellospring.domain.Member;importhello.hellospring.repository.MemberRepository;importhello.hellospring.repository.MemoryMemberRepository;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;importjava.util.List;importjava.util.Optional;publicclassMemberService {//private final MemberRepository memberRepository = new MemoryMemberRepository();privatefinalMemberRepository memberRepository;//constructor를 이용해서 외부에서 넣어줄 수 있도록 바꾼다.publicMemberService(MemberRepository memberRepository) {//아래처럼 외부에서 객체를 넣어주는 것을 DI(Dependency Injection)이라고 한다.this.memberRepository= memberRepository; }