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

C++ 익명 클래스 완전 정복: 개념, 특징부터 실전 예제까지

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++의 익명 클래스는 한 번만 사용할 간단한 객체를 빠르게 만들 때 유용할 수 있지만, 이름이 없다는 특성상 재사용성이 떨어지고 함수 인자나 반환값으로 활용할 수 없다는 제약이 있습니다. 따라서 실무에서는 명시적으로 이름을 가진 클래스를 정의하는 것이 일반적이며, 익명 클래스는 그 특성과 한계를 이해한 상태에서 목적에 맞게 선택적으로 사용하는 것이 좋습니다.