Study/TIL(Today I Learned)

24.09.02 CS, 언리얼

에린_1 2024. 9. 2. 19:18
728x90

CS

팩토리 메서드(Factory Method)

  • 팩토리 메소드 패턴은 객체 생성을 공장 클래스로 캡슐화 처리하여 대신 생성하게 하는 생성 디자인 패턴이다.
  • 즉, 클라이언트에서 직접 new 연산자를 통해 제품 객체를 생성하는 것이 아닌, 제품 객체들을 도맡아 생성하는 공장 클래스를 만들고, 이를 상속하는 서브 공장 클래스의 메서드에서 여러가지 제품 객체 생성을 각각 책임지는 것이다.
  • 또한 객체 생성에 필요한 과정을 템플릿처럼 미리 구성해놓고, 객체 생성에 관한 전처리나 후처리를 통해 생성 과정을 다양하게 처리하여 객체를 유연하게 정할 수 있는 특징도 있다.

팩토리 메서드 패턴 구조

  • Creator
    • 최상위 공장 클래스로서, 팩토리 메서드를 추상화하여 서브 클래스로 하여금 구현하도록 한다.
      • 객체 생성 처리 메서드(someOperation): 객체 생성에 관한 전처리, 후처리를 템플릿화한 메소드
      • 팩토리 메서드(createProduct): 서브 공장 클래스에서 재정의할 객체 생성 추상 메서드
  • ConcreteCreator
    • 각 서브 공장 클래스들은 이에 맞는 제품 객체를 반환하도록 생성 추상 메소드를 재정의한다. 즉, 제품 객체 하나당 그에 걸맞는 생상 공장 객체가 위치된다.
  • Product
    • 제품 구현체를 추상화
  • ConcreteProduct
    • 제품 구현체
  • 정리하자면 팩토리 메소드 패턴은 객체를 만들어내는 공장을 만드는 패턴이라고 보면 된다. 그리고 어떤 클래스의 인스턴스를 만들지는 미리 정의한 공장 서브 클래스에서 결정한다.
  • 객체간의 결합도가 낮아지고 유지보수에 용이해진다.

팩토리 메서드 패턴 특징

  • 패턴 사용 시기
    • 클래스 생성과 사용의 처리 로직을 분리하여 결합도를 낮추고자 할 때
    • 코드가 동작해야 하는 객체의 유형과 종속성을 캡슐화를 통해 정보 은닉 처리 할 경우
    • 라이브러리 혹은 프레임워크 사용자에게 구성 요소를 확장하는 방법을 제공하려는 경우
    • 기존 객체를 재구성하는 대신 기존 객체를 재사용하여 리소스를 절약하고자 하는 경우
  • 패턴 장점
    • 생성자(Creator)와 구현 객체(concrete product)의 강한 결합을 피할 수 있다.
    • 팩토리 메서드를 통해 객체의 생성 후 공통으로 할 일을 수행하도록 지정해줄 수 있다.
    • 캡슐화, 추상화를 통해 생성되는 객체의 구체적인 타입을 감출 수 있다.
    • 단일 책임 원칙 준수
    • 개방/폐쇄 원칙 준수
    • 생성에 대한 인터페이스 부분과 생성에 대한 구현 부분을 따로 나뉘었기 때문에 패키지 분리하여 개별로 여러 개발자가 협업을 통해 개발
  • 패턴 단점
    • 각 제품 구현체마다 팩토리 객체들을 모두 구현해주어야 하기 때문에, 구현체가 늘어날때 마다 팩토리 클래스가 증가하여 서브 클래스 수가 폭발한다.
    • 코드의 복잡성이 증가한다.

Factory Method 변형 패턴

  • Enum Factory Method 패턴
    • 팩토리 클래스를 자바 Enum으로 구성한 패턴이다.
  • Dinamic Factory 패턴
    • 팩토리 메서드 패턴의 큰 단점은 제품 객체의 갯수마다 공장 서브 클래스를 모두 구현해야되서 클래스 폭발이 일어날 수 있다는 점인데, 이를 Reflection API를 이용해 동적으로 처리하여 서브 클래스 폭발을 막는 패턴이다.

언리얼

언리얼 에디터 개요

  • 언리얼 엔진의 핵심 도구는 언리얼 에디터(Unreal Editor)이다. 에디터는 다음과 같은 주요 구성 요소로 이루어져 있다.

뷰포트(Viewport)

  • 게임 세계를 실시간으로 볼 수 있는 창이다. 사용자는 이곳에서 오브젝트를 배치하고, 이동시키고, 회전하거나 크기를 조절할 수 있다.

아웃라이너(Outliner)

  • 현재 레벨에 있는 모든 오브젝트의 계층 구조를 보여준다. 사용자는 오브젝트를 선택하거나 계층 구조를 변경할 수 있다.

디테일 패턴(Details Panel)

  • 선택한 오브젝트의 속성(properties)을 수정할 수 있는 패널이다.

콘텐츠 브라우저(Content Browser)

  • 프로젝트 내 모든 에섯(asset)을 관리할 수 있는 창이다. 여기에서 텍스처, 모델, 사운드, 블루프린트 등을 찾아서 사용할 수 있다.

블루프린트 시스템

  • 언리얼 엔진은 프로그래밍 없이 로직을 작성할 수 있는 비주얼 스크립팅 시스템인 블루프린트(Blueprint)를 제공한다. 블루프린트는 노드 기반의 스크립트로, 각 노드는 특정한 기능이나 동작을 수행한다. 블루프린트는 다음과 같은 유형이 있다.

레벨 블루프린트(Level Blueprint)

  • 특정 레벨에서의 로직을 정의하는 데 사용된다.

클래스 블루프린트(Class Blueprint)

  • 객체 지향 프로그래밍 개념을 기반으로하여 새로운 클래스나 오브젝트 유형을 정의할 수 있다.

애니메이션 블루프린트(Animation Blueprint)

  • 캐릭터 애니메이션 로직을 정의하는 데 사용된다.

C++ 프로그래밍

  • 언리얼 엔진은 C++ 언어를 기본으로 사용한다. 블루프린트는 초보자에게 좋은 선택이지만, 더 복잡하고 성능이 중요한 기능을 구현하려면 C++로 코드를 작성해야 한다. C++ 코드와 블루프린트는 상호 운용될 수 있다.

레벨 디자인과 월드 구축

  • 레벨 디자인은 게임 개발의 중요한 부분이며, 언리얼 엔진에서는 다음과 같은 도구를 통해 쉽게 레벨을 만들 수 있다.

브러시(Brush)

  • 기본적인 형태(큐브, 구, 원기둥 등)를 만들고, 이를 사용해 지형이나 구조를 구축할 수 있다.

메시(Mesh)

  • 3D 모델로, 게임 세계의 대부분의 정적 오브젝트를 정의한다. 언리얼 엔진에서는 스태틱 메쉬(Static Mesh)와 스켈레탈 메쉬(Skeletal Mesh)를 사용할 수 있다.

라이트(Light)

  • 게임 세계에 빛을 추가할 수 있다. 포인트 라이트(Point Light), 스포트 라이트(Spot Light), 디렉셔널 라이트(Directional Light) 등 다양한 종류의 라이트가 제공된다.

랜드 스케이프(Landscape)

  • 대규모의 지형을 만들기 위한 도구이다. 산, 언덕, 계곡 등을 만들고, 텍스처를 입힐 수 있다.

물리와 충돌

  • 언리얼 엔진은 물리 엔진을 내장하고 있어, 오브젝트 간의 충돌, 중력, 물리적 상호 작용 등을 쉽게 구현할 수 있다. 물리 기능을 추가하려면 오브젝트에 콜리전(Collision) 컴포넌트를 추가하고, 물리 시뮬레이션(Physics Simulation)을 활성화하면 된다. 각 오브젝트는 여러 종류의 충돌체(콜리전)를 가질 수 있으며, 이를 통해 물리적 상호작용을 제어한다.
728x90

'Study > TIL(Today I Learned)' 카테고리의 다른 글

24.09.04 CS, C++  (0) 2024.09.04
24.09.03 CS, C++  (0) 2024.09.03
24.08.30 CS, C++  (0) 2024.08.30
24.08.29 CS, C++  (0) 2024.08.29
24.08.27 CS, C++  (0) 2024.08.27