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
반응형
'Spring > spring 기초 스터디' 카테고리의 다른 글
[Spring] AppConfig에 Spring 적용해보기 (0) | 2021.04.24 |
---|---|
[Spring] AppConfig (0) | 2021.04.20 |
[Spring] 스프링 프로젝트 시작하기 (0) | 2021.04.14 |
[Spring] 객체지향 설계의 5가지 원칙(SOLID) (0) | 2021.04.14 |
[Spring] 스프링 공부 본격적으로 시작 (0) | 2021.04.12 |
댓글