C++ 열거형을 문자열로 매핑하기
C++에서는 열거형(enum) 데이터를 문자열로 직접 변환해 주는 내장 함수가 제공되지 않습니다. 하지만 우리가 직접 변환 함수를 만들어 이 문제를 해결할 수 있습니다.
가장 일반적인 방법은 열거형 값을 인수로 받아 switch 문으로 각 값에 대응하는 문자열을 반환하는 함수를 작성하는 것입니다. 아래 예제를 통해 자세히 살펴보겠습니다.
예제 코드
#include <iostream>
using namespace std;
enum Animal {Tiger, Elephant, Bat, Dog, Cat, Mouse};
string enum_to_string(Animal type) {
switch(type) {
case Tiger:
return "Tiger";
case Elephant:
return "Elephant";
case Bat:
return "Bat";
case Dog:
return "Dog";
case Cat:
return "Cat";
case Mouse:
return "Mouse";
default:
return "Invalid animal";
}
}
int main() {
cout << "The Animal is : " << enum_to_string(Dog) << " Its number: " << Dog << endl;
cout << "The Animal is : " << enum_to_string(Mouse) << " Its number: " << Mouse << endl;
cout << "The Animal is : " << enum_to_string(Elephant) << " Its number: " << Elephant;
}실행 결과
The Animal is : Dog Its number: 3 The Animal is : Mouse Its number: 5 The Animal is : Elephant Its number: 1
코드 설명
위 코드에서 enum_to_string() 함수는 Animal 타입의 열거형 값을 매개변수로 받습니다. 그리고 switch 문을 사용하여 전달된 열거형 값과 일치하는 case를 찾은 뒤, 해당하는 동물 이름을 문자열 형태로 반환합니다.
열거형 멤버는 별도의 값을 지정하지 않으면 기본적으로 0부터 시작하는 정수값을 갖습니다. 따라서 Dog는 3, Mouse는 5, Elephant는 1의 정수값을 출력하게 됩니다. 또한 default 구문을 추가하여 유효하지 않은 값이 들어올 경우에도 안전하게 처리할 수 있습니다.
이 방식은 구현이 간단하고 직관적이라는 장점이 있지만, 열거형 멤버가 많아지면 코드가 길어질 수 있습니다. 이 경우 배열이나 std::map을 활용한 조회 테이블 방식을 대안으로 고려해 볼 수도 있습니다.