C++ 익명 클래스란?
프로그래밍에서 이름 없이 정의된 모든 것을 '익명(anonymous) 엔티티'라고 부릅니다. 마찬가지로 C++에서 이름이 지정되지 않은 클래스를 익명 클래스(Anonymous Class)라고 합니다. 익명 클래스는 하나의 기본적인 속성을 지닌 특수한 형태의 클래스입니다.
익명 클래스의 주요 특징
- 생성자가 존재하지 않음: 클래스에 이름이 없기 때문에 생성자(constructor)가 할당되지 않습니다. 대신 소멸자(destructor)는 존재하여 메모리 블록 해제 역할을 수행합니다.
- 함수와 함께 사용할 수 없음: 익명 클래스는 함수의 구성 요소로 활용될 수 없습니다. 즉, 함수의 인자(argument)로 전달하거나 함수가 반환한 값을 받아들이는 데 사용할 수 없습니다.
익명 클래스 정의 문법
C++에서 익명 클래스를 정의하는 기본 문법은 다음과 같습니다. 일반적인 클래스 선언과 동일하지만, 클래스 이름이 생략되고 바로 뒤에 객체를 선언한다는 점이 특징입니다.
class {
// 데이터 멤버
// 멤버 함수
} 객체이름;예제 1: 단일 객체 생성 및 사용하기
먼저 익명 클래스를 정의하고, 해당 클래스의 객체를 하나 선언한 뒤 이를 통해 클래스 멤버에 접근하는 방법을 살펴보겠습니다.
코드 예시
#include <iostream>
using namespace std;
class {
int value;
public:
void setData(int i) {
this->value = i;
}
void printvalues() {
cout << "Value : " << this->value << endl;
}
} obj1;
int main() {
obj1.setData(10);
obj1.printvalues();
return 0;
}실행 결과
Value : 10
위 코드에서는 클래스 이름 없이 곧바로 obj1이라는 객체를 선언했습니다. 이처럼 익명 클래스는 정의와 객체 생성이 동시에 이루어집니다.
예제 2: 두 개의 객체 생성 및 사용하기
익명 클래스도 여러 개의 객체를 만들어 코드에서 활용할 수 있습니다. 아래 프로그램은 두 개의 객체를 선언하고 각각 사용하는 방식을 보여줍니다.
코드 예시
#include <iostream>
using namespace std;
class {
int value;
public:
void setData(int i) {
this->value = i;
}
void print() {
cout << "Value : " << this->value << endl;
}
} obj1, obj2;
int main() {
cout << "Object 1 \n";
obj1.setData(10);
obj1.print();
cout << "Object 2 \n";
obj2.setData(12);
obj2.print();
return 0;
}실행 결과
Object 1 Value : 10 Object 2 Value : 12
실행 결과를 보면 각 객체가 독립적으로 데이터를 저장하고 출력하는 것을 확인할 수 있습니다. obj1에는 10이, obj2에는 12가 저장되어 서로 다른 값을 유지합니다.
마무리 정리
C++의 익명 클래스는 한 번만 사용할 간단한 객체를 빠르게 만들 때 유용할 수 있지만, 이름이 없다는 특성상 재사용성이 떨어지고 함수 인자나 반환값으로 활용할 수 없다는 제약이 있습니다. 따라서 실무에서는 명시적으로 이름을 가진 클래스를 정의하는 것이 일반적이며, 익명 클래스는 그 특성과 한계를 이해한 상태에서 목적에 맞게 선택적으로 사용하는 것이 좋습니다.