객체지향 5원칙(SOLID)이란
SOLID란 유명한 Clean Code의 저자 로버트 C. 마틴(Robert C. Martin)이 2000년대 초에 명명한 객체 지향 프로그래밍의 다섯 가지 기본 원칙을 마이클 페더스가 원칙의 앞 글자를 따서 다시 SOLID라는 이름으로 소개한 것.
SRP(The Single Responsiblity Principle) : 클래스나 모듈을 변경할 이유가 하나, 단 하나뿐이어야한다는 원칙이다.
OCP(The Open Close Principle): 클래스는 확장에는 열려있어야 하며 변경에 닫혀 있어야 한다.
LSP(The Liskov Substitution Principle) : 서브타입은 그것의 기반 타입에 대해 대체 가능해야한다.
DIP(The Dependency Inversion Principle) : 추상화에 의존해야 하며, 구체화에 의존하면 안된다.
ISP(The Interface Segregation Principle) : 클라이언트에 밀접하게 작게 쪼개진 인터페이스를 유지한다.
1. 단일 책임의 원칙 : SRP (Single Responsibility Principle)
- 모든 클래스는 각각 하나의 기능만 가진다는 의미. 다시 말하면 해당 클래스가 제공하는 모든 서비스는 단 하나의 책임을 수행하는 데 집중되어야 한다는 원칙
- 응집도(cohesion)는 높이고 결합도(coupling)은 낮출 수 있다.
- 책임을 적절하게 분배함으로써 코드의 가독성 향상, 유지보수 용이라는 이점까지 누릴 수 있으며 다른 원칙들을 적용하는 기초가 된다.
2. 개방폐쇄의 원칙 : OCP (Open Close Principle)
- 소프트웨어의 모든 구성요소(클래스, 모듈, 함수)는 확장에는 열려있고, 변경에는 닫혀있어야한다는 원칙
- 기존 구성요소는 수정이 일어나지 말아야하며 쉽게 확장이 가능하여 재사용할 수 있어야 한다.
- 로버트 마틴은 OCP는 관리가 용이하고 재사용 가능한 코드를 만드는 기반이며, OCP를 가능케 하는 중요한 메커니즘은 추상화(Abstraction)와 다형성(Polymorphism)이라고 설명한다. OCP는 객체지향의 장점을 극대화하는 아주 중요한 원리
3. 리스코브 치환의 원칙 : LSP (the Liskov Substitution Principle)
- 부모 클래스를 가리키는 포인터에 해당 클래스를 상속하는 자식 클래스를 할당하더라도 모든 기능이 정상적으로 작동해야 하며, 자식 클래스의 상세 내부를 부모 클래스는 알 필요가 없다는 원칙
4. 인터페이스 분리의 원칙 : ISP (Interface Segregation Principle)
- 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다는 원칙
- 하나의 큰 인터페이스를 상속 받기 보다는 인터페이스를 구체적이고 작은 단위들로 분리시켜 꼭 필요한 인터페이스만 상속하자는 의미
- 인터페이스 하나의 크기가 크다는 것은 한번에 지켜야할 약속이 많아진다는 것을 의미
5. 의존성 역전의 원칙 : DIP (Dependency Inversion Principle)
- ‘상위 모듈은 하위 모듈에 의존해서는 안된다. 둘 다 추상화에 의존해야한다.’
- ‘추상화는 구체적인 것에 의존해서는 안된다. 구체적인 것은 추상화에 의존해야한다.’
- 구체적인 클래스에 의존하지 말고 최대한 추상화한 클래스에 의존하라는 의미
'CS' 카테고리의 다른 글
[CS] 프로세스와 스레드 (0) | 2023.01.26 |
---|---|
리액티브 프로그래밍(Reactive Programming) (0) | 2023.01.13 |
멱등성과 HTTP메소드 (0) | 2023.01.10 |
계층화 아키텍처 (Layered Architecture) / MVC Pattern / Node.js에서의 적용 (0) | 2023.01.10 |
RESTful API 쉽게 이해하기 (0) | 2023.01.09 |