본문 바로가기

전체 글120

병합 할당 연산자(??=) 이해하기 ??= 연산자는 C#에서 null 병합 할당 연산자라고 부릅니다.C# 8.0 버전부터 추가된 기능으로, 코드를 훨씬 더 간결하게 만들어줍니다.간단히 말하면, 변수가 null이면 값을 할당하고, null이 아니면 아무것도 하지 않는다.이것이 핵심입니다. 이전에는 어떻게 썼나요???= 연산자가 없던 시절에는 이렇게 직접 null 체크를 해야 했습니다.if (legsTipActive == null) { legsTipActive = new List(); } 이 방식도 물론 잘 작동하지만, 간단한 동작을 위해 3줄이나 써야 했습니다. 지금은 어떻게 바뀌었나요?이제 ??= 연산자를 사용하면 한 줄로 같은 작업을 끝낼 수 있습니다.legsTipActive ??= new List(); 짧고, 깔끔하고, 읽기도 .. 2025. 4. 28.
Enum을 활용한 Dictionary 이해하기 enum 은 무엇인가요?C# 에서 enum은 상수들의 집합을 의미합니다. 기본적으로 0부터 숫자가 자동으로 할당되지만, 명확하게 = 0을 지정해주는 것이 좋습니다. 이렇게 하면 배열이나 다른 자료구조와 연동할 때 헷갈릴 위험이 줄어듭니다.enum PlayerState{ Idle = 0, Run, Jump} 위와 같이 작성하면 Idle은 0, Run은 1, Jump는 2의 값을 갖습니다. 특별히 값을 지정하지 않으면 1씩 증가합니다. 문자열로부터 enum 값을 얻는 방법 (Enum.TryParse)문자열을 enum 값으로 변환해야 하는 상황에서는 Enum.TryParse() 메서드를 사용합니다. 예를 들어, "Run"이라는 문자열이 있을 때 이를 PlayerState.Run으로 변환할 수 .. 2025. 4. 28.
코루틴의 한계 : 일시 정지가 불가능한 구조 Unity 코루틴은 흐름을 간단히 제어할 수 있습니다.그러나 기본적으로 "시작"과 "완전 종료"만 지원하며, 중간에 멈췄다가 이어서 실행하는 기능은 존재하지 않습니다. 그 이유는 ? StartCoroutine 으로 생성된 코루틴은 메모리에 "Coroutine Handle"로 관리됩니다.StopCoroutine이나 StopAllCoroutines를 호출하면 이 Handle은 메모리에서 완전히 삭제됩니다.따라서 삭제된 코루틴은 어디까지 실행했는지 정보가 모두 사라지며, 복구할 수 없기 때문입니다. 저장이 불가능한 구조코루틴은 진행 상황을 저장하지 않습니다.도중에 StopCoroutine을 호출하면 그 자리에서 종료되고, 다시 StartCoroutine을 호출하면 항상 처음부터 다시 시작합니다.중간부터 이어서.. 2025. 4. 27.
Unity에서 Enum을 Dictionary로 연결하여 Hierarchy 자식 관리하기 Unity 프로젝트를 진행하다 보면, 게임 오브젝트의 Hierarchy 안에 있는 자식 오브젝트들을 코드로 관리해야 할 때가 많습니다.가장 단순한 방법은 배열([]) 을 사용하여 인덱스 번호(0, 1, 2, ...) 로 오브젝트를 저장하는 것입니다. 하지만 이 방법에는 한 가지 문제점이 있습니다. "인덱스 번호는 의미를 설명하지 못합니다." ( 0이 무슨 상태이고, 1이 무슨 상태인지 숫자만 보고 알기 어렵습니다. )또한 배열 인덱스 대신 enum을 사용하려고 (int)enum 식으로 강제 변환을 하게 되는데, 이 역시 코드 가독성과 유지보수성을 떨어뜨리는 요인이 됩니다. 배열 대신 Dictionary로 구조 개선하기Dictionary 를 사용하면 Enum 값을 키(Key)로, 오브젝트 리스트를 값(Va.. 2025. 4. 27.
대리자를 이용한 FSM 만들기 게임 개발을 하다 보면 캐릭터의 상태를 관리해야 하는 상황이 자주 생깁니다.플레이어가 Idle → Walk → Die 같은 상태를 오가며 행동해야 할 때, 우리는 흔히 FSM (Finite State Machine) 을 사용하게 됩니다.처음에는 대부분 switch-case 방식으로 구현하게 됩니다. 상태 수가 적고, 단순히 Update()만 필요할 때는 이 방식이 가장 쉽고 직관적입니다. 하지만 상태가 점점 늘어나고, 각 상태마다 진입(Enter), 수행(Update), 종료(Exit) 같은 단계가 나뉘기 시작하면 코드는 금세 복잡해지고, 유지보수가 어려워집니다.이럴 때 대리자(delegate)를 활용하면 FSM 구조를 더 유연하고 간결하게 만들 수 있습니다. FSM 구조, 이렇게 구성합니다이번 예제에서.. 2025. 4. 24.
delegate 를 더 간결하게 선언하는 방법 C# 에서 delegate는 함수 자체를 변수처럼 다룰 수 있게 해주는 기능입니다. 이 덕분에 함수 호출을 동적으로 구성할 수 있고, 이벤트나 콜백 처리에 자주 사용됩니다.하지만 직접 delegate 형식을 정의해서 사용하는 방식은 코드가 길어지고 구조가 복잡해 보일 수 있습니다. 전통적인 delegate 방식// delegate 형식 정의private delegate void StateCallback();// delegate 변수 선언private StateCallback onStart;private StateCallback onUpdate;private StateCallback onComplete;// 함수 할당onStart = () => Debug.Log("시작");onUpdate = () => D.. 2025. 4. 23.