블로그
-
C++ std::vector 기초: 생성·삽입·삭제와 배열 대신 쓰는 이유
크기가 고정되고 범위 검사도 없는 C 배열 대신 std::vector를 쓰는 이유를 선언, 추가·삭제, operator[]와 at() 차이, 2차원 벡터, sort·find 예제로 보여줍니다. size()를 int로 받는 실수, 반복 중 삭제, reserve와 resize 혼동도 다룹니다.
-
C++ iostream 다루기: 포매팅 조작자, stringstream 파싱, cin 버퍼와 스트림 실패 상태
C++ iostream으로 콘솔·문자열·파일 입출력을 다루는 방법을 정리합니다. 포매팅 조작자, stringstream, CSV·설정 파일 파싱 실전 예제와 cin 버퍼·스트림 실패 상태 함정을 다룹니다.
-
C++ 태그 디스패칭: iterator_category로 오버로드 고르기와 if constexpr·Concepts 비교
값이 아니라 빈 구조체 타입으로 오버로드를 고르는 태그 디스패칭을 std::distance의 iterator_category 분기 예제로 설명합니다. 타입별 직렬화와 복사 최적화 예제, if constexpr·SFINAE·Concepts와 비교했을 때 언제 이 패턴이 여전히 읽기 쉬운지도 다룹니다.
-
C++ SFINAE vs Concepts | 언제 마이그레이션해야 할까
enable_if로 쓴 SFINAE 코드를 C++20 Concepts와 requires 표현식으로 옮기면 무엇이 좋아지고 무엇이 어려워지는지 같은 예제로 비교합니다. 에러 메시지 품질, 레거시 코드 호환성, 과도한 제약과 순환 의존 같은 마이그레이션 함정을 다룹니다.
-
C++에 Lua 임베딩하기: C API 스택 연산, 테이블 조작, Sol3 바인딩, 핫 리로드
C++ 게임·앱에 Lua 5.4를 임베딩할 때 필요한 lua_State 스택 인덱스 규칙, C++ 함수 등록과 upvalue 전달, 테이블 읽기·생성, Lua 함수 호출과 반환값 처리를 다룹니다. Sol3 바인딩과 스크립트 핫 리로드도 함께 봅니다.
-
C++ 크로스 플랫폼 기초: 플랫폼 감지 매크로, std::filesystem 경로, 동적 로딩 추상화
C++ 크로스 플랫폼 코드 기초: _WIN32/__linux__/__APPLE__ 감지와 기능 감지(__has_include), std::filesystem 경로, LoadLibrary/dlopen 추상화, 플랫폼 추상화 레이어, 타입 크기·엔디안·구조체 정렬 문제를 다룹니다.
-
C++ 크로스 플랫폼 빌드: MinGW·iOS·Android NDK 툴체인 파일과 CPack 패키징
C++ 크로스 플랫폼 빌드: MinGW·iOS·Android NDK용 CMake 툴체인 파일, CPack 패키징(DEB/RPM/NSIS/DMG)과 런타임 검색 경로, 심볼 버전, CI 매트릭스, 빌드·링크·패키징 에러 해결을 다룹니다.
-
C++ 메모리 순서 예제로 이해하기: relaxed, acquire/release, seq_cst, consume
C++ std::atomic의 메모리 순서 정리. memory_order_relaxed, acquire/release, seq_cst, consume을 예제로 비교하고, 동기화 패턴과 자주 나는 실수, x86과 ARM에서의 비용 차이를 다룹니다.
-
C++ gRPC 운영 기능: 인터셉터, 로드밸런싱, 데드라인 전파, 재시도, 헬스 체크
프로덕션 C++ gRPC 서비스에 필요한 인터셉터 체인, Kubernetes 환경의 round_robin 로드밸런싱, Jitter를 섞은 재시도, Health Checking Protocol과 grpc_health_probe, 그레이스풀 셧다운을 예제로 구현합니다.
-
vcpkg 기초: 설치, Manifest 모드, Triplet, 버전 고정, 오버레이 커스텀 포트
vcpkg를 서브모듈로 추가하고 vcpkg.json Manifest 모드로 의존성을 선언하는 방법, 정적·동적 링크를 가르는 Triplet, builtin-baseline으로 버전을 고정하는 법, 사내 라이브러리를 오버레이 포트로 넣는 법을 예제로 봅니다.