SRP (Single Responsibility Principle)
한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것이 모호한데, 중요한 기준은 변경. 변경이 적을 수록 책임 원칙을 잘 따른 것이다.
OCP(Open/Closed Principle) 개방-폐쇄 원칙
확장에는 열려 있으나 변경에는 닫혀 있어야 한다.
→ 다형성을 활용하면 이것이 가능함.
다형성만 이용하면 구현 객체를 변경하려면 클라이언트 코드를 변경해야 함.
→ 객체를 생성하고, 연관관계를 맺어주는 별도의 조립, 설정자가 필요함.
LSP(Liskov Substitution Principle) 리스코프 치환 원칙
프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 함.
→ 하위 클래스는 인터페이스 규약을 다 지켜야 한다. 엑셀을 밟을 때 뒤로 가게도 만들 수 있지만 무조건 앞으로 가게 만들어야 한다.
ISP(Interface Segregation Principle) 인터페이스 분리 원칙
특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
자동차라는 인터페이스가 있고 운전, 정비와 관련된 인터페이스가 있을 때 이를 두 개로 분리
→ 사용자 클라이언트를 운전자 클라이언트랑, 정비 클라이언트로 구분할 수 있음.
DIP(Dependency Inversion Principle) 의존관계 역전 원칙
프로그래머는 추상화에 의존하고, 구체화에는 의존하면 안된다.
MemberRepository m = new MemoryMemberRepository();
MemberService는 MemoryMemberRepository라는 구현체에도 의존하고 있음 (dip 위반)