본문 바로가기

전체 글120

Destroy()의 동작 방식 유니티에서 Destroy(obj);를 호출하면 즉시 메모리에서 삭제되는 것이 아닙니다. 이 함수는 단순히 "삭제 예정" 태그를 붙이는 역할만 합니다.메모리에서 실제로 삭제되는 시점은 C#의 Garbage Collector(GC)가 필요 없다고 판단한 이후입니다. 이 때문에 몇 가지 사항만 잘 이해하면 더 안전하고 효율적으로 Destroy()를 사용할 수 있습니다.  Destroy()는 즉시 삭제되지 않는다Destroy(obj);Debug.Log(obj); // 여전히 참조 가능 (하지만 삭제 예정) Destroy()를 호출해도 obj는 즉시 null이 되지 않고, 여전히 리스트에 남아 있을 수도 있습니다.단지 "삭제 예정(Destroyed)" 태그가 붙을 뿐, 실제 메모리 해제는 나중에 GC가 처리합니다.. 2025. 3. 16.
람다 표현식을 사용할 때 헤깔리는 이유 C# 에서는 람다 표현식을 활용하여 속성(Property)과 메서드(Method)를 간결하게 표현할 수 있습니다. 하지만 둘은 형태가 매우 유사해 보이기 때문에 혼동할 수 있습니다. 이 글에서는 람다 표현식을 사용한 속성과 메서드의 차이를 살펴보고, 언제 어떤 방식을 사용하는 것이 적절한지 알아보겠습니다. 람다 표현식을 사용한 속성과 메서드다음 두 코드를 비교해 보겠습니다.class Example { public int Age => 30; // 속성 (Property) public int Age() => 30; // 메서드 (Method)} 하나는 속성이고 하나는 함수입니다.람다 표현식으로 코드를 축약했기 때문에 언뜻 보면 비슷해서 헷갈릴 수 있습니다.하지만 자세히 보면 괄호 () 의 유무로.. 2025. 3. 15.
delegate 를 기반으로 한 상태 기계 구현해보기 C#에서 상태 기계를 구현할 때, if-else 또는 switch-case 문을 사용하는 방식보다 델리게이트(delegate)를 활용하면 코드의 가독성과 유지보수성이 훨씬 좋아집니다.이 글에서는 델리게이트를 활용한 상태 기계 구현 방법을 설명하고, 자기 클래스 내부에서 직접 상태를 변경하는 구조를 적용하는 방법을 소개하겠습니다.  상태 기계 (State Machine) 란?상태 기계는 프로그램이 특정 상태 (State) 를 가지며, 조건에 따라 다른 상태로 전환되는 구조를 의미합니다. 게임 개발에서 자주 사용되며, 플레이어의 행동, UI 상태, AI 동작 등을 관리하는 데 유용합니다. 상태 기계를 사용하는 이유* if-else 또는 switch-case 문을 줄여 코드의 가독성을 높일 수 있습니다.* 상.. 2025. 3. 12.
유니티 Coroutin 에서 continue 를 쓸 때 주의할 점 유니티에서 코루틴을 사용할 때 continue 와 yield return 의 차이를 이해하는 것은 매우 중요합니다. 특히 while (true) 같은 무한 루프를 사용할 때, continue 만 사용하면 예상치 못한 성능 저하가 발생할 수 있습니다. 아래와 같은 코드를 살펴보겠습니다.private IEnumerator SpawnColumn(){ WaitForSeconds wait = new(GameData.PipeSpawnTime); while (true) { if (!GameManager.Instance.IsGameActive) continue; Instantiate(pipesPrefab, transform.position, Quaternio.. 2025. 3. 12.
필드 (Field) 와 속성 (Property) 에 대해서 C# 에서 객체의 데이터를 저장하는 방법으로 필드(Field) 와 속성(Property) 이 있습니다.두 개념은 비슷해 보이지만, 실제로는 중요한 차이점이 있으며, 속성을 사용하는 이유도 분명합니다.이 글에서는 둘 간의 차이 그리고 더 나아가 람다 표현식으로 표현하는 방법까지 알아보도록 하겠습니다. 필드 (Field) 란?필드는 클래스 내부에서 데이터를 저장하는 가장 기본적인 방법입니다. 보통 private 접근 제한자로 선언하여 외부에서 직접 접근할 수 없도록 합니다. 이렇게 하면 객체 내부에서만 값을 조작할 수 있어 보호가 가능하지만, 다른 코드에서 값을 변경하거나 읽으려면 별도의 메서드를 구현해야 합니다.예를 들어, name이라는 필드를 직접 사용하면 외부에서 값을 가져오거나 변경할 수 없습니다. .. 2025. 3. 11.
UIManager를 활용한 효율적인 UI 업데이트 구조 게임을 개발할 때 UI 업데이트를 어떻게 관리할 것인가 하는 문제는 매우 중요합니다.초기에는 UI 요소가 적기 때문에 간단한 싱글톤 UIManager로도 충분하지만, 게임이 점점 커지면서 UI 요소가 늘어나면 유지보수가 어려워질 수 있습니다.이번 글에서는 기본적인 UIManager 방식부터 시작해, UI 요소가 많아질 때의 문제점과 이를 해결하는 이벤트 기반 UI 업데이트 방식까지 차근차근 살펴보겠습니다. UIManager 를 활용한 기본적인 UI 관리 방식일반적으로 UI를 업데이트할 때, FindObjectOfType() 을 사용해서 UI 요소를 찾거나, 싱글톤 UIManager를 활용하는 방식이 많이 사용됩니다. 여기서는 싱글톤 UIManager를 활용하는 기본적인 예제를 먼저 살펴보겠습니다.usi.. 2025. 3. 11.