소프트웨어 디자인의 근본 원칙을 이해하면 패턴이 어떻게 작동하는지 더 잘 이해할 수 있습니다.
SOLID는 이러한 원칙을 나타내는 다섯 가지 핵심 원칙을 설명하는 머리글자어입니다.
이제 이 원칙들을 하나씩 살펴보겠습니다.
1. Single Responsibility Principle (SRP): 단일 책임 원칙
클래스를 변경해야 한다면 그 이유는 오직 단일 책임 원칙이어야 합니다.
모듈, 클래스 또는 함수가 오직 한 가지만 책임지며 로직의 특정 부분만 캡슐화할 것을 명시합니다.
단일 구조의(monolithic) 클래스를 만들기보다는 여러 개의 작은 클래스로 프로젝트를 조합하세요.
클래스와 메서드는 짧을수록 설명과 이해, 구현이 쉽습니다.
Unity를 어느 정도 사용해 봤다면 이미 익숙한 개념일 것입니다.
유니티에서 게임 오브젝트를 만들면 더 작고 다양한 컴포넌트가 오브젝트 내부에 포함됩니다.
포함될 수 있는 컴포넌트는 다음과 같습니다
- 3D 모델에 대한 참조가 있는 MeshFilter 컴포넌트
- 모델 표면이 화면에 표시되는 방식을 제어하는 Renderer 컴포넌트
- 스케일, 회전, 위치 정보가 있는 Transform 컴포넌트
- 물리 시뮬레이션과 상호 작용하는 데 필요한 Rigidbody 컴포넌트
(p.s 컴포넌트도 디자인 패턴 중 하나입니다.)
각 컴포넌트는 한 가지 작업을 올바르게 수행하여, 게임 오브젝트를 이루고 게임 오브젝트로 전체 씬을 만들 수 있으며, 컴포넌트 간의 상호 작용으로 게임이 구동됩니다.



위 이미지 처럼 만들면 프로젝트가 커질 수록 유지하기 어려워질 것이므로, 아래 이미지 처럼 여러 작은 클래스로 분할해서 관리하는게 좋습니다.






Player 스크립트가 여전히 스크립팅된 다른 컴포넌트를 관리할 수 있지만, 각 클래스는 오직 한 가지 역할만 수행합니다.
이렇게 디자인하면 코드를 더 쉽게 수정할 수 있으며, 특히 시간이 지나며 프로젝트 요구 사항이 바뀌는 상황에서는 더욱 유용합니다.
하지만, 단일 책임 원칙이라도 합당한 상식선에서 적용해야 합니다.
하나의 메서드만으로 클래스를 만드는 극단적인 간소화는 피하세요.
단일 책임 원칙을 따라 작업할 때 염두에 둘 만한 목표는 다음과 같습니다.
— 가독성: 클래스가 짧으면 읽기 쉽습니다. 엄격하고 직관적인 규칙은 없지만 많은 개발자가 라인의 수를 200~300개 정도로 제한합니다. 본인 또는 팀 차원에서 어느 정도를 짧다고 규정할지 원칙을 정하세요. 정해진 한도를 초과하면 더 작게 리팩터링할 것인지 결정하세요.
— 확장성: 작은 클래스에서 상속하기가 더 쉽습니다. 의도치 않은 기능 장애를 걱정할 필요 없이 클래스를 수정하거나 대체하세요.
— 재사용성: 게임의 다른 부분에 재사용할 수 있도록 클래스를 작은 모듈형으로 디자인하세요. 리팩터링할 때는 코드를 어떻게 재구성해야 자신과 팀원에게 도움이 될지 생각해 보세요. 초반에 약간의 노력을 더 들이면 많은 문제를 미연에 방지할 수 있습니다.
2. Open/Closed Principle (OCP): 개방-폐쇄 원칙
OCP(개방-폐쇄 원칙)는 클래스가 확장에는 개방적이되 수정에는 폐쇄적이어야 한다고 명시합니다 .
원본 코드를 수정하지 않고도 새로운 동작을 생성할 수 있도록 클래스를 구조화하세요
어렵게 생각할 필요없이, OCP 원칙은 추상화 사용을 통한 관계 구축을 권장을 의미합니다.
대표적인 예시가 도형의 영역 크기를 계산하는 클래스입니다.

각 도형의 클래스가 Shape 클래스를 상속 받아 각자만의 영역을 계산할 수 있으면 이제 원본 소스를 전혀 변경하지 않고 AreaCalculator 기능을 확장할 수 있습니다.
새로운 다각형이 필요할 때마다 Shape에서 상속하는 새 클래스를 정의하면 됩니다.
각각의 서브 클래스 도형들은 CalculateArea 메서드를 오버라이드하여 올바른 영역을 반환합니다.
개방 폐쇠 원칙(추상화 기법)을 사용하면 디버깅하기도 더 쉽습니다.
새로운 셰이프로 오류가 발생하더라도
AreaCalculator를 재검토할 필요가 없습니다.
기존 코드가 변경 없이 유지되므로, 새 코드에만 잘못된 로직이 있는지 조사하면 됩니다.
Unity에서 새로운 클래스를 만들 때 인터페이스와 추상화를 활용하세요.
이렇게 하면 나중에 확장하기 까다로운 switch 또는 if 문을 로직에 넣지 않아도 됩니다.
OCP에 맞춰 클래스를 설정하는 데 익숙해지면 장기적으로 새로운 코드를 더 간편하게 추가할 수 있게 됩니다.
'게임 프로그래밍 패턴' 카테고리의 다른 글
게임 프로그래밍 패턴 공부하기 전 공부 자료 출처 (0) | 2024.06.14 |
---|