문자열 리터럴(String Literal)이란?
문자열 리터럴은 큰따옴표(" ")로 묶인 일련의 문자 집합을 의미합니다. C와 C++에서는 접두사(prefix)를 활용하여 다양한 인코딩 방식과 형태의 문자열 리터럴을 선언할 수 있으며, 와이드 문자열(wide-string) 리터럴에는 항상 L 접두사가 붙습니다.
문자열 리터럴의 종류
| 번호 | 문자열 리터럴 및 설명 |
|---|---|
| 1 | " " 접두사가 없는 일반 문자열 리터럴 (기본 narrow 문자열) |
| 2 | L" " 와이드 문자열 리터럴 (wchar_t 기반) |
| 3 | u8" " UTF-8로 인코딩된 문자열 리터럴 |
| 4 | u" " UTF-16으로 인코딩된 문자열 리터럴 (char16_t) |
| 5 | U" " UTF-32로 인코딩된 문자열 리터럴 (char32_t) |
| 6 | R" " 원시(raw) 문자열 리터럴 – 이스케이프 시퀀스를 해석하지 않음 |
각 유형의 활용 포인트
u8, u, U 접두사는 유니코드 문자를 다룰 때 사용되며, 국제화(i18n) 작업에 필수적입니다. R 접두사(원시 문자열)는 정규 표현식이나 파일 경로처럼 역슬래시(\)가 많이 들어가는 문자열을 이스케이프 처리 없이 그대로 작성할 수 있어 가독성을 크게 높여 줍니다.
C++ 문자열 리터럴 예제
다음은 C++에서 와이드 문자열 리터럴(L 접두사)을 사용하는 예제입니다. wcslen()으로 문자열 길이를 구하고, towupper() 함수로 각 문자를 대문자로 변환하여 출력합니다.
#include <cwchar>
#include <cwctype>
#include <iostream>
using namespace std;
int main() {
wchar_t s[] = L"hello world!";
wcout << L"The uppercase string : "" << L"\"is ";
for (int i = 0; i < wcslen(s); i++)
putwchar(towupper(s[i]));
return 0;
}실행 결과
The uppercase string : ""is HELLO WORLD!
코드 설명
wchar_t s[] = L"hello world!"; 구문은 L 접두사를 붙여 와이드 문자열 리터럴로 배열을 초기화합니다. 이후 반복문 안에서 towupper()를 호출해 소문자 'hello world!'를 대문자 'HELLO WORLD!'로 변환하고, putwchar()로 한 글자씩 출력합니다. 와이드 문자를 다룰 때는 일반 cout 대신 wcout을 사용해야 한다는 점도 기억해 두면 좋습니다.