확장에는 열려있으나 변경에는 닫혀 있어야 한다.
다형성 활용
문제점
// 기존
MemberRepository m = new MemoryMemberRepository();
// 변경
MemberRepository m = new JdbcMemberRepository();
추상화에 의존해야지, 구체화에 의존하면 안된다.
구현 클래스와 구현체에 의존하지 말고, 인터페이스에 의존해야 한다.
클라이언트가 인터페이스에 의존해야 유연하게 구현체를 변경할 수 있다.
문제점
// 기존
MemberRepository m = new MemoryMemberRepository();
// 변경
MemberRepository m = new JdbcMemberRepository();