[assembly: InternalsVisibleTo(string)]

1777 단어 dotnetCsharpCsharp

유니티에서 제공하는 여러 패키지들을 뜯어 관찰하다가 AssemblyInfo.cs 파일에 줄줄이 정의되어있는 어트리뷰트들을 발견했습니다.

using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo("Unity...");

신기하게도 같은 솔루션 내 정의되어있는 어셈블리의 이름을 인수로 넣어주고 있었습니다. 그래서 이게 어떤 역할을 하는지 궁금해져 검색을 해 봅니다.

https://docs.microsoft.com/ko-kr/dotnet/api/system.runtime.compilerservices.internalsvisibletoattribute?view=net-5.0

internal 접근 제한자로 정의된 클래스에 특정한 어셈블리로부터의 접근을 허용하도록 해주는 속성이었습니다. 유니티는 패키지를 다운받아 사용하는 개발자가 수정하길 원치 않는 클래스는 internal로 묶어두고 내부 네임스페이스에서만 사용하도록 제한하고 있습니다.

하지만 패키지별로 어셈블리가 나뉘어야하고, 패키지 내에서도 역할과 플랫폼 의존성에 따라 여러개의 어셈블리로 나뉘기도 할 텐데 internal로 선언하고도 어떻게 사용가능했는지에 대한 의문이 풀렸습니다.

게임 개발자는 대체로 다른 사람의 코드를 이어 사용하고 작성하며 엔드 유저라고 볼 수 있습니다. 게이머에게 소스 코드를 제공하며 수정할 수 있도록 허용하지 않고 있기 때문입니다. 그래서인지 소규모 팀일수록 internalpublic 구분을 크게 하지 않고 public으로 개발하는 케이스가 다수입니다.

팀이 커지고, 사내 공유 프레임워크가 생기고 접근 권한이나 사용 및 상속에 대한 권한을 제한해야 할 때 유용하게 쓸 수 있겠습니다.

좋은 웹페이지 즐겨찾기