OOP 5원칙
1 SRP 단일 책임 원칙
- 하나의 클래스는 하나의 목적만을 가지고 설계해야 한다.
2 OCP 개방 폐쇄 원칙
- 확장에는 열려있고 변경에는 닫혀있어야 한다.
3 LSP 리스코프 치환 원칙
- 상위 타입 객체를 하위 타입 객체로 치환해도 상위타입을 사용하는 프로그램은 정상동작 해야한다.
4 ISP 인터페이스 분리 원칙
- 인터페이스는 그 인터페이스를 사용하는 클라이언트 기준으로 분류해야한다. 이 말은 클라이언트가 사용하지 않는 인터페이스의 변경이 클라이언트에 영향을 미쳐서는 안된다는 말이다. 즉, 자신에게 필요하지 않은 인터페이스는 구현하지 않는다.
5 DIP 의존관계 역전 원칙
- 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안된다. 저수준 모듈이 고수준 모듈에서 정의한 추상 타입에 의존해야 한다. 가령 예를 들어 고수준 모듈에서 저수준 모듈인 Set을 사용한다 하자. OCP와 LSP에 의거해 공통 인터페이스인 Set을 사용하게 될 것이고 하위 모듈인 Set구현체의 데이터를 순회해야 한다고 가정하자. TreeSet과 HashSet은 순회 순서가 다를 수 있기 때문에 특정 구현체의 순회 방법에 의존하는 코드를 작성해서는 안된다.