블로그
-
C++ 컴파일 타임 최적화 | constexpr·PCH·모듈·ccache·Unity 빌드 [#15-3]
매번 같은 룩업 테이블을 런타임에 계산하던 코드를 constexpr 함수, if constexpr, consteval로 컴파일 타임에 옮기는 방법을 다룹니다. 빌드 시간을 줄이는 쪽으로는 병목 측정, PCH, C++20 모듈, ccache, distcc 분산 컴파일, Unity 빌드를 CMake 설정과 함께 설명합니다.
-
printf 디버깅에서 벗어나기: GDB·LLDB 브레이크포인트, 워치포인트, 단계 실행 기초
세그폴트 위치를 모르거나 루프의 특정 반복에서만 버그가 날 때처럼 printf로는 막히는 상황별로 GDB와 LLDB 사용법을 익힙니다. 조건부 브레이크포인트, 워치포인트로 메모리 오염 추적, next와 step의 차이, x 명령으로 메모리를 읽는 법을 예제로 다룹니다.
-
C++ Sanitizer 동작 원리와 설정: ASan·UBSan·TSan·MSan 오버헤드, CMake 통합
use-after-free를 잡는 ASan, 데이터 레이스를 잡는 TSan, 미정의 동작을 잡는 UBSan, 초기화 안 된 메모리를 잡는 MSan이 각각 어떻게 동작하고 얼마나 느려지는지, ASan·TSan을 함께 못 쓰는 이유와 CMake 프리셋·CI job 분리 방법을 설명합니다.
-
C++ 로깅·Assertion | 프로덕션 간헐적 크래시, 로그 없이 재현 불가일 때
로그가 없어 재현조차 안 되는 프로덕션 크래시를 계기로 로그 레벨 설계, assert와 static_assert의 쓰임 구분, spdlog의 싱크·포맷·로테이션 설정을 다룹니다. assert에 부수 효과를 넣거나 사용자 입력 검증에 assert를 쓰는 실수도 설명합니다.
-
C++ CMake 고급 | 멀티 타겟·외부 라이브러리 관리 (대규모 프로젝트 빌드)
라이브러리를 추가할 때마다 빌드가 깨지는 대규모 프로젝트를 타겟 단위 CMake로 정리하는 방법을 다룹니다. PUBLIC·PRIVATE·INTERFACE 전파, Generator Expression, find_package와 FetchContent 선택, undefined reference 해결도 설명합니다.
-
C++ Iterator 카테고리 이해하기: begin/end부터 성능 비교까지
순회 중 erase 후 크래시가 나는 문제에서 출발해 반복자 카테고리별 지원 연산, 반개구간 [begin, end), reverse_iterator의 base() 변환, back_inserter 같은 어댑터를 예제로 설명합니다. std::advance와 distance 사용법도 다룹니다.
-
나만의 Iterator 만들기: Forward부터 Bidirectional까지
직접 만든 컨테이너에 std::sort를 쓰고 싶을 때 필요한 요구 사항과 iterator_traits를 짚고, Input부터 Random Access까지 반복자를 단계별로 구현합니다. 카테고리 과대 선언, 후위 ++ 반환 타입 실수와 C++20 iterator_concept도 다룹니다.
-
C++ Google Test | gtest 설치부터 TEST·EXPECT_EQ
C++ Google Test(gtest) 단위 테스트 가이드. FetchContent·vcpkg 설치, TEST·TEST_F·EXPECT·ASSERT·파라미터화·Death Test, TDD·프로덕션 패턴, CI 연동, 자주 나는 오류 해결.
-
Google Mock으로 C++ 의존성 분리하기: MOCK_METHOD·EXPECT_CALL·매처
데이터베이스나 네트워크 없이 단위 테스트를 돌리려면 인터페이스를 분리하고 Google Mock으로 대역을 만들어야 합니다. MOCK_METHOD 정의, EXPECT_CALL의 호출 횟수·순서 검증, WillOnce와 매처, StrictMock·NiceMock 차이, 자주 나는 컴파일 에러를 다룹니다.
-
unique_ptr 고급 활용: 커스텀 삭제자, 배열, Pimpl, C API 핸들 감싸기
C++ unique_ptr 고급 활용. 커스텀 삭제자와 EBO로 오버헤드 없애기, unique_ptr<T[]> 배열, Pimpl 패턴과 ABI 안정성, 팩토리와 이동 의미론, malloc/free·FILE*·HANDLE 같은 C API 연동을 다룹니다.