블로그
-
[[nodiscard]]로 반환값 무시 막기: 에러 코드, RAII 타입, 사유 메시지, Clang-Tidy 검증
C++ [[nodiscard]] 정리. 반환값을 무시해서 생기는 버그, 에러 코드와 RAII 타입에 붙이는 법, C++20 사유 메시지와 생성자 적용, Clang-Tidy 검증, C++26 std::ignore 논의를 다룹니다.
-
C++ 게임 엔진 기초 | 렌더링·물리·입력·스크립팅 시스템 구현 [#50-3]
ECS 아키텍처를 기반으로 2D 게임 엔진의 렌더링·물리·입력·Lua 스크립팅 시스템을 구현합니다. 충돌 감지 누락, 물리 터널링, Lua 콜백 nil 에러 같은 실전 트러블슈팅과 Box2D 연동까지 다룹니다.
-
C++ 코드 커버리지 측정: gcov·lcov 리포트, Google Test 연동, CI에서 Codecov 올리기
gcov로 C++ 코드 커버리지를 측정하고 lcov로 HTML 리포트를 만든 뒤 Google Test와 CMake 빌드에 연동하는 과정을 다룹니다. 라인·브랜치·함수·조건·경로 커버리지가 각각 무엇을 보여 주는지와 CI에서 Codecov로 결과를 올리는 흐름도 설명합니다.
-
C++ Command 패턴: 요청을 객체로 만들어 Undo/Redo·매크로·트랜잭션 구현하기
C++에서 요청을 Command 객체로 감싸 Undo/Redo 히스토리 스택, 매크로 기록, All-or-Nothing 트랜잭션을 구현합니다. std::function으로 충분한 경우와 객체가 필요한 경우를 가르고, 텍스트 에디터 전체 예제로 구조를 확인합니다.
-
C++ Composite 패턴: 파일 시스템·UI 트리를 하나의 인터페이스로 다루기
Composite 패턴으로 파일과 폴더, GUI 위젯, 조직도를 같은 인터페이스로 다루는 방법을 C++로 구현합니다. Leaf에 add()를 호출하는 문제, 순환 참조와 메모리 누수, Visitor·Iterator와 결합하는 패턴도 설명합니다.
-
C++로 REST API 서버 만들기: 라우터·미들웨어 체인·JWT 인증·요청 검증
Express.js처럼 쓰기 쉬운 REST API 서버를 C++로 만들면서 라우터, 로깅·CORS 미들웨어 체인, Request·Response 클래스, JWT 인증, 요청 검증과 에러 핸들러, Swagger 문서를 차례로 구현합니다. CORS preflight 실패와 토큰 만료 대처도 다룹니다.
-
C++ 캐스팅 4가지: static_cast·dynamic_cast·const_cast·reinterpret_cast 언제 쓰나
C++의 4가지 캐스트(static_cast, dynamic_cast, const_cast, reinterpret_cast)가 각각 언제 안전하고 언제 위험한지, C 스타일 캐스트(T)x가 왜 지양되는지, dynamic_cast 실패를 무시했을 때의 크래시까지 실전 예제로 정리합니다.
-
C++ 클래스와 객체 입문: 설계도 비유로 이해하는 생성자·접근 제어·소멸자
클래스는 설계도, 객체는 그 설계도로 만든 실체라는 비유로 첫 C++ 클래스를 작성해 봅니다. 생성자와 소멸자가 언제 호출되는지, public·private 접근 제어가 왜 필요한지, 세미콜론 누락 같은 초보자 실수를 예제로 짚습니다.
-
CMake 3.28+ 프리셋과 모듈로 크로스 플랫폼 빌드 구성하기
팀원마다, 플랫폼마다 달라지는 C++ 빌드 설정을 CMake로 통일하는 방법입니다. 최소 CMakeLists.txt와 타겟 기반 설계, PUBLIC·PRIVATE·INTERFACE 전파, CMakePresets.json, find_package와 FetchContent, 3.28부터 지원되는 C++20 모듈 빌드를 다룹니다.
-
CMake find_package로 외부 라이브러리 연결하기: Config vs Module 모드와 커스텀 Find 모듈
CMake find_package로 외부 라이브러리를 통합하는 방법. 기본 사용법, 주요 라이브러리 예제, Config 모드와 Module 모드의 차이, 커스텀 FindModule 작성과 자주 생기는 오류를 정리합니다.