SRP
: 단일 책임 원칙(single responsibility principle)OCP
: 개방-폐쇄 원칙 (Open/closed principle)LSP
: 리스코프 치환 원칙 (Liskov substitution principle)ISP
: 인터페이스 분리 원칙 (Interface segregation principle)DIP
: 의존관계 역전 원칙 (Dependency inversion principle)Single Responsibility Principle
중요한 기준은 변경
Open/Closed Principle
확장에는 열려
있으나 변경에는 닫혀
있어야 한다.코드를 변경하지 않으면서 확장을 어떻게 해야 하는가? 정답은 다형성
이다.
다형성
을 활용해 코드를 작성해 보면 아래와 같다.
public class MemberService {
// private MemberRepository memberRepository = new MemoryMemberRepository();
private MemberRepository memberRepository = new JdbcMemberRepository();
}
✅ 이를 해결하기 위해 객체 생성, 관계 수립을 해주는 설정자가 필요하다.
Liskov substitution principle
프로그램의 객체는 프로그램의 정확성을 깨트리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
Interface segregation principle
범용 인터페이스 하나보다는 특정 목적을 위한 인터페이스 여러 개가 있는 것이 좋다.
인터페이스가 명확해지고, 대체 가능성이 높아진다.
public interface Car {
void driving(DirectionType direction);
void fix(FixType type);
}
public interface Car {
void go();
void left();
void stop();
void right();
void fixHandle();
void fixEngine();
}
Dependency inversion principle
✅ 프로그래머는 추상화에 의존해야지, 구체화에 의존하면 안 된다.
즉, 구현 클래스가 아닌 인터페이스에 의존하라는 의미이다.