Open-Closed Principle
소프트웨어 개체(클래스, 모듈, 함수 등등)는 확장에 대해 열려 있어야 하고, 수정에 대해서는 닫혀 있어야 한다.
구현 객체를 변경 할 때 클라이언트 코드(interface부)를 변경해야하면 안된다.
Dependency Inversion Principle
추상화에 의존해야지, 구체화에 의존하면 안된다.
클라이언트가 구현 클래스에 의존하지 말고, 인터페이스에 의존하도록 설계해야 한다.
private final MemberRepository memberRepository = new MemoryMemberRepository();
MemoryMemberRepository()라는 구현체에 의존한다.(DIP 위배)
따라서, 이 구현체를 다른 구현체로 바꿀 때 클라이언트 쪽 파일인 'MemberServiceImpl 파일'을 수정해야 한다.(OCP 위배)
추후 추가