Home Full Site
C# 11: 파일 로컬 타입 (file access modifier)

C#에 어떤 Type (class, struct, enum 등)에 대한 접근 권한을 제한하기 위해 public, internal, protected, private 등의 access modifier를 사용한다. C# 11 에서 'file' 이라는 새로운 access modifier 키워드가 등장하였다. 'file' access modifier는 한 파일 안에서만 접근할 수 있는 접근 제한자로서, 한 파일 내에서만 사용되는 로컬 타입을 정의할 때 유용하다. 특히, 이 기능은 (Source generator를 통해) 소스 코드를 자동 생성할 때 파일 범위로 타입을 제한해서 다른 파일의 타입과의 타입 충돌을 방지할 때 유용할 수 있다.

예를 들어, 아래 예제처럼 file 접근 제한자를 사용한 클래스 LocalData는 그 파일 내에서만 접근이 허용되고, 다른 파일에서는 그 클래스의 존재를 알지 못한다. 이 말은 다시말해 다른 파일에서 (public 으로) LocalData 클래스를 정의해도 서로 충돌(type name collision)이 발생하지 않는다는 의미이다.


예제

// 파일1.cs : file access modifier 사용.
//        로컬 파일에서만 사용
file class LocalData
{
    public int Id { get; set; }    
    public string Data { get; set; }

    public override string ToString()
    {
        return $"{Id}: {Data}";
    }
}

public class PublicData
{
    public string GetSample()
    {
        var localData = new LocalData { Id = 1, Data = "Test" };
        string data = localData.ToString();
        return data;
    }
}

// 파일2.cs : 동일 클래스명 LocalData에 대해 public 사용.
//         컴파일에 문제 없음
public class LocalData
{
    public int Id { get; set; }
    public string Data { get; set; }
}



© csharpstudy.com