블로그
-
C++ STL 컨테이너: 연산별 성능 비교와 상황별 선택 기준
vector, map, unordered_map, deque, list의 내부 구조와 반복자 무효화 규칙, 메모리 할당 전략, 캐시 성능 차이를 측정 방법과 함께 비교하고 상황별 컨테이너 선택 기준을 정리합니다.
-
C++17 scoped_lock: 여러 뮤텍스를 데드락 없이 잠그기와 lock_guard·unique_lock 비교
계좌 이체처럼 두 뮤텍스를 잠가야 할 때 순서가 엇갈려 생기는 데드락을 std::scoped_lock 한 줄로 피하는 방법과, lock_guard, unique_lock과의 차이, C++11에서 std::lock으로 같은 효과를 내는 법, 잠금 순서 규칙을 예제로 설명합니다.
-
C++ Observer 패턴: weak_ptr로 구독자 수명 관리, 이벤트 타입별 알림, 신호/슬롯
C++ Observer 패턴으로 이벤트 기반 구조를 만드는 방법. 기본 구조, weak_ptr로 댕글링과 누수 방지, 이벤트 타입별 Observer, 신호/슬롯 패턴, 주식 시장 모니터 예제를 정리합니다.
-
C++ static 함수 정리: 클래스 static 멤버, 파일 스코프 static, 내부 링키지와 ODR
함수에 붙는 static은 클래스 static 멤버 함수와 파일 스코프 static 함수라는 전혀 다른 두 뜻을 가집니다. this가 없는 멤버 함수, 내부 링키지와 익명 네임스페이스 비교, 헤더의 static 정의가 ODR과 코드 크기에 주는 영향을 예제로 봅니다.
-
C++ 콜백 구현 4가지 비교: 함수 포인터, 펑터, std::function, 람다와 멤버 함수 콜백
C++ 콜백 패턴 정리. 함수 포인터, 펑터, std::function, 람다 네 가지 구현 방법을 비교하고, 비동기 콜백·이벤트 핸들러·Observer 패턴 활용, 콜백 지옥 회피와 성능 고려사항을 다룹니다.
-
enable_shared_from_this: this를 shared_ptr로 넘기는 법과 bad_weak_ptr 함정
C++ enable_shared_from_this 정리. shared_from_this()로 this를 안전하게 공유하는 방법, 생성자에서 호출할 때 나는 bad_weak_ptr 예외, weak_from_this()(C++17), 비동기 콜백 활용을 다룹니다.
-
C++ Small String Optimization (SSO) | string 성능 최적화 원리
std::string이 짧은 문자열은 힙 할당 없이 객체 내부 버퍼에 저장하는 Small String Optimization의 구조를 설명하고, 주소 비교와 sizeof로 SSO 여부를 확인하는 법, 생성과 복사 벤치마크, 간단한 SSO 구현 예시를 다룹니다.
-
C++ std::any vs void*: 타입 안전성·크기·성능 비교와 void*가 필요한 곳
임의의 타입을 저장해야 할 때 void*와 std::any 중 무엇을 쓸지 타입 안전성, 메모리 크기, 성능 기준으로 비교하고, 설정 저장소·이벤트 시스템·플러그인 예제와 C 라이브러리 인터페이스에서의 void* 사용법을 다룹니다.
-
빈 클래스가 1바이트를 먹는 이유: EBCO와 C++20 [[no_unique_address]]
빈 클래스가 1바이트를 차지하는 이유와, 커스텀 삭제자를 넣은 unique_ptr이나 빈 할당자를 가진 컨테이너가 커지는 문제를 EBCO와 C++20 [[no_unique_address]]로 해결하는 방법, 압축 쌍 직접 구현을 설명합니다.
-
C++ struct vs class: 기본 접근 제어, POD, C 호환성의 차이
C++에서 struct와 class의 문법상 차이는 멤버와 상속의 기본 접근 지정자뿐입니다. 그런데도 데이터 묶음에는 struct, 불변식을 지키는 캡슐화에는 class를 쓰는 관례가 왜 생겼는지, POD 조건과 C 호환, memcpy 가능 여부까지 설명합니다.