1. 단일 책임 원칙 (Single Responsibility Principle, SRP): 이 원칙은 클래스나 모듈이 하나의 책임(역할)만을 가져야 한다는 것을 강조합니다. 클래스나 모듈이 여러 가지 역할을 가지면 코드를 이해하고 유지 관리하기 어려워집니다.
- 클래스나 모듈은 하나의 역할(기능)만 가지도록!
2. 개방/폐쇄 원칙 (Open/Closed Principle, OCP): 이 원칙은 코드를 확장 가능하게 하면서도 수정에 대해서는 폐쇄적이어야 한다는 것을 강조합니다. 즉, 새로운 기능을 추가할 때 기존 코드를 수정하지 말아야 합니다. 대신, 새로운 코드를 추가하거나 확장 포인트를 활용해야 합니다.
- 기존 코드는 수정하지 않도록!
3. 리스코프 치환 원칙 (Liskov Substitution Principle, LSP): 이 원칙은 파생 클래스(서브 클래스)는 기본 클래스(슈퍼 클래스)를 대체할 수 있어야 한다는 것을 강조합니다. 이것은 상속 관계에서 파생 클래스가 기본 클래스의 모든 속성과 동작을 보장해야 함을 의미합니다.
- 상속받은 자식 클래스는 부모클래스의 모든 속성과 동작을 할 수 있어야함!
4. 인터페이스 분리 원칙 (Interface Segregation Principle, ISP): 이 원칙은 클라이언트가 사용하지 않는 인터페이스 메서드에 의존하지 않아야 한다는 것을 강조합니다. 즉, 클라이언트는 자신이 필요로 하는 메서드만 사용해야 합니다.
- 큰 덩어리의 기능들을 다 작은 기능들로 분할 하여야한다.
5. 의존 역전 원칙 (Dependency Inversion Principle, DIP): 이 원칙은 고수준 모듈은 저수준 모듈에 의존해서는 안되며, 양쪽 모두 추상화에 의존해야 한다는 것을 강조합니다. 즉, 코드는 추상화에 의존해야 하며, 구체적인 구현에는 의존해서는 안 됩니다.
- 고수준모듈 : 우리가 기능들을 나열하는 최상단 스크립트같은 것
- 저수준모듈 : 하위 기능의 실제 구현(객체, 메인 클래스)
구체적인 객체가 아닌 추상화에 의존해야하는 법칙
ex) 전략패턴