블로그
-
C++ typedef vs using: 템플릿 별칭과 함수 포인터 별칭, 별칭은 새 타입이 아니다
중첩된 map<string, vector<pair<...>>> 같은 긴 타입에 이름을 붙일 때 typedef와 C++11 using이 어떻게 다른지 비교합니다. using만 가능한 템플릿 별칭, 읽기 쉬운 함수 포인터 별칭, 별칭이 새 타입을 만들지 않는다는 점에서 생기는 실수를 다룹니다.
-
C++ 템플릿 인자 추론 규칙: 값·참조·전달 참조, decay, CTAD
함수 템플릿에 값으로 넘기면 const와 참조가 사라지고 배열은 포인터로 decay되는 등, 컴파일러가 인자에서 T를 추론하는 규칙을 예제로 정리합니다. 타입 불일치로 추론이 실패할 때 고치는 법, 완벽한 전달, C++17 CTAD도 다룹니다.
-
C++ 임시 객체: 생성·소멸 시점, const 참조 수명 연장 규칙, 댕글링 참조
함수 인자 변환, 반환값, 연산자 체이닝 중에 생기는 이름 없는 임시 객체가 언제 만들어지고 언제 소멸되는지 설명합니다. const 참조와 우측값 참조로 수명이 연장되는 규칙, 멤버를 통한 바인딩에서 생기는 댕글링 참조, RVO와 이동으로 비용을 줄이는 법을 다룹니다.
-
C++ State 패턴: 조건문 폭발을 상태 객체로 바꾸기 (TCP·게임 AI·자판기 예제)
C++ State Pattern으로 조건문 폭발을 막는 방법을 TCP·게임 AI·자판기 예제로 설명합니다. Strategy와의 차이, 상태 객체 재사용 트레이드오프, 전이 중 자기 삭제 같은 자주 만나는 함정까지 정리했습니다.
-
C++ 고급 멀티스레딩 | 스레드 풀·Work Stealing
C++ 스레드 풀, Work Stealing, Lock-Free 큐, 메모리 순서, Thread-Local Storage를 직접 구현하며 각 패턴이 해결하는 문제와 흔한 버그(작업 유실, ABA, lost wakeup, TLS 잔여 상태)를 설명합니다.
-
C++ 메모리 풀 구현 비교: 객체 풀, 슬랩 할당자, 아레나, std::pmr
프로파일러에서 malloc이 상위에 뜨거나 힙 단편화·락 경합이 생길 때 쓸 수 있는 객체 풀, 슬랩 할당자, 메모리 아레나, std::pmr을 직접 구현하며 비교합니다. 풀보다 오래 사는 객체, 잘못된 풀 반환, pmr 리소스 수명 같은 실수도 짚습니다.
-
C++23 std::expected: 예외 없이 에러 전달하기와 and_then 체이닝
C++23 std::expected로 값과 에러를 하나의 반환 타입에 담아, 예외 없이도 실패 이유를 호출자에게 전달하는 방법을 파일 읽기와 파이프라인 예제로 보여줍니다. and_then 체이닝, expected<void, E>, 예외와의 선택 기준도 다룹니다.
-
C++ enum class: 밑바닥 타입, 비트 플래그, 문자열 변환 패턴
C++11 enum class의 스코프와 암시적 변환 차단, 밑바닥 타입과 ABI·직렬화, 문자열 변환 패턴, 비트 플래그 연산자 오버로딩, 범위 밖 정수 캐스팅과 Windows ERROR 매크로 충돌 같은 함정을 예제로 정리합니다.
-
C++로 O(1) LRU 캐시 만들기: unordered_map + list, splice, 흔한 반복자 실수
unordered_map에 list 반복자를 저장하고 splice로 노드를 앞으로 옮겨 get과 put을 모두 O(1)로 처리하는 LRU 캐시를 C++ 템플릿으로 구현합니다. 용량 초과 시 eviction 순서와 용량 0 같은 경계 조건도 다룹니다.
-
C++로 REST API 서버 만들기: 라우터·미들웨어 체인·JWT 인증·요청 검증
Express.js처럼 쓰기 쉬운 REST API 서버를 C++로 만들면서 라우터, 로깅·CORS 미들웨어 체인, Request·Response 클래스, JWT 인증, 요청 검증과 에러 핸들러, Swagger 문서를 차례로 구현합니다. CORS preflight 실패와 토큰 만료 대처도 다룹니다.