블로그
-
C++ condition_variable로 작업 큐 만들기: 허위 깨움 처리와 스레드 풀
작업 큐를 폴링하며 CPU를 낭비하던 구조를 condition_variable로 바꿔 작업이 들어올 때만 스레드를 깨우는 방법을 설명합니다. predicate를 넣은 wait로 허위 깨움을 처리하는 법, 스레드 안전 큐와 스레드 풀 구현, lock_guard를 쓰면 안 되는 이유를 다룹니다.
-
C++ atomic: 락 없는 카운터, 메모리 순서, 언제 mutex 대신 쓰나
카운터 하나에 mutex를 쓰기 부담스러울 때 std::atomic의 fetch_add와 compare_exchange로 락 없이 갱신하는 방법, seq_cst, acquire/release, relaxed 메모리 순서를 고르는 기준, lock-free 스택과 SPSC 큐 구현, ABA 문제와 volatile 혼동을 설명합니다.
-
C++ 예외 처리, try-catch와 Error Code 중 뭐가 빠를까
함수 호출이 깊어질수록 에러 코드를 계속 전달하기 어려워지는 문제에서 출발해 throw와 try-catch 문법, catch 순서, 표준 예외 계층, RAII로 누수를 막는 법, 예외를 써야 할 때와 피할 때, 재던지기에서 throw;를 써야 하는 이유를 설명합니다.
-
C++ 예외 안전성 Basic·Strong·Nothrow 보장: RAII와 copy-and-swap으로 구현하기
예외가 나면 락이 풀리지 않거나 컨테이너가 반쯤 수정된 상태로 남는 문제를 Basic, Strong, Nothrow 세 단계 보장으로 구분하고, RAII 래퍼, copy-and-swap, 트랜잭션 스타일 코드, noexcept 지정으로 원하는 보장 수준을 구현하는 방법을 설명합니다.
-
C++ 커스텀 예외 클래스 만들기 | 예외 성능과 Zero-Cost Exception
std::exception을 상속해 에러 코드와 컨텍스트를 담는 예외 계층을 설계하고, 루프 안에서 예외를 던지면 왜 느려지는지 벤치마크로 확인합니다. zero-cost 예외 모델의 의미, 예외와 에러 코드를 섞는 하이브리드 방식, 예외 슬라이싱 같은 실수도 다룹니다.
-
C++ 템플릿 기초: 함수·클래스 템플릿, 가변 인자, SFINAE에서 Concepts까지
타입마다 복사하던 함수를 template<typename T>로 합치는 것부터 시작해 타입 추론 규칙과 max(3, 3.14)가 실패하는 이유, 템플릿 링크 에러, 가변 인자 템플릿과 fold expression, 특수화, SFINAE와 Concepts까지 단계적으로 설명합니다.
-
C++ 클래스 템플릿: 멤버 외부 정의, 부분 특수화, 템플릿 별칭, CTAD로 제네릭 컨테이너 만들기
C++ 클래스 템플릿 작성법. 기본 문법, 멤버 함수 외부 정의(헤더 또는 명시적 인스턴스화), 부분 특수화, using 템플릿 별칭, CTAD(C++17), 제네릭 컨테이너 예제와 자주 나는 에러를 정리합니다.
-
C++ 템플릿 특수화: 모든 타입에 같은 로직을 쓸 수 없을 때 완전·부분 특수화로 푸는 법
bool만 true/false로 출력하고 싶을 때처럼 타입마다 다른 동작이 필요할 때 완전 특수화와 부분 특수화를 어떻게 나눠 쓰는지 예제로 보여줍니다. 함수 템플릿은 왜 부분 특수화 대신 오버로드를 써야 하는지, ODR 위반과 모호성 에러도 다룹니다.
-
C++ 가변 인자 템플릿: 파라미터 팩 재귀 전개, Fold Expression, 완벽한 전달
C++ 가변 인자 템플릿 정리. template<typename... Args>와 파라미터 팩, 재귀 전개 패턴, C++17 Fold Expression, std::tuple 이해, 완벽한 전달과 자주 나는 에러를 예제로 다룹니다.
-
C++ vector 성능: 캐시 친화성, 용량 성장 전략, reserve 최적화
push_back만 반복했는데 느려지는 이유를 size와 capacity, 재할당 비용, 캐시 지역성으로 풀어 보고 reserve·shrink_to_fit·emplace_back을 쓸 시점을 가립니다. string의 SSO, erase-remove, 반복자 무효화 같은 흔한 실수도 다룹니다.