전체 코드

#include <iostream>
#include <locale>  // locale 추가
using namespace std;

// 문자(char)
char ch = 'a';   // 문자 a 저장
char ch2 = '1';  // 문자 1 저장
char ch3 = 'a' + 1;  // 'b'

// 유니코드 문자(wchar_t)
wchar_t wch = L'안';

// 문자열
char str[] = "Hello";  // 안전한 문자열
char str2[] = { 'h', 'e', 'l', 'l', 'o', '\0' };  // 수동 초기화 버전

int main()
{
    // 문자 출력
    cout << "ch: " << ch << endl;   // a
    cout << "ch2: " << ch2 << endl; // 1
    cout << "ch3: " << ch3 << endl; // b

    // 유니코드 출력 준비
    wcout.imbue(locale("kor"));
    wcout << "wchar_t: " << wch << endl;   // 안 (정상 출력)

    // 문자열 출력
    cout << "str: " << str << endl;   // Hello
    cout << "str2: " << str2 << endl; // Hello

    return 0;
}

1️⃣ 문자(char)의 기본 개념

✔️ char란?

  • 문자 1개를 저장하는 자료형
  • 크기: 1바이트 (8비트)
  • 내부적으로는 정수형 (아스키코드 값 저장)
char ch = 'A';   // 문자 A 저장 (아스키코드 65)

✔️ 아스키코드와 문자 저장 방식

  • 문자 = 숫자 (아스키코드)
  • 'A' → 65
  • 'a' → 97
  • '0' → 48
char ch = 97;   // 아스키코드 97 → 'a'
cout << ch << endl;  // 출력: a

✔️ 작은 따옴표로 감싸는 이유

char ch = 'a';   // 문자로 저장
  • 숫자(코드값)가 아닌, 문자 자체 의미를 명확히 하기 위해
  • 코드 가독성 ↑

✔️ 문자와 숫자 연산 가능

char ch3 = 'a' + 1;   // 'b' (아스키코드 98)
  • 문자도 내부적으로는 숫자라서 덧셈 등 산술 연산 가능

2️⃣ 유니코드(wchar_t)와 국제 문자 처리


✔️ 유니코드란?

  • 전세계 모든 문자에 고유번호 부여한 표준 문자셋
  • 한국어, 일본어, 중국어 등 포함

✔️ 유니코드 표기 방식

방식설명크기
UTF-8가변 길이 (1~3바이트)알파벳/숫자 1바이트, 한글 3바이트
UTF-16고정 길이 (2바이트)대부분 문자 2바이트

✔️ 유니코드 저장 타입 wchar_t

  • wchar_tUTF-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";  // 자동으로 '\0' 붙음

✔️ 메모리 저장 위치

선언 위치저장 영역
main 밖 전역변수.data 영역
main 안 지역변수스택 영역

✔️ 스택 문자열의 위험성

  • 스택은 초기화되지 않음
  • 문자열 끝 \0 누락 시 쓰레기 값 출력 위험
char str[] = { 'h', 'e', 'l', 'l', 'o' };  // '\0' 없음
cout << str << endl;   // 예상치 못한 값까지 출력될 수 있음

✔️ 안전한 문자열 선언법

char str[] = "Hello";  // 자동으로 '\0' 추가됨 → 안전

6️⃣ 요점 총정리 표

구분타입크기특이점
문자char1바이트아스키코드 저장
유니코드 문자wchar_t2바이트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 변환 절차도 정리해서 드릴까요?
다음 강의도 이런 식으로 정리해줄까? 원하는 스타일 알려줘! 🙌✨

profile
李家네_공부방

0개의 댓글