본문 바로가기
게임 개발(유니티)/멋쟁이 사자처럼 3기_회고록

유니티 디자인패턴_Factory Pattern패턴(2)

by goraku97 2025. 1. 12.

- 추상 팩토리 패턴(Abstract Factory Pattern)

추상 팩토리 패턴은 관련된 객체 그룹을 생성하는 팩토리 클래스를 추상화하여

 클라이언트가 특정 팩토리 구현에 의존하지 않고 객체를 생성할 수 있게 함.

팩토리 클래스 자체를 추상화하여 다양한 구현체를 제공

 

구현도가 복잡하지만, 유연성이 높고, 여러 객체군을 생성하고 관리해야 할 때 많이 사용됨.

추상 팩토리 패턴은, 팩토리를 통해 관련 유닛들의 군(product family)을 관리

 

스크립트 해석

 

Unit1.cs
0.00MB

 

 

Unit 1 스크립트

(유닛 데이터 관리와 행동 정의를 위한 핵심적인 역할)

 

 

SettingDatas3.cs
0.00MB

 

 

SettingDatas3 스크립트

(Soldier(병사) Flight(비행 유닛) 두 가지 유형의 유닛에 대한 기본 속성 값을 저장하는 역할을 수행)

UnitManager.cs
0.01MB

 

 

UnitManager 스크립트

(SoldierFlight을 생성, 관리, 업그레이드하는 기능을 제공)

 

ref :

C#에서 메서드에 인수를 전달할 때, 매개변수는 값에 의한 전달(pass by value)이 기본.

, 메서드 내부에서 매개변수를 수정하더라도, 호출한 쪽의 원본 값은 변하지 않음.

ref 키워드를 사용하면, 매개변수는 참조에 의한 전달(pass by reference)로 처리되며,

메서드 내부에서 매개변수를 수정하면 원본 값이 직접 변경

 

// Soldier1 의 능력치를 상승시키는 메서드
public void Soldier1LevelUp()
{
    foreach (var soldier1 in soldierList1)
    {
        // soldier1 의 Soldier1 컴포넌트를 불러와서 SumState() 메서드르 실행
        soldier1.GetComponent<Soldier1>().SumState();
    }
    // 해당 인수들(ref settingDatas3.soldierLevel, ref settingDatas3.soldierHP, ref settingDatas3.soliderAttackPower)
    // 을  Soldier1DataUpdate 에 전달
    // ref를 사용하면 메서드 내부에서 매개변수의 값을 변환할때, 원본 값도 변경됨.
    Soldier1DataUpdate(ref settingDatas3.soldierLevel, ref settingDatas3.soldierHP, ref settingDatas3.soliderAttackPower);
}


private void Soldier1DataUpdate(ref int lv, ref float hp, ref float attack)
{
    lv += 1;
    hp += 10;
    attack += 1;
}

 

Flight1.cs
0.00MB
Soldier1.cs
0.00MB

 

Flight, Soldier 스크립트

(각 각, StateUpdate InforUnitState 메서드를 구현하여 유닛의 상태 업데이트와 상태 정보를 반환하는 기능을 제공)

 

Abstract Factory GameManager.cs
0.01MB

 

AbstractFactoryPattern 스크립트

(유닛 클릭 시 상태를 UI에 표시하고, 상태 창을 닫을 수 있는 기능을 제공)