반응형

디자인패턴 10

[디자인패턴] 12. 유니티에서 컴포지트 패턴 feat.이터레이터 패턴

이번 챕터에서는 컴포지트 패턴을 이터레이터 패턴에 이어서 같은 주제, monster info와 weapon info로 소개하겠습니다. 컴포지트 패턴의 정의 객체들을 트리구조로 구성하여 부분 - 전체 계층구조를 구현합니다. 컴포지트 패턴을 이용하면 개별객체와 복합객체를 똑같은 방법으로 다룰 수 있게 됩니다. 이전시간에 배운 이터레이터 패턴과 혼합하여 설명하자면 복합객체인 iterator와 개별객체인 item이 구분할 필요가 없어, item을 가진 iterator를 가진 그위에 iterator를 가지는 형태, 즉 트리구조로 복합객체를 만들어갈 수 있습니다. 복합객체와 개별객체가 상속받을 infoComponent를 만들었습니다. 복합객체와 개별객체의 구분을 없애줄 것입니다. public abstract cla..

[디자인 패턴] 11. 유니티에서 이터레이터 패턴

이번에는 이터레이터 패턴, 반복자 패턴입니다. 컬렉션 객체 안에 들어있는 모든 항목에 접근하는 방식이 통일시킨다면 어떤 종류의 집합체에 대해서도 사용할 수 있는 하나의 함수로 모든 컬렉션을 다룰수있게됩니다. 핵심은 다양한 집합체를 하나의 클래스로 상속받아 관리하며 같은 함수로 내부에 접근을 할 수 있다는 것입니다. 넓게보자면 이전에 포스팅했었던 어댑터패턴과 관통하는 부분이 있을 수 있습니다. 2021.09.30 - [게임 개발/디자인 패턴] - [디자인패턴] 9. 유니티에서의 어댑터 패턴 퍼사드 패턴 [디자인패턴] 9. 유니티에서의 어댑터 패턴 퍼사드 패턴 이번 챕터에서는 두개의 패턴이 함께 있어서 같이 작성했습니다. 첫번째로 어댑터 패턴입니다. 어댑터 패턴 정의 한 클래스의 인터페이스를 클라이언트에서 ..

[디자인패턴] 9. 유니티에서의 어댑터 패턴 퍼사드 패턴

이번 챕터에서는 두개의 패턴이 함께 있어서 같이 작성했습니다. 첫번째로 어댑터 패턴입니다. 어댑터 패턴 정의 한 클래스의 인터페이스를 클라이언트에서 사용하고자 하는 다른 인터페이스로 변환합니다. 어댑터를 이용하면 인터페이스 호환성 문제 때문에 같이 쓸 수 없는 클래스들을 연결해서 쓸 수 있습니다. 유니티에서 예시로는 결제모듈을 예시로 들었습니다. 실제로는 문제 없지만 만약에 AOS와 IOS의 결제 함수명이 다를때를 가정하고 구현했습니다. // 결제 어댑터 인터페이스 public interface PurchaseAdapter { void Purchase(); } // AOS 결제 모듈 public class AndroidInApp : PurchaseAdapter { public void Purchase()..

[디자인패턴] 8. 유니티에서의 커맨드 패턴

꿀같은 추석시즌동안 너무 행복하게 쉬었답니다. 추석이 전부 가버리기 전에 지난주에 공부했던 커맨드 패턴에 대해 정리해보겠습니다. 커맨드 패턴 핵심 요청하는 객체와 요청을 수행하는 객체를 분리한다. 커맨드 객체의 Execute()를 호출한다. 작업취소기능도 지원할 수 있다. (구현할때는 사용하지 않았습니다.) 아래 객체지향의 원칙을 따른다. 객체지향의 원칙 바뀌는 부분을 캡슐화한다. 상속보다는 구성을 활용한다. 구현이 아닌 인터페이스에 맞춰서 프로그래밍한다. 서로 상호작용하는 객체사이에서 가능하면 느슨하게 결합하는 디자인을 사용한다. 확장에는 열려있지만 변경에는 닫혀있어야한다. 추상화된것에 의존하라 구상클래스에 의존하지 않도록 한다. 유니티에서 커맨드 패턴 사용 유니티에서 커맨드 패턴을 사용하기 적절한 곳..

[디자인패턴] 7. 유니티에서 데코레이터 패턴

오늘의 디자인 패턴은 데코레이터 패턴입니다. 데코레이터 패턴의 정의는 객체에 추가적인 요건을 동적으로 첨가한다는 것입니다. 그리고 서브클래스를 만드는 것을 통해서 기능을 유연하게 확장할 수 있는 방법을 제공해줍니다. 이번에 핵심적으로 다루는 객체지향 디자인 원칙은 OCP(Open-Closed Principle)으로써 클래스는 확장에 대해서는 열려있어야하며, 코드변경에 대해서는 닫혀있어야 한다는 원칙입니다. 위의 두가지를 고려해보면 어떤 클래스의 추가적인 요건을 동적으로 첨가할때 코드변경에 대해 닫혀있는 방식이 바로 데코레이터 패턴이라고 할수있습니다. 게임을 구현하는데 있어서 그렇게 자주 볼 수 있는 패턴은 아닌 것 같지만 해당패턴을 적용시켜 아이템을 꾸며보았습니다. // 데코레이터 패턴으로 꾸며질 객체 ..

[디자인패턴] 6. 유니티에서 옵저버패턴

오늘 유니티에서 적용해볼 패턴은 '옵저버 패턴'입니다. 옵저버 패턴의 정의는 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들한테 연락이가고 자동으로 갱신되는 방식으로 일대다 의존성을 가집니다. 위의 정의를 유의하면서 게임에서 전투를 통한 체력 표시를 구현해봅시다! 구현하기에 앞서 오늘 패턴의 또다른 중요한 원칙 '느슨한 결합'에 대해서 먼저 정리해봅시다. 옵저버 패턴에서는 주제(Subject)와 옵저버(Observer)가 느슨하게 결합되어있는 객체 디자인 원칙을 제공합니다. 특징 1. 주제가 옵저버에 대해서 아는것은 옵저버가 특정 인터페이스를 구현한다는 것뿐입니다. 2. 옵저버는 언제든지 새로 추가할수있습니다. 3. 새로운 형식의 옵저버를 추가하려고 할때도 주제를 전혀 변경할 필요가 없습니다. ..

[디자인패턴] 03. 유니티에서의 싱글톤(Singleton) 패턴

지난 수요일에 친구들과 디자인패턴에 대해 스터디를 하면서 제 스스로로 잘 알고 사용하고 있으면서도 잘 모르겠는 아리송한 싱글톤 패턴에 대해서 다시 한번 정리하고자 합니다. 저는 예전에 게임을 구현하면서 유니티에서 C#으로 싱글톤으로 어떻게 구현하는지 찾아보면 원하는 스크립트에 static 멤버변수 instance를 선언하여 초기화한 후 다른 씬으로 넘어갈때 계속 유지할수있게 어떤 처리를 해서 계속 사용하는 방법을 자주 볼 수 있었습니다. //// 구글링해서 나오는 대부분의 유니티 싱글톤 느낌 public class GameManager : MonoBehaviour { // instance 멤버변수는 private하게 선언 private static GameManager instance = null; pr..

[Unity C#] 팝업창 만들기 - 빌더패턴의 활용

기존에 포스팅했었던 빌더패턴을 기반으로 유니티에서 가장 기초적인 빌더패턴을 이용한 팝업창을 구현해봤습니다. https://welcomeheesuk.tistory.com/44?category=786876 [디자인패턴]01. 빌더패턴(builder pattern) 빌더 패턴 위키백과: https://ko.wikipedia.org/wiki/%EB%B9%8C%EB%8D%94_%ED%8C%A8%ED%84%B4 1. 빌더패턴 빌더패턴이란 복합객체의 생성과정과 표현방법을 분리하여 동일한 생성절차에서 서로 다른 표현 결과를.. welcomeheesuk.tistory.com 1. 팝업빌더 사용법 1) 원하는 부분에서 팝업빌더를 new로 생성해줍니다. 2) 내부요소들을 세팅해주는 메소드를 호출해줍니다. 3) 마지막에 Bu..

게임 개발/Unity 2019.08.03

[디자인패턴]02. - FSM (Finite State Machine) 유한상태기계

FSM(finite state machine): 유한상태기계 정의유한한 갯수의 상태들로 구성된 기계를 말합니다.특정 객체의 상태를 관리하기위한 패턴입니다.이벤트를 받고 그에 따라 현재상태에서 다음상태로의 전이가 이뤄집니다. 게임에서 npc의 행동AI에 주로 사용됩니다. 특징유한한 수의 상태들만을 가집니다.자신은 하나의 상태만을 가지고 있습니다. 행동을 하나의 객체로 모듈화 하는것을 목표로 합니다.자신의 현재상태를 확인 할수 있어야합니다.외부로부터의 입력, 즉 이벤트를 받습니다. 자신의 현재상태와 받아온 이벤트로 정해진 논리에 따라 자신의 상태를 변경할 수 있습니다. FSM과 statePattern의 차이 상태패턴(stateParrern)은 객체지향 방식으로 상태기계를 구현하는 행위, 디자인패턴을 말합니다..

[디자인패턴]01. 빌더패턴(builder pattern)

빌더 패턴 위키백과: https://ko.wikipedia.org/wiki/%EB%B9%8C%EB%8D%94_%ED%8C%A8%ED%84%B4 1. 빌더패턴 빌더패턴이란 복합객체의 생성과정과 표현방법을 분리하여 동일한 생성절차에서 서로 다른 표현 결과를 만들 수 있게하는 패턴이다. 즉, 어떠한 복합적인 정보를 지녀야할 객체를 생성하는 과정과 각기다른 정보를 표현하여 보여주는것을 분리하여 비슷한 형태를 가졌지만 서로 각기 다른것들을 표현하는 객체를 생성하는 패턴이라고 정리했습니다. 경험적인 예시로 팝업창이 있었습니다. 다른표현을 하지만 형태는 비슷한 이런 팝업창이 그 예시가 되지않을까 생각핬습니다. 호출되는 형식은 아래와 같이 두종류가 될것입니다.// 메소드체이닝을 하지않은 형태 const builder ..

반응형