Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# 중첩 클래스(Nested Class)란? 개념부터 활용 예제까지

C# 중첩 클래스(Nested Class)란?

중첩 클래스(nested class)란 하나의 클래스 내부에 선언된 또 다른 클래스를 의미합니다. 중첩 클래스는 자신을 감싸고 있는 외부 클래스(바깥 클래스)의 멤버로 취급되며, 반대로 외부 클래스의 멤버라고 해서 중첩 클래스의 멤버에 자동으로 접근할 수 있는 것은 아닙니다. 즉, 두 클래스는 서로 독립적인 멤버 구조를 가집니다.

이러한 특성 때문에 중첩 클래스는 특정 클래스와만 밀접하게 연관되는 보조 타입을 정의할 때 유용하게 사용됩니다. 관련된 타입을 하나의 클래스 안에 묶어두면 코드의 응집도가 높아지고, 불필요한 네임스페이스 오염도 줄일 수 있습니다.

중첩 클래스 선언 및 사용 예제

다음은 C#에서 중첩 클래스를 선언하고 사용하는 기본적인 코드 예제입니다.

class One {
   public int num1;

   public class Two {
      public int num2;
   }
}

class Demo {
   static void Main() {
      One a = new One();
      a.num1++;

      One.Two ab = new One.Two();
      ab.num2++;
   }
}

위 예제에서 Two 클래스는 One 클래스의 선언부 내부에 작성되어 있으므로 중첩 클래스입니다. 중첩 클래스는 일반 클래스처럼 필드, 메서드, 속성 등을 모두 가질 수 있습니다.

접근 한정자와 접근 범위

예제의 Two 클래스에는 public 접근 한정자가 지정되어 있습니다. 덕분에 Two 클래스는 One 클래스의 범위(scope)를 벗어난 곳에서도 접근할 수 있으며, 그 결과 Demo 클래스의 Main 메서드에서 One.Two라는 정규화된 이름(qualified name)으로 인스턴스를 생성할 수 있습니다.

만약 접근 한정자를 private 또는 protected 등으로 지정하면, 해당 중첩 클래스는 외부 클래스 또는 파생 클래스 내부에서만 사용 가능하며 외부에서는 접근할 수 없습니다. 이처럼 접근 한정자를 적절히 활용하면 특정 클래스 내부에서만 사용되는 보조 타입을 효과적으로 캡슐화할 수 있습니다.

정리

  • 중첩 클래스는 다른 클래스 내부에 선언된 클래스로, 외부 클래스의 멤버입니다.
  • 외부 클래스의 멤버가 중첩 클래스의 멤버에 자동으로 접근할 수 있는 것은 아닙니다.
  • public으로 선언하면 외부 클래스 범위 밖에서도 '외부클래스.중첩클래스' 형태로 접근할 수 있습니다.
  • private 등으로 선언하면 캡슐화 효과를 얻어 외부 노출을 막을 수 있습니다.