위키 요약
두 문자 | 약어 | 개념 |
S | SRP | 단일 책임 원칙 (Single responsibility principle)한 클래스는 하나의 책임만 가져야 한다. |
O | OCP | 개방-폐쇄 원칙 (Open/closed principle)“소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.” |
L | LSP | 리스코프 치환 원칙 (Liskov substitution principle)“프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.” 계약에 의한 설계를 참고하라. |
I | ISP | 인터페이스 분리 원칙 (Interface segregation principle)“특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.” |
D | DIP | 의존관계 역전 원칙 (Dependency inversion principle)프로그래머는 “추상화에 의존해야지, 구체화에 의존하면 안된다.”[4] 의존성 주입은 이 원칙을 따르는 방법 중 하나다. |
1. 단일 책임 원칙 SRP(Single responsibility principle)
클래스는 하나의 기능만 가지며 클래스의 모든 기능은 그 하나의 책임을 수행하는데 집중되어 있어야 한다는 원칙입니다.
기능적으로 공통되는 부분, 공통되지 않는 부분등 책임 기준을 확실하게 나누는 작업이며 모든 객체지향 원칙의 기본이되는 원칙입니다.
예) 기타 클래스와 기타 스팩 클래스를 나누기
2. 개방 폐쇄의 원칙 OCP(Open/closed principle)
소프트웨어 요소(컴포넌트, 클래스, 모듈)의 확장에는 열려있고 변경에는 닫쳐있어야 한다는 원칙입니다.
요구사항이 변경되어도 기존 요소에는 변경이 일어나지 않으며 기존 구성요소를 확장하여 재사용이 가능해야 합니다.
1) 변경 될 것과 변경 되지 않는 것을 구분
2) 이 두 클래스가 만나는 지점에 인스턴스를 만듦
3) 구현보다는 인터페이스에 의존하도록 코드를 구현
예
class Weapon
{
virtual void Attack(); // 인터페이스
};
class Sword : public Weapon
{
virtual void Attack();
{
// 근접 어택
}
};
class Bow : public Weapon
{
virtual void Attack();
{
// 원거리 어택
}
};
3. 리스코프 치환 원칙 LSP(Listov Substitution Priciple)
서브 타입은 언제나 부모 타입으로 변환할 수 있어야 한다는 원칙입니다.
예를 들면
트럭 -> 자동차 O
버스 -> 자동차 O
헬기 -> 자동차 X
트럭과 버스는 자동차가 될 수 있지만 헬기는 아닌 것 입니다.
4. 인터페이스 분리 원칙 ISP (Interface Segregation Principle)
큰 덩어리의 인터페이스들을 각 사용에 맞게 적절히 분리하는 법칙입니다.
가능한 필요한 최소한의 인터페이스만 사용하여 시스템의 내부 의존성을 약화시켜 리팩토링, 수정, 재배포를 쉽게 할 수 있게 합니다.
주의점
한 번 인터페이스를 분리해 구성하고
나중에 어떤 수정사항이 생겨서 또 인터페이스들을 분리하는 행위를 가하지 말아야 한다.
5. 의존 관계 역전 원칙 DIP (Dependency Inversion Principle)
어떤 클래스를 참조해야하는 상황이 온다면 직접 참조보다는 상위 클래스를 참조하여 다형성이 가능하게 하는 원칙
구현된 세부 기능에 의존하는게 아니라 인터페이스에 의존하라는 원칙
상위 하위 모두 기능이 아니라 인터페이스에 의존해야한다.
이 원칙은 '상위와 하위 객체 모두가 동일한 추상화에 의존해야 한다'는 객체 지향적 설계의 대원칙을 제공한다.
Bow* b = new Bow(); // X
Weapon* w = new Bow(); // O
참고
SOLID (객체 지향 설계) - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 컴퓨터 프로그래밍에서 SOLID란 로버트 마틴[1][2]이 2000년대 초반[3]에 명명한 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙을 마이클 페더스가 두문자어
ko.wikipedia.org
https://www.nextree.co.kr/p6960/
객체지향 개발 5대 원리: SOLID
현재를 살아가는 우리들은 모두 일정한 원리/원칙 아래에서 생활하고 있습니다. 여기서의 원칙 이라 함은 좁은 의미로는 개개인의 사고방식이나 신념, 가치관 정도가 될 수가 있겠고, 넓게는 한
www.nextree.co.kr
'프로그래밍 > CPP' 카테고리의 다른 글
[CPP] 메모리 누수 추적 디버깅 (0) | 2024.01.11 |
---|---|
[C++] 구조체 변수의 크기 (패딩 바이트) (0) | 2024.01.05 |
[C++] 캐스팅 연산자 (1) | 2024.01.03 |
[C++ STL] 스마트 포인터 (0) | 2023.12.22 |
엔진에 ENGINE_DLL까지 붙혔는데도 불안정한 형식이라면서 클래스 참조가 안되는 이유 (0) | 2023.04.08 |