✏️ SOLID 원칙
SOLID 원칙이란 객체지향 설계에서 지켜줘야 할 5개의 소프트웨어 개발 원칙( SRP, OCP, LSP, ISP, DIP )을 말한다.
1) SRP(Single Responsibility Principle): 단일 책임 원칙
2) OCP(Open Closed Priciple): 개방 폐쇄 원칙
3) LSP(Listov Substitution Priciple): 리스코프 치환 원칙
4) ISP(Interface Segregation Principle): 인터페이스 분리 원칙
5) DIP(Dependency Inversion Principle): 의존 역전 원칙
SOLID 객체 지향 원칙을 적용하면 객체지향 소프트웨어 개발에서 유지보수성, 재사용성, 확장성 등을 강화하여 더 품질 높은 코드를 작성하는 데 도움을 준다.
[S] 단일 책임 원칙 (Single Responsibility Principle - SRP)
- 클래스는 하나의 책임만 가져야 한다.
- 클래스가 변경되어야 하는 이유는 오직 하나뿐이어야 한다.
- 하나의 클래스는 하나의 기능 담당하여 하나의 책임을 수행하는데 집중되도록 클래스를 나눠서 여러 개 설계하라는 원칙이다.
- 프로그램의 유지보수성을 높이기 위한 원칙이다.
[O] 개방-폐쇄 원칙 (Open/Closed Principle - OCP)
- 소프트웨어의 엔티티(클래스, 모듈, 함수 등)는 확장에는 열려 있어야 하고, 변경에는 닫혀 있어야 한다.
- 새로운 기능을 추가할 때는 기존의 코드를 변경하지 않고 확장할 수 있어야 한다.
- 인터페이스나 추상 클래스를 통해 이 원칙을 구현할 수 있다.
[L] 리스코프 치환 원칙 (Liskov Substitution Principle - LSP)
- 하위 클래스는 상위 클래스를 대체할 수 있어야 한다.
- 상위 클래스의 인스턴스를 하위 클래스의 인스턴스로 대체해도 프로그램의 의미는 변하지 않아야 한다.
- 상속 관계에서의 일관성을 보장한다.
[I] 인터페이스 분리 원칙 (Interface Segregation Principle - ISP)
- 클라이언트는 자신이 사용하지 않는 인터페이스에 의존 관계를 맺으면 안 된다.
- 하나의 큰 인터페이스보다는 여러 개의 작은 인터페이스가 낫다.
- 클래스가 자신에게 필요하지 않은 메서드에 의존하지 않도록 하고, 결합도를 낮춘다.
- 분리된 인터페이스를 수정사항이 생겨서 또 인터페이스들을 분리하면 안 된다.
[D] 의존 역전 원칙 (Dependency Inversion Principle - DIP)
- 고수준 모듈은 저수준 모듈에 의존해서는 안 된다. 둘 다 추상화에 의존해야 한다.
- 참조해야 할 상황에는 하위 클래스가 아닌 상위 추상 클래스를 참조해야 한다.
- 추상화된 인터페이스나 추상 클래스를 통해 의존성을 주입받도록 설계해야 한다.
- 모듈 간의 결합도를 낮추고, 유연한 코드를 유지할 수 있게 한다.