SOLID Principle 이란?
SOLID Principle은 RC Martin이 만든 Software Design Principles입니다.
아래와 같은 5가지 원칙의 첫 글자를 따서 만들었습니다.
The Single Responsibilities Principle (SRP)
The Open-Closed Principle (OCP)
The Liskov Substitution Principle (LSP)
The Interface Segregation Principle (ISP)
The Dependency Inversion Principle (DIP)
이 원칙들은 결국
자주 변하는 것과 변하지 않는 것을 분리하여
자주 변하는 것이 변하는 것을 의존하고
변하는 것이 자주 변하는 것에 의존하지 않는 것에 기초하여 만들어진 원칙들입니다.
왜냐하면 변경되지 않는 것이 자주 변경되는 것을 참조한다면 자주 변경되는 것이 변경됨에 따라 변경돼야하는 것이 존재하기 때문입니다.
자주 변경되는 모듈을 바꾸었을 때, 그 모듈만 바뀌고 다른 모듈에 영향을 주지 않는 것이 좋은 디자인 입니다. 이에 따라 나온 원칙이 바로 위의 SOLID 원칙 입니다.
SRP
- A class should have one, and only one, reason to change
- 책임(Responsibility)란 Class의 의무
- 많은 Responsibility가 있다면 그 Class는 변경될 가능성이 높아집니다.
- Class의 변경이 잦을 수록 버그의 가능성이 높아집니다.
- 따라서 각각의 책임을 개별 클래스에 주어 구분하는 것이 SRP 입니다.
OCP
- Software entities(Class, Modules, Function 등)을 확장에 열려있지만 수정에 닫혀있도록 만들어라.
- 즉 기존 코드의 변화없이 Class에 새로운 행동을 추가할 수 있게 하는 것입니다.
LSP
- Sub Type은 그것의 Base Type을 대체할 수 있는 것이어야 한다.
- 예를 들면 Queue는 List를 상속하고, List에서 사용할 수 있는 모든 행동은 Queue에서 사용 가능해야 합니다.
ISP
- Cohesion을 높이기 위해 Interface를 분리하는 것입니다.
DIP
- High-level Module은 Low-level Module에 의존해서는 안된다.
- 상위 계층(정책 결정)이 하위 계층(세부 사항)에 의존하는 전통적인 의존관계를 역전시킴으로써 상위 계층이 하위 계층의 구현으로부터 독립되게 하는 것입니다.
- 첫째, 상위 모듈은 하위 모듈에 의존해서는 안된다. 상위 모듈과 하위 모듈 모두 추상화에 의존해야 한다.
- 둘째, 추상화는 세부 사항에 의존해서는 안된다. 세부사항이 추상화에 의존해야 한다.
- DIP는 단순히 의존 관계만 역전시키는 것이 아니라 ownership을 역전시키는 것까지 포함합니다.
- 예를 들면 정렬 알고리즘을 정하는 것의 주체가 정렬 Class가 아닌 그것을 부르는 상위 Class여야 하는 것입니다.
- 상위 모듈에서 Interface를 제공하면 하위 모듈이 그것을 참조하게 됩니다.
SOLID 원칙의 핵심은 Abstraction입니다.
이러한 SOLID 원칙을 지킴으로써
의존성을 관리할 수 있게 되며
더 나은 유지보수성, 유연성, 재사용성, Robustness 등을 제공하게 됩니다.
다음 장에서는 GRASP에 대하여 살펴보도록 하겠습니다.
'Architecture (아키텍쳐) > OOP' 카테고리의 다른 글
DIP (The Dependency Inversion Principle) (0) | 2022.10.14 |
---|---|
GRASP (0) | 2021.04.27 |