C# 중첩 클래스란?
중첩 클래스(Nested Class)는 다른 클래스 내부에 선언된 클래스를 의미합니다. 중첩 클래스는 자신을 감싸고 있는 외부 클래스(바깥 클래스)의 멤버로 취급되지만, 외부 클래스의 멤버라고 해서 중첩 클래스의 멤버에 자동으로 접근할 수 있는 것은 아닙니다. 즉, 두 클래스는 각각 독립적인 멤버 구조를 가집니다.
이러한 특성 덕분에 중첩 클래스는 특정 클래스와만 긴밀하게 연관된 보조 타입을 정의할 때 유용하게 활용됩니다.
중첩 클래스 예제 코드
다음은 C#에서 중첩 클래스를 선언하고 사용하는 기본적인 예제입니다.
class One {
public int val1;
public class Two {
public int val2;
}
}
class Demo {
static void Main() {
One a = new One();
a.val1++;
One.Two ab = new One.Two();
ab.val2++;
}
}코드 설명
위 예제에서 Two 클래스가 바로 중첩 클래스입니다. Two 클래스는 One 클래스의 선언 블록 내부에 포함되어 있으며, 이처럼 외부 클래스 안에 선언된 클래스를 중첩 클래스라고 부릅니다.
접근 한정자와 접근 범위
여기서 주목할 점은 Two 클래스가 public 접근 한정자를 가지고 있다는 것입니다. public으로 선언되었기 때문에 One 클래스의 범위(scope) 밖에서도 접근할 수 있으며, 실제로 Demo 클래스의 Main 메서드에서 One.Two 형태로 참조하여 인스턴스를 생성하고 있습니다.
반대로 중첩 클래스를 private으로 선언하면 외부 클래스 내부에서만 사용할 수 있으므로, 외부에 노출하고 싶지 않은 내부 전용 타입을 캡슐화하는 데 효과적입니다.
중첩 클래스를 사용하면 좋은 경우
- 강한 결합 관계: 해당 클래스가 오직 하나의 외부 클래스에서만 사용될 때
- 캡슐화 강화: 내부 구현 세부사항을 외부로부터 숨기고 싶을 때
- 코드 구조화: 논리적으로 연관된 타입을 하나의 이름 공간 아래 묶어 가독성을 높이고 싶을 때
이처럼 C#의 중첩 클래스는 단순히 클래스 안에 클래스를 넣는 문법적 기능을 넘어, 접근 제어와 코드 구조 설계 측면에서 실질적인 이점을 제공합니다.