[유니티 TIPS] 객체지향의 기본기 Strategy 패턴 | 프로그래밍 디자인패턴

 

 

1. 🌟 스트레티지 패턴의 기본 개념과 데모 소개

  • 스트레티지 패턴은 객체지향 프로그래밍의 기본 성질을 이용하는 간단한 패턴이다.

  • 이 패턴은 간단하여 패턴으로 분류할 필요가 있을지 의문이 든다.

  • 데모는 이북에서 배포하는 샘플을 활용하여 진행된다.

  • 아이템마다 서로 다른 속성을 가지고 있지만, 데모만으로는 모두 이해하기 어려울 수 있다.

  • 데모를 통해 명확하게 이해할 수 있도록 도와준다.

 

2. 🌀 스트레티지 패턴의 핵심 개념

  • 스트레티지 패턴은 동일 계열의 알고리즘 군을 정의하고 각각의 알고리즘을 캡슐화하여 상호 교환이 가능하도록 만들어 주는 디자인 패턴이다.

  • 알고리즘을 독립적으로 런타임 시 변경할 수 있게 하여 유연성을 제공한다.

  • 여러 알고리즘을 관리하기 위해 베이스 클래스를 구체화해 다양한 구현체를 만들어 사용할 수 있다.

  • RPG나 슈팅 게임의 어빌리티 시스템 예시에서 각 능력을 스위치 케이스로 처리하는 대신 클래스로 분리하여 관리하는 것이 효과적이다.

  • 공통적으로 수행해야 할 기능은 베이스 클래스에 구현하고, 추가적인 기능은 상속받은 클래스에서 구현하는 방식으로 설계할 수 있다.

 

3. 🛠️ 어빌리티 클래스 확장 및 활용

  • 어빌리티 클래스를 상속받아 에어 서포트, 라이더 포스, 퍼스트 에이드 등의 아이템을 추가하고 개발할 수 있다.

  • 어빌리티를 사용하는 캐릭터가 현재 가진 어빌리티를 유수 호출하여 사용할 수 있다.

  • 어빌리티를 추가하더라도 기존의 어빌리티 러너나 베이스는 건드리지 않고 확장할 수 있다.

  • 추가적인 아이템으로 예를 들어 멀티 샷 같은 기능을 추가할 수 있는 가능성이 있다.

 

4. 🎮 전략 패턴의 활용과 이점

  • 스트래티지 패턴은 시스템에 기능을 추가하고 확장하는 데 효과적이며, 기존 코드를 수정하지 않고도 기능을 계속 추가할 수 있는 장점이 있다.

  • 이 패턴은 관계가 있는 많은 클래스가 존재하는 상황에서 행동을 다르게 구현하는 데 사용되며, 예를 들어 아이템의 사용 방식이 각기 다르게 작동하게 된다.

  • 상속 구조를 활용하여 공통의 어빌리티를 정의하고, 이를 바탕으로 다양한 동작과 세부 알고리즘을 클래스별로 나누어 처리하는 것이 가능하다.

  • 전략 패턴은 개발 중 리팩토링을 수행할 때 유용하며, 쉽게 구현할 수 있어 개발자들이 많이 활용하는 패턴이다.

  • 게임 개발에서는 스킬과 아이템의 다양성을 처리하기 위해 전략 패턴이 자주 사용되며, 이는 다른 프로그램에도 널리 적용할 수 있는 패턴이다.

 

5. 🎮 유니티의 전략 패턴 적용 사례

  • 유니티에서 특정 이름이 붙지 않더라도 전략 패턴이 적용된 경우가 많으며, 랜더러 기능에서 특히 두드러진다.

  • 랜더러 피처를 통해 스크린 스페이스 앰비언트 오클루전, 스크린 스페이스 섀도우 등 다양한 렌더 패스를 추가할 수 있다.

  • 만약 유니티가 하드코딩을 적용했다면, 사용자에 의한 추가 기능 개발이 불가능하지만, 전략 패턴을 통해 확장이 가능해진다.

  • 내부적으로 다양한 패턴이 적용되어 있지만, 사용자가 접근할 수 있도록 설계되지 않은 경우도 많아, 예를 들어 빌트인 랜더 파이프라인이 있다.

  • 전체적으로 유니티의 상속 개념이 전략 패턴과 일치하며, 복잡한 패턴이라기보다는 기본적인 개념으로 이해될 수 있다.

 

6. 🛠️ 인터페이스와 전략 패턴의 관계

  • 인터페이스는 다양한 방식으로 활용될 수 있지만, 전략 패턴과 결합할 때는 적용이 애매할 수 있다.

  • 전략 패턴의 핵심은 추상 클래스를 기반으로 하여 다양한 기능을 확장하는 것이다.

  • 렌더링 파이프라인에서는 공통적으로 수행해야 할 작업이 많아, 추상 클래스가 필수적이며 이를 통해 기본 기능을 정의하게 된다.

  • 모든 디자인 패턴은 동일하게 적용될 필요가 없으며, 이에 따라 새로운 패턴이 생성될 가능성이 있다.

  • 전략 패턴을 통해 하드코딩을 피하고, 확장성 있는 프로그래밍을 구현할 수 있으며 이는 SOLID 원칙을 준수하는 것과 직결된다.

 

7. 📝 전략 패턴의 중요성

  • 객체지향 프로그래밍에서 전략 패턴은 기초적인 개념으로 간주된다.