아키텍처와 디자인 패턴
개발자라면 아키텍처(혹은 아키텍처 패턴)와 디자인 패턴이라는 단어에 익숙할 것입니다. 아키텍처는 어떤 소프트웨어를 만들기 위한 큰 뼈대 구조로 소프트웨어를 구성하는 모든 요소는 이 아키텍처를 기반으로 제 역할을 하게 됩니다. 반면 디자인 패턴은 소프트웨어를 만들 때 나타나는 문제들을 유형별로 나누었을 때 각 유형별 해결책이라고 볼 수 있습니다. 두 개념 모두 결국에는 좋은 소프트웨어를 만들기 위한 해결법이라고 볼 수 있습니다. 다만, 그 공통된 목적 아래 아키텍처는 어플리케이션의 기본이 되는 뼈대를 정의하고 디자인 패턴은 최선의 내부 구조를 만들기 위한 구체적인 방법이라고 볼 수 있습니다.
게임 프로그래밍 패턴
어떤 종류의 어플리케이션인지 상관없이 소프트웨어라면 공통으로 잘 알려진 아키텍처와 디자인 패턴들이 있습니다. MVC, Singleton, Observer 등 잘 알려진 방법론들은 다양한 어플리케이션에서 사용됩니다. 현대의 프로그래밍 언어들뿐만 아니라 태어난 지 오래된 프로그래밍 언어들도 버전이 업데이트되면서 다양한 프로그래밍 패턴을 적용하기가 용이해졌습니다. 특정 방법론에 특화된 언어가 태어나기도 합니다.
게임 프로그래밍 패턴이라고 하면 게임을 제작하는데 있어서 자주 나타나는 문제의 유형들을 해결하기 위한 패턴입니다. 이 패턴을 사용하여 프로젝트를 더 잘 구조화할 수 있습니다. 좋은 구조로 짜인 게임은 코드가 이해하기 쉬우며 개발자의 생산성을 높입니다.
프로그래밍 패턴을 왜 알아야 할까요?
유니티로 게임 제작을 한다면 결국 게임 프로그래밍 패턴을 사용할 것입니다. 물론 유니티 입문자나 아주 간단한 게임을 만들 때는 오히려 의도적으로 특정 패턴들을 적용하지 않는 것이 더 좋을 수 있습니다. 하지만 어느 정도 게임 규모가 커지고 코드가 많아질수록 코드들은 잘 구조화된 패턴들을 적용해야 합니다.
유니티로 게임을 만들 때 프로그래밍 패턴을 익혀야 하는 이유는 명확합니다. 생산성을 높여주기 때문이죠. 패턴을 적용하면 개발자의 실수를 줄일 수 있는 환경이 구성되어 빠르게 코드를 작성할 수 있습니다. 특히 새로운 기능을 추가하거나 코드의 유지 보수를 할 때 더욱 그 장점이 부각됩니다.
유니티에서 디자인 패턴을 적용하지 않고 그냥 빠르게 개발할 수 있었는데, 패턴들을 익히고 적용하느라 발생한 비용이 더 크다고 생각할 수도 있습니다. 그러나 현재 발생한 문제를 해결하기 좋은 패턴이 있었는데 적용하지 않아 발생하는 문제들을 해결하기 위한 비용(시간)이 더 큽니다. 그렇기 때문에 뛰어난 개발자들이 소프트웨어 아키텍처나 디자인 패턴을 만들었고 많은 개발자가 사용하는 것이 아닐까요? 심지어 이후에도 같은 문제가 발생했을 때의 비용을 고려해보면 패턴들을 익히는 것이 당연히 더 좋습니다.
Unity Anti-patterns
아키텍처 패턴, 디자인 패턴은 만능열쇠는 아닙니다. 문제 상황과 맞지 않게 사용하는 부적절한 패턴을 Anti-pattern이라고 하는데 패턴을 사용해서 오히려 개발 비용이 더 늘어나게 되는 경우입니다. 유니티를 입문할 때 보통 하나의 만능 클래스를 만들곤 합니다. 많은 튜토리얼이나 입문자 코드들이 그런 클래스를 만들기 때문입니다. 튜토리얼이 절대 잘못된 것은 아닙니다. 입문자의 입장에서(만약 프로그래밍도 입문한다면) 배울 때 작성하는 코드양이 그렇게 많지 않을 뿐만 아니라 만능 클래스를 만드는 방법이 진입장벽이 낮고 이해하기 쉽기 때문입니다. 하지만 결국에는 패턴을 배워야 합니다.
게임의 모든 것들에 관여하는 "GameController"라는 흔하디흔한 이름의 만능 클래스를 만들었다고 생각해봅시다. 이 클래스는 게임의 규모와 비례해서 계속 커질 것입니다. 그 뜻은 그 클래스 스크립트의 유지보수가 점점 더 어려워진다는 것입니다. 즉, Anti-patterns이거나 패턴을 뭔가 잘못 사용하고 있는 것입니다.
만약 유니티 입문자이지만 프로그래밍을 해보았던 사람이라면 유니티를 배우는 과정에서 만능 클래스를 만들고 있더라도 알아서(혹은 튜토리얼이라면 머릿속으로라도) 전에 알고 있던 프로그래밍 패턴을 적용하여 코드를 나누게 될 것입니다. 아니면 처음부터 어느 정도 구조를 만들고(패턴을 적용하고) 코드를 작성할 수도 있을 것 같습니다.
패턴들은 배우고 써보면서 익히는 시간이 필요합니다. 하지만 모든 패턴들을 억지로 써볼 수 없는 상황이거나 그럴 생각이 없다면, 적어도 게임을 개발할 때 자주 나타나는 유형별 디자인 패턴들이 무엇이 있는지 알고 필요할 때 꺼내 쓸 수 있는 것이 좋습니다. 다음 글부터는 유니티 프로그래밍 패턴들을 하나씩 알아보겠습니다.
이 글을 작성하는데 참고한 자료입니다.
https://github.com/Habrador/Unity-Programming-Patterns
https://www.oreilly.com/radar/contrasting-architecture-patterns-with-design-patterns/
'Unity Programming Pattern' 카테고리의 다른 글
유니티 프로그래밍 패턴 (5) Singleton (0) | 2022.10.27 |
---|---|
유니티 프로그래밍 패턴 (4) Prototype (0) | 2022.10.22 |
유니티 프로그래밍 패턴 (3) Observer, Publish/Subscribe (0) | 2022.10.21 |
유니티 프로그래밍 패턴 (2) Flyweight (0) | 2022.10.18 |
유니티 프로그래밍 패턴 (1) Command (1) | 2022.10.13 |
최근댓글