250414

lililllilillll·2025년 4월 14일

개발 일지

목록 보기
141/350

✅ What I did today


  • 헤드 퍼스트 디자인 패턴
  • Project Katana
  • Art Practice


📝 Things I Learned


🏷️ Singleton

  • 싱글톤으로 만들고 의존성 주입하면 단점 일부 해소된다
using UnityEngine;

public class Singleton<T> : MonoBehaviour where T : MonoBehaviour
{
    public static T Instance { get; private set; }

    protected virtual void Awake()
    {
        if (Instance == null)
        {
            Instance = this as T;
        }
        else if (Instance != this)
        {
            Destroy(gameObject);
        }
    }
}

Unity에서 싱글톤은 굳이 FindWithTag 뭐 이런걸로 새로 안 찾아도 된다.



📖 헤드 퍼스트 디자인 패턴


Chapter 7 ~ 9

어댑터 패턴 : 인터페이스 바꿔치기. 형식 맞춰주기 위해 메서드를 택갈이한다.
퍼사드 패턴 : 여러 클래스 명령 묶은 메서드들 담은 클래스

템플릿 메소드 패턴 : 여러 메서드를 묶은 메서드 중에 일부는 추상 메서드로 둬서 서브 클래스에 따라 다르게 작동하도록 한다. 행동이 더 분화하면 hook라는 걸로 if문 분기 처리할 수도 있다. 추상 메소드 구현 일일이 해야해서 좀 번거로운 상황이 많이 나오긴 할듯.

반복자 패턴 : 여러 컬렉션 자료형에 접근할 때 hasnext(), next() 이런 걸로 추상화

컴포지트 패턴 : 트리 구조로 객체를 구성한다. 자식 있는 노드랑 없는 노드를 똑같이 다룬다. 필요하면 자식 순회하면서 자식 동작들 실행할 수도 있고, 자식 추가하거나 편집할 수도 있다. 자식에 아무 의미 없는 메소드 생길수도 있다.



🎮 Project Katana


FSM 구현함

  • FSM에서 생성자에 자신의 인스턴스 안 넣어놓는 이유 : 상태 인스턴스를 돌려 쓰려고. 근데 객체 적으면 굳이 복잡성 늘리면서까지 쥐꼬리만큼 메모리 아낄 이유 없을듯.
    public void Attack()
    {
        if (Time.time >= lastAttackTime + attackCooldown)
        {
            print("공격");
            lastAttackTime = Time.time;
        }
    }

코루틴 안 쓰고도 간격 조절할 수 있다



🎨 Art Practice




profile
너 정말 **핵심**을 찔렀어

0개의 댓글