객체 지향 프로그래밍 언어를 다룬 경험이 있다면 SOLID 원칙, MVP, 싱글턴, 팩토리, 관찰자 패턴 등에 대해 들어보셨을 것입니다. 유니티에서 발행한 최신 전자책에서는 이러한 원칙과 패턴을 활용해 Unity 프로젝트에서 스케일링 가능한 게임 코드 아키텍처를 생성하는 베스트 프랙티스를 소개합니다.
개발자들은 소프트웨어 설계 과정에서 유사한 문제에 직면합니다. 직접 조언을 구할 수는 없더라도, 디자인 패턴을 통해 과거의 개발자들이 어떤 결정을 내렸는지 학습할 수는 있습니다.
일반적으로 통용되는 게임 프로그래밍 설계 패턴을 Unity 프로젝트에 활용하면 깔끔하게 정리되고 쉽게 알아볼 수 있는 코드베이스를 구축하고 관리할 수 있으며, 게임과 개발 팀 및 비즈니스를 모두 스케일링할 수 있는 안정적인 토대를 구축할 수 있습니다.
Unity 커뮤니티에서 SOLID나 KISS 같은 설계 패턴과 원칙을 개발 작업에 적용하기가 힘들다는 이야기를 자주 듣습니다. 그러한 이유로 유니티에서는 무료 전자책 게임 프로그래밍 패턴으로 코드 작성 스킬 업그레이드하기를 발간하여 잘 알려진 설계 패턴들과 Unity 프로젝트에서 사용할 수 있는 실제 사용 예시를 정리했습니다.
유니티의 내부 및 외부 전문가들이 집필한 이 전자책에는 개발자로서의 역량을 키우고 더 빠르게 프로젝트를 성공적으로 완료하는 데 유용한 정보가 담겨 있습니다. 아래 내용에서 간략하게 살펴 보시기 바랍니다.
설계 패턴을 사용하면 소프트웨어 엔지니어링에서 발생하는 일반적인 문제들을 해결할 수 있습니다. 이는 단순히 복사해서 코드에 붙여 넣는 방식의 솔루션은 아니지만 올바르게 사용할 경우 더 크고, 스케일링이 가능한 애플리케이션을 만들 수 있습니다.
일관성 있게 프로젝트에 패턴을 적용한다면 코드의 가독성도 높이고, 코드 베이스도 깔끔하게 구축할 수 있습니다. 설계 패턴을 적용하면 리팩터링과 테스트 시간을 줄일 수 있을 뿐 아니라 온보딩과 개발 프로세스 전반에 드는 시간을 줄여줍니다.
하지만 모든 설계 패턴은 관리해야 할 구조가 추가되거나 더 많은 초기 설정을 해야 하는 문제 등을 안고 있습니다. 따라서 패턴을 적용함으로써 얻는 이점이 추가 작업을 상쇄할 만큼 바람직한지 파악해야 합니다. 물론 평가의 기준은 프로젝트마다 다릅니다.
KISS란 'Keep it simple, stupid의 줄임말로, 시스템에서 불필요하게 복잡한 코드를 줄이는 것이 목적입니다. 단순하게 만들면 사용자가 더 쉽게 이해하고 상호 작용할 수 있습니다.
참고로 '단순함'이 반드시 '쉬움'을 의미하지는 않습니다. 단순하게 만드는 것은 불필요한 것들을 없앤다는 뜻입니다. 패턴을 사용하지 않아도 똑같은 기능을 구현할 수 있고 심지어 더 빠른 구현도 가능하지만, 과정이 쉽고 빠르다 해서 무조건 단순한 결과물이 나오지는 않습니다.
어떤 패턴이 특정한 문제에 적용 가능한지 알 수 없다면, 필요하다는 생각이 들 때까지 미뤄 두어도 됩니다. 새롭거나 흥미롭다는 이유로 패턴을 사용해서는 안 됩니다. 꼭 필요할 때만 사용하세요.
이는 전자책에서 기본적으로 강조하는 내용 중 하나입니다. 이 전차책은 엄격하게 지켜야할 규칙이라기 보다는 새로운 코드 정리 방식을 찾는 지침으로 여기고 활용하시기 바랍니다.
이제 주요 소프트웨어 설계 원칙들을 알아보겠습니다.
SOLID 원칙은 소프트웨어 설계에서 지켜야 할 다섯 가지 핵심 원칙을 머리글자어로 만든 용어입니다. 유연하고 관리하기 쉬운 객체 지향 설계를 추구하기 위해 명심해야 하는 다섯 가지 원칙이라 생각하면 됩니다.
SOLID 원칙은 로버트 C. 마틴이 자신의 논문인 Design Principles and Design Patterns에서 최초로 도입한 개념입니다. 2000년에 처음으로 발표한 이 원칙은 오늘날에도 여전히 적용 가능하며 Unity의 C# 스크립팅에도 적용됩니다.
유니티는 이번 전자책을 통해 Unity에서 각 원칙을 적용하는 상세한 방법과 그에 관한 도식화된 예시를 제공합니다. SOLID 원칙을 따르려면 추가로 사전 작업이 필요할 때도 있습니다. 예를 들어 일부 기능을 추상화나 인터페이스로 리팩터링해야 할 수도 있지만, 그러한 노력이 장기적으로 도움이 되는 경우가 많습니다.
이 다섯 가지 원칙은 스케일링이 필요한 대규모 애플리케이션에 매우 효과적이기 때문에, 기업 수준의 대규모 개발사들은 20년 가까이 이를 소프트웨어 설계의 기본 원칙으로 준수하고 있습니다. 어떻게 활용해야 하는지 확신할 수 없다면 KISS 원칙을 다시 참고해 보세요. 단순함을 유지하되 단지 좋아 보인다는 이유만으로 스크립트에 원칙을 억지로 적용하려 하지 마세요. 필요한 곳에 유기적으로 적용될 수 있도록 해야 합니다.
SOLID 원칙을 더 구체적으로 학습하려면 Productive Edge의 댄 새그밀러가 발표한 SOLID presentation from Unite Austin 2017 영상을 확인하세요.
설계 원칙과 설계 패턴은 어떻게 다를까요? SOLID 원칙은 객체 지향 코드 작성의 프레임워크 또는 기반으로 간주할 수 있습니다. 설계 패턴은 일반적인 소프트웨어 문제를 방지하는 데 필요한 일종의 솔루션 또는 도구와 같지만, 그렇다고 해서 특정 결과를 도출하기 위해 정해진 절차를 따라야 하는 알고리즘은 아닙니다.
설계 패턴은 일종의 청사진과도 같은 일반적인 계획이며, 실제 작업은 개발자가 직접 해야 합니다. 예를 들어 동일한 패턴을 따르는 두 프로그램의 코드가 전혀 다른 경우도 있습니다.
똑같은 문제에 직면한 개발자들이 있다면 많은 수가 필연적으로 유사한 솔루션을 도출하게 될 것입니다. 그러한 솔루션이 어느 정도 반복되다 보면 누군가 패턴을 '발견'하게 되고 공식적인 이름을 지정하게 됩니다.
현재 많은 소프트웨어 설계 패턴이 에릭 감마, 리처드 헬름, 랠프 존슨, 존 블리시디스가 Design Patterns: Elements of Reusable Object-Oriented Software에서 제시한 이론을 기반으로 합니다. 이 책에서는 일상적인 개발 상황에서 식별된 23개의 패턴을 소개합니다.
저자들을 가리키는 'GoF'(Gang of Four)라는 별명을 따라 이 책에서 다루는 패턴들은 GoF 패턴이라 합니다. 책에서는 대부분 C++ 및 Smalltalk 언어로 작성된 예제를 인용하지만 C# 같은 객체 지향 언어에도 같은 개념을 적용할 수 있습니다.
GoF가 Design Patterns를 발간한 시점은 1994년이지만, 개발자들은 그로부터 다양한 분야에서 수십 가지의 더 많은 객체 지향 패턴을 수립했으며 여기에는 게임 개발 분야도 포함됩니다.
설계 패턴을 모르더라도 게임 프로그래머로서 역할을 수행할 수는 있지만, 패턴을 학습하면 더 능력 있는 개발자가 될 수 있습니다. 설계 패턴을 설계 '패턴'이라 하는 이유는 결국 잘 알려진 문제들에 대한 일반적인 솔루션이기 때문입니다.
소프트웨어 개발자들은 통상적인 개발 과정에서 항상 패턴을 발견합니다. 이미 기존의 패턴 중 일부를 무의식적으로 구현했을 수도 있습니다.
그런 패턴을 식별하는 능력을 키워야 합니다. 그러면 다음과 같은 이점을 누릴 수 있습니다.
앞서 언급한 대로 모든 설계 패턴을 각 게임 애플리케이션에 적용할 수 있는 것은 아닙니다. 매슬로우의 망치(Maslow's hammer)라는 비유에서 볼 수 있듯이 만병통치약과도 같은 솔루션은 존재하지 않습니다.
다른 도구들과 마찬가지로 설계 패턴도 상황에 따라 유용성이 달라집니다. 각 패턴은 상황에 따라 이점을 제공하기도 하지만 나름대로의 단점도 가지고 있습니다. 소프트웨어 개발에서는 어떤 결정을 내리더라도 타협이 필요합니다.
다수의 게임 오브젝트를 빠르게 제작하는 상황을 가정해 보겠습니다. 성능에 영향을 주나요? 코드를 다시 작성하면 해결할 수 있을까요? 이러한 설계 패턴을 알고 있으면 적절한 시점에 필요한 패턴을 적용하여 문제를 바로 해결할 수 있습니다.
GoF의 Design Patterns와 더불어 로버트 니스트럼의 Game Programming Patterns 역시 독보적인 리소스라 할 수 있으며, 현재 웹 에디션 형태로 무료 사용이 가능합니다. 니스트럼은 이 책에서 다양한 소프트웨어 패턴을 구체적이고 이해하기 쉽게 설명합니다.
유니티의 최신 전자책에서는 팩토리, 객체 풀, 싱글턴, 명령어, 상태, 관찰자 패턴 등 일반적인 설계 패턴 및 Model View Presenter(MVP)와 같은 패턴에 대해 여러 장으로 나누어 상세하게 설명합니다. 각 장에서 패턴에 대한 설명과 장단점, Unity에서 패턴을 구현하는 방법에 대한 예시를 소개하므로 프로젝트에 맞게 최적화해 사용할 수 있습니다.
Unity에서는 이미 몇 가지 게임 개발 패턴을 구현해 제공하므로 직접 패턴을 작성해야 하는 수고를 줄일 수 있습니다. 다음과 같은 패턴이 제공됩니다.
Is this article helpful for you?
Thank you for your feedback!