단일 책임 원칙(SRP - Single Responsibility Principle)
객체는 오직 하나의 책임을 가져야 한다.
이 규칙을 지키지 않으면 어떠한 클래스가 무슨 일을 하는 클래스인지 파악하기 어려워지며 유지보수하기 까다로워진다.
ex)
블로그 글 관리 클래스에서 글 작성, 글 조회, 글 삭제 등 다양한 작업이 수행된다면, 이를 단일 책임 원칙에 따라 각 작업을 별도의 클래스로 분리
개방 폐쇄 원칙(OCP - Open/Closed Principle)
확장에는 개방적이고 수정에는 폐쇄적이여야 한다.
ex)
플러그인 시스템을 통해 새로운 기능을 추가하거나 수정하지 않고 확장
리스코프 치환 원칙(LSP - Liskov Substitution Principle)
하위 클래스는 상위 클래스와 교체 가능해야 한다.
ex)
도형(Shape) 클래스에서 넓이를 구하는 함수를 만들고, 사각형(Square) 및 원(Circle) 클래스에서 세부 구현을 수행하면서, 상속 및 다형성을 활용하여 코드를 유지보수 및 확장 가능Shape square = new Square(); Shape circle = new Circle(); square.GetArea(); circle.GetArea();
한 클래스는 자신이 사용하지 않는 메서드에 의존하도록 만들어서는 안된다.
ex)
여러 인터페이스를 하나의 클래스에서 구현할 때, 해당 클래스가 사용하지 않는 메서드를 포함하지 않도록 인터페이스를 분리
상위 수준의 모듈은 하위 수준의 모듈에 의존하지 않으며, 둘 다 추상화에 의존해야 한다.
ex)
고수준 모듈(주문 서비스)과 저수준 모듈(데이터베이스) 모두 추상화(인터페이스)에 의존