250116 - Program은 왜 internal class일까

LIHA·약 15시간 전
post-thumbnail

class는 알겠는데 internal class는 뭔가요

.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 취급.

전부터 궁금했던 것 - 그러고보니 dll은 뭔가요

위에서 using System; 을 하고있기 때문에 Console.WriteLine()을 쓸때 System.Console.~ 이라고 쓰지 않아도 되는 것이다. 이때 System은 정확히는 System.dll이라고 한다. 또한 빌드하면 dll과 exe가 생기는데 exe는 실행 파일이고... dll은 뭘까?

동적 링크 라이브러리(Dynamic Link Library) 파일.

profile
갑자기 왜 춤춰?

0개의 댓글