관심사의 분리
모든 내용은 김영한님의 강의를 보고 정리한 내용입니다.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8
구현체를 선택하는 방법
- 구현체는 자신의 역할(인터페이스)를 수행하는 것에만 집중해야 한다.
- 인터페이스의 구현체를 선택하는 책임을 담당하는 별도의 설정 객체가 필요하다.
- 생성자 주입을 사용하자
- 애플리케이션의 실제 동작에 필요한 구현객체 생성을 한다.
- 생성한 객체 인스턴스의 레퍼런스를 생성자를 통해 주입한다.
- 결국 구현된 클래스는 인터페이스에만 의존한다
- 구현된 클래스는 인터페이스에 어떤 구현객체가 올지 모른다.
- 의존관계에 대한 고민을 하지 않고 자기의 역할만 집중한다.
MemberService / MemberServiceImpl / MemberRepository / JdbcMemberRepository
public interface MemberService {
void save(Member member);
}
public class MemberServiceImpl implements MemberService {
private final MemberRepository memberRepository;
public MemberServiceImpl(MemeberRepository memberRepository) {
this.memberRepository = memberRepository;
}
@Override
public void save(Member member) {
memberRepository.save(member);
}
}
- 구현체인 MemberServiceImpl에서 MemberRepository의 구현 객체를 직접 설정하지 않는다.
- MemberRepository에 들어올 객체는 오직 외부(AppConfig)에서만 생성자를 통해 주입한다.
'Spring' 카테고리의 다른 글
Spring Collection @Valid (0) | 2021.06.22 |
---|---|
Spring Bean 생명주기 (0) | 2021.06.22 |
Spring 이란 (1) | 2021.06.22 |
Library VS Framework (0) | 2021.06.22 |
Spring DTO의 생성 및 레이어 이동 (0) | 2021.05.04 |
최근댓글