중첩 클래스(Nested Class)란 다른 클래스 내부에 선언된 클래스를 의미합니다. 중첩 클래스는 외부 클래스(바깥 클래스)의 멤버 변수처럼 취급되며, 해당 클래스의 다른 멤버들과 동일한 접근 권한을 가집니다.
다만 주의할 점이 있습니다. 외부 클래스의 멤버 함수라고 해서 중첩 클래스의 멤버에 특별한 접근 권한을 갖는 것은 아닙니다. 즉, 중첩 클래스의 private 멤버에 접근하려면 일반적인 접근 규칙을 그대로 따라야 합니다.
C++ 중첩 클래스 예제 코드
다음은 C++에서 중첩 클래스를 사용하는 방법을 보여주는 프로그램입니다.
#include<iostream>
using namespace std;
class A {
public:
class B {
private:
int num;
public:
void getdata(int n) {
num = n;
}
void putdata() {
cout<<"The number is "<<num;
}
};
};
int main() {
cout<<"Nested classes in C++"<< endl;
A :: B obj;
obj.getdata(9);
obj.putdata();
return 0;
}실행 결과
Nested classes in C++ The number is 9
코드 상세 분석
1. 중첩 클래스 정의 부분
위 프로그램에서는 클래스 B가 클래스 A 내부에 정의되어 있으므로, B는 중첩 클래스입니다. 클래스 B는 private 멤버 변수 num과 두 개의 public 멤버 함수 getdata(), putdata()를 포함하고 있습니다.
- getdata(int n): 매개변수로 전달받은 값을 멤버 변수 num에 저장합니다.
- putdata(): 저장된 num 값을 화면에 출력합니다.
class A {
public:
class B {
private:
int num;
public:
void getdata(int n) {
num = n;
}
void putdata() {
cout<<"The number is "<<num;
}
};
};2. main() 함수에서의 객체 생성 및 사용
main() 함수에서는 범위 지정 연산자(::)를 사용하여 A::B obj;와 같이 중첩 클래스 B의 객체를 생성합니다. 이처럼 중첩 클래스는 외부 클래스 이름 뒤에 ::를 붙여 접근해야 합니다.
객체 생성 후에는 obj를 통해 getdata() 함수로 값을 저장하고, putdata() 함수로 값을 출력합니다.
cout<<"Nested classes in C++"<< endl; A :: B obj; obj.getdata(9); obj.putdata();
중첩 클래스 활용 시 참고 사항
- 중첩 클래스는 관련성이 높은 타입을 하나의 클래스 스코프 안에 묶어 코드 구조를 깔끔하게 유지하는 데 유용합니다.
- 중첩 클래스 자체는 외부 클래스의 멤버 변수나 함수에 자동으로 접근할 수 없으며, 필요한 경우 포인터나 참조를 통해 접근해야 합니다.
- 반대로 외부 클래스도 중첩 클래스의 private 멤버에 직접 접근할 수 없으므로, public 인터페이스를 통해 상호작용하는 것이 좋습니다.