전체 코드
#include <iostream>
#include <locale>
using namespace std;
char ch = 'a';
char ch2 = '1';
char ch3 = 'a' + 1;
wchar_t wch = L'안';
char str[] = "Hello";
char str2[] = { 'h', 'e', 'l', 'l', 'o', '\0' };
int main()
{
cout << "ch: " << ch << endl;
cout << "ch2: " << ch2 << endl;
cout << "ch3: " << ch3 << endl;
wcout.imbue(locale("kor"));
wcout << "wchar_t: " << wch << endl;
cout << "str: " << str << endl;
cout << "str2: " << str2 << endl;
return 0;
}
1️⃣ 문자(char)의 기본 개념
✔️ char란?
- 문자 1개를 저장하는 자료형
- 크기: 1바이트 (8비트)
- 내부적으로는 정수형 (아스키코드 값 저장)
char ch = 'A';
✔️ 아스키코드와 문자 저장 방식
- 문자 = 숫자 (아스키코드)
- 'A' → 65
- 'a' → 97
- '0' → 48
char ch = 97;
cout << ch << endl;
✔️ 작은 따옴표로 감싸는 이유
char ch = 'a';
- 숫자(코드값)가 아닌, 문자 자체 의미를 명확히 하기 위해
- 코드 가독성 ↑
✔️ 문자와 숫자 연산 가능
char ch3 = 'a' + 1;
- 문자도 내부적으로는 숫자라서 덧셈 등 산술 연산 가능
2️⃣ 유니코드(wchar_t)와 국제 문자 처리
✔️ 유니코드란?
- 전세계 모든 문자에 고유번호 부여한 표준 문자셋
- 한국어, 일본어, 중국어 등 포함
✔️ 유니코드 표기 방식
| 방식 | 설명 | 크기 |
|---|
| UTF-8 | 가변 길이 (1~3바이트) | 알파벳/숫자 1바이트, 한글 3바이트 |
| UTF-16 | 고정 길이 (2바이트) | 대부분 문자 2바이트 |
✔️ 유니코드 저장 타입 wchar_t
wchar_t는 UTF-16 문자 1개 저장
- 크기: 2바이트 (16비트) (플랫폼 따라 다를 수도 있음)
- 문자 앞에
L을 붙여 유니코드임을 표시
wchar_t wch = L'안';
✔️ 유니코드 문자 출력 (wcout 사용)
wcout.imbue(locale("kor"));
wcout << wch << endl;
✔️ wchar_t로 직접 유니코드 번호 입력도 가능
wchar_t wch = 0xc548;
3️⃣ Escape Sequence (제어 문자)
| 코드 | 의미 |
|---|
\t | 탭 (Tab) |
\n | 줄바꿈 (Line Feed) |
\r | 커서 맨 앞으로 (Carriage Return) |
\\ | 백슬래시 출력 |
\' | 작은 따옴표 출력 |
\" | 큰 따옴표 출력 |
4️⃣ 문자열 (char 배열)
✔️ 문자열이란?
- 문자들의 연속된 모임
- 문자열 끝에는 반드시 널 문자('\0')가 붙음
- 메모리 구조상 문자열 끝을 알리기 위함
✔️ 문자열 선언 방식
char str[] = { 'h', 'e', 'l', 'l', 'o', '\0' };
char str2[] = "Hello World";
✔️ 메모리 저장 위치
| 선언 위치 | 저장 영역 |
|---|
| main 밖 전역변수 | .data 영역 |
| main 안 지역변수 | 스택 영역 |
✔️ 스택 문자열의 위험성
- 스택은 초기화되지 않음
- 문자열 끝
\0 누락 시 쓰레기 값 출력 위험
char str[] = { 'h', 'e', 'l', 'l', 'o' };
cout << str << endl;
✔️ 안전한 문자열 선언법
char str[] = "Hello";
6️⃣ 요점 총정리 표
| 구분 | 타입 | 크기 | 특이점 |
|---|
| 문자 | char | 1바이트 | 아스키코드 저장 |
| 유니코드 문자 | wchar_t | 2바이트 | UTF-16 문자 1개 저장 |
| 문자열 | char[] | 가변길이 | 끝에 '\0' 필수 |
7️⃣ 문자열 메모리 영역 요약
| 선언 위치 | 저장 영역 |
|---|
| 전역 문자열 | .data (초기화됨) |
| 지역 문자열 | 스택 (초기화 안됨) |
| 문자열 리터럴 | .rodata (읽기전용 데이터 영역) |
8️⃣ 디버깅 꿀팁
| 작업 | 단축키 |
|---|
| 디버그 시작 | F5 |
| 브레이크포인트 설정 | F9 |
| 메모리 창 열기 | Ctrl+Alt+M |
| 디스어셈블리 창 | Ctrl+Alt+D |
9️⃣ 학습 핵심 요점 정리
✅ char = 1바이트 문자, 아스키코드 저장
✅ wchar_t = 2바이트 유니코드 문자 저장
✅ 문자열 끝에는 '\0' 필수
✅ 전역 문자열은 .data, 지역 문자열은 스택
✅ cout은 char 전용, 유니코드는 wcout 사용
✅ 유니코드 출력 전 wcout.imbue(locale(...)) 필수
✅ Escape Sequence 잘 활용하기
✅ 디버깅으로 메모리 직접 확인 연습 필수
📦 보너스 팁
✅ 이 자료 PDF로 변환 가능 (필요하면 요청)
✅ 다음 강의 주제도 이런 스타일로 정리 가능
✅ 반복 학습 시 이 정리만 보면 핵심 빠르게 복습 가능
필요하면 추가로 아스키코드표와 UTF-8, UTF-16 변환 절차도 정리해서 드릴까요?
다음 강의도 이런 식으로 정리해줄까? 원하는 스타일 알려줘! 🙌✨