C++에서는 기본 데이터 타입을 감싸는 클래스를 만들어 Wrapper Class처럼 사용할 수 있다.
1. Wrapper Class 정의 및 기본 사용
#include <iostream>
class Integer {
private:
int value;
public:
// 생성자
Integer(int v) : value(v) {}
// 값을 가져오는 메서드
int getValue() const {
return value;
}
// 값을 설정하는 메서드
void setValue(int v) {
value = v;
}
};
int main() {
Integer obj(10); // 기본 타입 int를 감싸는 Wrapper Class 객체 생성
std::cout << "Value: " << obj.getValue() << std::endl;
obj.setValue(20);
std::cout << "Updated Value: " << obj.getValue() << std::endl;
return 0;
}
2. Auto-Boxing과 Unboxing 구현
- C++에서는 연산자 오버로딩을 사용하여 Java의 Auto-Boxing/Unboxing처럼 자연스러운 사용이 가능하다.
#include <iostream>
class Integer {
private:
int value;
public:
// 생성자
Integer(int v) : value(v) {}
// 타입 변환 연산자 (Unboxing 역할)
operator int() const {
return value;
}
// 값을 가져오는 메서드
int getValue() const {
return value;
}
// 값을 설정하는 메서드
void setValue(int v) {
value = v;
}
};
int main() {
Integer obj(10); // Auto-Boxing
int number = obj; // Unboxing (타입 변환 연산자 사용)
std::cout << "Boxed Value: " << obj.getValue() << std::endl;
std::cout << "Unboxed Value: " << number << std::endl;
obj.setValue(30);
std::cout << "Updated Boxed Value: " << obj.getValue() << std::endl;
return 0;
}
3. Wrapper Class와 STL 컨테이너 사용
- STL 컨테이너(vector, list 등)에 기본 데이터 타입 대신 Wrapper Class를 저장할 수 있다.
#include <iostream>
#include <vector>
class Integer {
private:
int value;
public:
Integer(int v) : value(v) {}
int getValue() const {
return value;
}
void setValue(int v) {
value = v;
}
};
int main() {
std::vector<Integer> numbers;
// Wrapper Class 객체 추가
numbers.emplace_back(10);
numbers.emplace_back(20);
// Wrapper Class 객체 값 출력
for (const auto& num : numbers) {
std::cout << "Value: " << num.getValue() << std::endl;
}
return 0;
}
4. Wrapper Class에 유용한 메서드 추가
- C++에서는 데이터 변환, 비교 연산 등을 메서드로 제공하여 Wrapper Class를 확장할 수 있다.
#include <iostream>
#include <string>
class Integer {
private:
int value;
public:
Integer(int v) : value(v) {}
// 값을 가져오기
int getValue() const {
return value;
}
// 값을 문자열로 변환
std::string toString() const {
return std::to_string(value);
}
// 최대값과 최소값 상수 제공
static int getMaxValue() {
return INT32_MAX;
}
static int getMinValue() {
return INT32_MIN;
}
};
int main() {
Integer obj(42);
std::cout << "Value: " << obj.getValue() << std::endl;
std::cout << "As String: " << obj.toString() << std::endl;
std::cout << "Max Value: " << Integer::getMaxValue() << std::endl;
std::cout << "Min Value: " << Integer::getMinValue() << std::endl;
return 0;
}
C++에서 Wrapper Class 사용의 장점
- 객체 지향성 활용: 데이터와 메서드를 결합하여 캡슐화된 구조를 제공.
- 유연성: STL 컨테이너와의 호환성, 타입 변환 연산자를 통한 자연스러운 사용 가능.
- 확장성: 추가 메서드를 통해 다양한 기능을 제공 가능.
C++에서 Wrapper Class 사용의 단점
- 성능 비용: 기본 데이터 타입에 비해 Wrapper Class는 메모리와 연산 비용이 증가.
- 복잡성 증가: 단순한 데이터 처리에 불필요한 클래스를 도입하면 코드가 복잡해질 수 있음.
C++에서는 Wrapper Class를 구현하여 기본 데이터 타입을 객체로 다룰 수 있다. 이 방식은 객체 지향 프로그래밍과 유틸리티 메서드가 필요한 경우 유용다. 하지만 성능 비용을 고려하여 필요한 경우에만 사용하는 것이 좋다.
'Study > C++' 카테고리의 다른 글
String 클래스의 구조와 friend 선언을 통한 연산자 오버로딩의 출력 (0) | 2024.10.23 |
---|---|
Smart Pointer (0) | 2024.10.20 |
[C++] Header File (0) | 2023.10.22 |
[C++] Exception (0) | 2023.10.15 |
[C++] Template (0) | 2023.10.15 |