필수
선택
위 그림에서 자동차 역할(인터페이스)이 다양한 형태(구현체)를 가질 수 있는 것.
운전자는 K3, 아반떼, 테슬라 모델3 등 자동차 모델
에 상관 없이 자동차
를 운전할 수 있음 -> 변경이 편리!
좋은 객체 지향의 5가지 원칙은 SRP, OCP, LSP, ISP, DIP이고 각 원칙의 앞글자를 따서 SOLID라고 부른다..
public class MemberServiceImpl implements MemberService{
private final MemberRepository memberRepository = new MemoryMemberRepository(); //구현체가 1.MemberService역할 2.MemberRepository 구현체 선택 두가지 역할을 하고 있음
@Override
public void join(Member member) {
memberRepository.save(member);
}
@Override
public Member findMember(Long memberId) {
return memberRepository.findById(memberId);
}
}
public class MemberServiceImpl implements MemberService{
private final MemberRepository memberRepository;
public MemberServiceImpl(MemberRepository memberRepository) {
this.memberRepository = memberRepository;//다른 객체가 memberRepository 구현체를 선택해줌.
}
@Override
public void join(Member member) {
memberRepository.save(member);
}
@Override
public Member findMember(Long memberId) {
return memberRepository.findById(memberId);
}
}
public class MemberServiceImpl implements MemberService{
private final MemberRepository memberRepository = new MemoryMemberRepository(); //MemberRepository 구현체를 변경하려면 MemberService의 코드도 변경됨
@Override
public void join(Member member) {
memberRepository.save(member);
}
@Override
public Member findMember(Long memberId) {
return memberRepository.findById(memberId);
}
}
public class MemberServiceImpl implements MemberService{
private final MemberRepository memberRepository;
public MemberServiceImpl(MemberRepository memberRepository) {
this.memberRepository = memberRepository;//MemberService의 코드를 변경하지 않고 MemberRepository 구현체를 변경할 수 있음
}
@Override
public void join(Member member) {
memberRepository.save(member);
}
@Override
public Member findMember(Long memberId) {
return memberRepository.findById(memberId);
}
}
private final MemberRepository memberRepository = new MemoryMemberRepository();