TearDown과 Dirty #프로그래머들이 알아야 할 두 가지 용어

프로그래밍할 때 종종 사용하는 용어 중 TearDownDirty는 맥락에 따라 다른 의미로 쓰이지만, 각각의 개념은 개발 과정에서 중요합니다. 이번 글에서는 이 두 용어의 의미와 사용 예를 정리해보겠습니다.


TearDown

TearDown은 설정된 상태를 초기화하거나 제거하는 과정을 의미합니다. 이는 특정 작업이 완료된 후 남아 있는 자원을 정리하거나, 테스트 환경을 원래 상태로 복구하는 데 사용됩니다.

예시

Unity의 Test Framework에서 TearDown은 테스트가 끝난 후 실행되는 메서드입니다. 테스트 중 생성된 오브젝트나 데이터를 정리해, 다음 테스트가 영향을 받지 않도록 해줍니다.

using UnityEngine;
using UnityEngine.TestTools;
using NUnit.Framework;

public class TearDownExample
{
    private GameObject testObject;

    [SetUp]
    public void SetUp()
    {
        // 테스트용 GameObject 생성
        testObject = new GameObject("TestObject");
    }

    [Test]
    public void TestGameObject()
    {
        Assert.IsNotNull(testObject);
    }

    [TearDown]
    public void TearDown()
    {
        // 테스트 후 GameObject 삭제
        Object.DestroyImmediate(testObject);
    }
}

Dirty

Dirty는 객체 또는 데이터가 변경된 상태임을 나타냅니다. 이를 통해 필요한 경우 저장, 업데이트, 혹은 리렌더링 등의 작업을 수행합니다.

예시

Unity Editor에서 SetDirty() 메서드를 사용하면 객체가 수정되었음을 표시할 수 있습니다. 이를 통해 변경 사항이 저장되도록 Unity에 알릴 수 있습니다.

using UnityEditor;
using UnityEngine;

public class DirtyExample : MonoBehaviour
{
    public string exampleString;

    void UpdateString(string newValue)
    {
        exampleString = newValue;

        // 변경 사항을 Unity에 알림
        EditorUtility.SetDirty(this);
    }
}

 

그 외에도, Unity는 Scene 파일이 Dirty 상태일 경우 변경 사항이 있음을 표시합니다. Dirty 상태의 씬은 Unity Editor 상단에 *로 표시됩니다.

 

그리고 Dirty Flag Pattern도 자주 사용되는데요.

Dirty 상태를 추적하여 필요할 때만 업데이트를 수행하는 패턴입니다. 예를 들어, UI나 데이터의 변경 사항이 발생했을 때만 렌더링을 업데이트하면 성능을 최적화할 수 있습니다.

public class DirtyFlagExample : MonoBehaviour
{
    private bool isDirty = false;

    private void Update()
    {
        if (isDirty)
        {
            // 변경된 상태 처리
            Debug.Log("Dirty 상태를 처리합니다.");
            isDirty = false; // 상태 초기화
        }
    }

    public void MarkDirty()
    {
        isDirty = true;
    }
}

 


요약: TearDown과 Dirty 

용어 의미 Unity에서의 사용 사례
TearDown 리소스 정리 또는 테스트 후 초기화 Test Framework, 씬 종료 시 리소스 정리
Dirty 변경된 상태를 나타냄 EditorUtility.SetDirty, Dirty Flag Pattern