Free Lines Arrow
본문 바로가기
Spring/spring 기초 스터디

[Spring] DI 란?

by skahn1215 2021. 4. 17.
728x90
반응형

예제로 보는 DI

DI란?

DI, Dependency Injection 의존성 주입이라고 한다.

 

 

 

 

의존성 주입이라는 것은 왜 생겼을까?

프로그래밍에서 의존성이 강해지면 변경이 어렵다. 
라고 다들 배웠을 것이다.

의존성이란 무엇일까?

멤버서비스가 있다고 생각해보자.

1. MemberService: 서비스 로직 연산과 객체를 저장하는 기능을 담당.

2. MemberRepository: 실제 객체의 데이터를 저장하는 역할.

3. 여기서 중요한건 MemberRepository 가 인터페이스 라는 점이다.


4. MemberRepository를 상속 받아 MemberMemoryRepository 를 만들었다.

5. 멤버서비스 안에서 직접 MemberMemoryRepository 생성자 만들었다.
그렇다면 나중에 다른 DB로 바꾸고 싶다면 저 부분을 다 바꿔줘야 한다.

 

public class MemberService {

    //DI 위반. 
    private final MemberRepository memberRepository = new MemberMemoryRepository();

    public void join(Member member) {
        memberRepository.save(member);
    }

    public Member findMember(Long memberId) {
        return memberRepository.findById(memberId);
    }
}

 

 

 

 

해결법 DI

아래처렁 생성자를 이용 하여 외부에서 memberRepository 를 넣어 주는것이다.
이것이 DI 이다. 
만일 DB가 변경되어도 멤버서비스 안에서 변경되어야 될 코드는 하나도 없다.

 

package hello.core.member;

public class MemberService {

    private final MemberRepository memberRepository;

 	// 생성자로 부터 객체를 받음
    public MemberServiceImpl(MemberRepository memberRepository){
        this.memberRepository = memberRepository;
    }
    
    @Override
    public void join(Member member) {
        memberRepository.save(member);
    }

    @Override
    public Member findMember(Long memberId) {
        return memberRepository.findById(memberId);
    }

}
728x90
반응형

댓글