블로그
-
C++ 함수 오버로딩: 오버로드 해석 순서와 모호한 호출이 생기는 경우
같은 이름의 함수 중 어떤 것이 호출될지 컴파일러가 정하는 오버로드 해석 순서를 설명하고, 반환 타입만 다른 오버로딩이 불가능한 이유, const 오버로딩, 기본 인자 때문에 생기는 모호한 호출, 배열이 포인터로 바뀌는 함정을 예제로 풀어 봅니다.
-
C++ 예외 처리: try/catch/throw, 예외 안전성, 언제 예외를 쓰나
예외를 던질지 에러 코드를 반환할지 결정하는 기준부터, 예외를 참조로 잡아야 하는 이유, 소멸자에서 던지면 안 되는 이유, RAII로 예외 안전성을 지키는 법, 스택 풀기와 noexcept의 실제 효과까지 C++ 예외 처리를 코드로 짚습니다.
-
C++로 자료구조 직접 구현하기: 연결 리스트·이진 탐색 트리·해시 테이블·스택·큐
C++로 연결 리스트, 이진 탐색 트리, 해시 테이블, 스택, 큐를 직접 구현하며 노드 연결과 삽입·삭제가 내부에서 어떻게 일어나는지 설명하고, LRU 캐시와 인접 리스트 그래프 예제로 응용합니다.
-
C++ 기본 인자 규칙: 헤더에만 두는 이유와 가상 함수에서 생기는 함정
C++ 기본 인자를 오른쪽부터 채워야 하는 규칙, 헤더 선언에만 기본값을 두고 재선언에서 반복하면 안 되는 이유, 가상 함수에서 기본값이 정적 타입 기준으로 결정되는 함정, 오버로딩과 충돌하는 경우를 예제로 설명합니다.
-
C++ 연산자 우선순위 함정: flags & MASK == 0 같은 비트·비교·논리 연산자 버그
flags & MASK == 0이 의도와 달리 비교부터 계산되는 것처럼 비트, 비교, 논리 연산자가 섞일 때 생기는 버그를 우선순위와 결합 방향 표로 풀어 봅니다. 증감 연산자, 대입과 비교 혼동, && 단축 평가를 예제로 보고 괄호를 어디에 치면 좋은지 정리합니다.
-
C++ 객체 풀 구현: RAII 반납 래퍼, 동적 확장, reset 누락과 스레드 안전
게임 오브젝트처럼 자주 생성되고 사라지는 객체를 미리 만들어 두고 재사용하는 Object Pool을 구현합니다. 반납을 자동화하는 RAII 래퍼, 부족할 때 늘리는 동적 확장, 타입별 풀 관리자를 만들고 reset 누락과 스레드 안전 문제를 짚습니다.
-
C++ std::async와 launch 정책: future, deferred 실행, 흔한 함정
std::async에 launch::async와 launch::deferred를 지정했을 때 실행 시점이 어떻게 달라지는지 설명하고, 여러 future 결과 모으기, 예외 전달, wait_for로 상태 확인과 타임아웃 처리, 병렬 다운로드·맵 리듀스 예제를 다룹니다.
-
C++ 집합체 초기화: 집합체 조건, 중괄호 초기화, C++20 지정 초기화 순서 규칙
C++ 집합체가 되기 위한 조건과 중괄호로 구조체·배열·중첩 구조체를 초기화하는 방법, C++20 지정 초기화의 순서 규칙과 기본값 처리, 설정 구조체와 테스트 데이터에 집합체를 활용하는 패턴을 예제로 설명합니다.
-
C++ 보안 프로그래밍 | 메모리 안전·인젝션·하드닝
할당 크기 정수 오버플로우로 생기는 힙 손상, 스마트 포인터로도 막지 못하는 댕글링(string_view·span·반복자 무효화), SQL·명령어·포맷 스트링 인젝션, 민감 메모리 제로화, 표준 라이브러리 하드닝 모드와 컴파일러 보호 옵션, Sanitizer·퍼징까지 C++ 메모리 안전 중심으로 다룹니다.
-
C++ 테스트 전략 세우기: 테스트 피라미드, GTest 단위·통합·E2E, GMock 모킹
리팩터링이 두려운 C++ 코드베이스에 테스트 피라미드를 세우는 방법입니다. GTest 파라미터화 테스트와 픽스처, 플러그인 로드 통합 테스트, E2E 테스트, GMock으로 DB 의존성 격리, CI에서만 실패하는 테스트 대응을 다룹니다.