
.NET Framework로 C# 기초를 하다보니 문득 궁금해진 부분이 있었다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace InflearnConsoleApp
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("글자를 찍어봅시다");
}
}
}
뼈대 코드가 이런 식으로 구성되는 것이다. 그냥 class는 알겠는데 internal class는 뭐란 말인가. 참고 블로그를 보며 이런 궁금증을 나만 가진 건 아니구나 느낄 수 있었다. 내가 아는 접근제어자는 JAVA에서 나온 것인데 private, default(package-private), protected, public 이었다. 기억을 되살릴 겸 이들의 범위가 어디인지도 적어보자.
JAVA의 접근제어자 별 사용가능 범위
- private - 같은 클래스 내에서만
- package-private - 같은 패키지 내
- protected - 같은 패키지 및 다른 패키지 내 상속받은 클래스 내
- public - Anywhere!
그래서 internal은 무슨 접두어일까 궁금했는데, 하나의 어셈블리 단위 내에서만 접근을 허용한다고 한다. 어셈블리 단위...? 🤔
어셈블리: 프로그램 기본 단위. 빌드시 생성되는 dll 및 exe 파일
그래서 internal이 붙은 멤버는 같은 어셈블리 코드에서만 사용할 수 있다고. 동일 어셈블리에서는 public 취급, 다른 어셈블리에서는 private 취급.
위에서 using System; 을 하고있기 때문에 Console.WriteLine()을 쓸때 System.Console.~ 이라고 쓰지 않아도 되는 것이다. 이때 System은 정확히는 System.dll이라고 한다. 또한 빌드하면 dll과 exe가 생기는데 exe는 실행 파일이고... dll은 뭘까?
동적 링크 라이브러리(Dynamic Link Library) 파일.