디자인 패턴 V - SOLID

그림자왕국·2021년 11월 27일
0

Design Patterns

목록 보기
5/5

단일 책임 원칙

객체/클래스의 일관성을 위해 해당 클래스와 관계없는 함수는 클래스 밖에서 구현한다.

함수의 수를 줄이기 위해 두 개 이상의 함수가 합쳐져있는 함수를 만들 필요도 없다.

Add() + NumPrint() = AddPrint() // 잘못된 함수 (add, Numprint 따로 사용해야한다.)
Cat cat;

void LogCat(Cat a); // Log 함수를 Cat 클래스 안에 멤버로 넣을 이유가 없다.
LogCat(cat.repr()); // Cat의 정보를 넘겨주는 멤버 함수만 있으면 된다.

개방 폐쇄 원칙

확장(추가)에 대해서는 열려있고,
(인터페이스 함수의)수정에 대해서는 닫혀있는 디자인 패턴 원칙

리스코프 치환 원칙

상위 타입의 객체를 하위(자식) 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.

Cat cat = new BlackCat();
cat->meow(); // OK

인터페이스 분리 원칙

인터페이스를 너무 큰 개념으로 잡지 말 것
상속된 클래스가 사용하지 않을 함수를 인터페이스에 한꺼번에 선언하지 않는다.
(그럴 경우 인터페이스를 기능별로 잘게 나눠서 다중 상속으로 해결한다.)

의존관계 역전

일반적인 의존관계인 경우 Low Level 모듈을 추가할 때마다 High Level 모듈에서도 의존관계를 재정의해줘야 한다. (Zoo 클래스의 init 함수를 계속해서 수정해줘야됨)

하지만 의존관계 역전을 활용할 경우 Zoo 클래스는 동물(Animal) 클래스만 의존관계를 소유하되 동물 클래스에서 실제 동물(Cat, Dog..)과 의존관계를 가지면 새로운 동물이 추가 되더라도 동물원(Zoo)은 각 동물들을 건드리지 않고 새 동물이 추가될 때 그 동물만 Animal 클래스를 참고하면 되니 확장과 관리가 훨씬 편해진다.

기존의 전통적인 의존 구조를 벗어나 High Level과 Low Level 사이에 추상화 모듈(Animal)을 만들어 각 Level이 추상화 모듈만 의존하게 만들어 화살표의 방향도 바꼈기에 의존과계의 역전이라고 불린다.

profile
언리얼 엔진 매니아입니다.

0개의 댓글