본문 바로가기
유니티 공부/Unity

Unity - using문(using directive , using statement)

by 코딩하는 돼징 2023. 6. 18.
반응형

1. using directive

파일 상단에 namespace를 불러오는데 사용된다.

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

2. using statement

using문을 사용하면 Resource를 사용한 후에 자동으로 정리 및 해제 되므로 메모리 낭비를 방지할 수 있다. using문이 끝나고 해당 객체를 벗어날 때 Dispose 메서드가 호출된다.

using(resource_type resource_variable = resource_initialization)
{
    resource를 사용하는 코드
}

이 코드가 어떻게 자동으로 Dispose메서드가 호출될까?

이는 using문 내부적으로 try-finally 구조로 변환되어 동작하기 때문이다. 아래와 같이 위의 코드는 컴파일러에 의해 다음과 같이 변환된다.

MyResource resource = new MyResource();
try
{
    // 리소스를 사용합니다.
}
finally
{
    // 리소스를 정리합니다.
    if (resource != null)
    {
        resource.Dispose();
    }
}

전체 코드 예시를 통해 더 자세히 알아보자

public class MyResource : IDisposable
{
    public void Dispose()
    {
        // 리소스 해제 코드
        Console.WriteLine("Resource has been disposed.");
    }
}

class Program
{
    static void Main()
    {
        using (MyResource resource = new MyResource())
        {
            // 리소스를 사용합니다.
            Console.WriteLine("Using resource.");
        }
        // using 블록을 벗어나면 자동으로 Dispose가 호출됩니다.
    }
}

그럼 결과가 아래와 같이 나온다.

Using resource.
Resource has been disposed.

파일을 읽어오는 예시코드

파일을 읽거나 쓰는 작업을 위해 FileStream객체를 사용하는 경우 using문을 사용하여 fileStream을 정의하면 이를 사용한 후 using문에서 벗어나면 자동으로 닫히므로 별도로 파일을 닫아주는 코드를 작성할 필요가 없다.

이를 통해 코드가 간소화되고 파일을 안전하게 처리할 수 있다.

static readonly string FILEPATH = Application.persistentDataPath + "/Save.txt";
using (FileStream file = File.Open(FILEPATH, FileMode.Open))
{
    // data는 파일의 크기만큼의 공간을 가지고 있다.
    byte[] data = new byte[file.Length]; // file.Length는 파일의 크기
    file.Read(data, 0, data.Length);
    // data 배열을 UTF-8 인코딩을 사용하여 문자열로 변환
    string text = Encoding.UTF8.GetString(data); 
    
    Console.WriteLine(text);
}

 

반응형

댓글