블로그
-
C++ 개발자 기술 면접 | 자주 나오는 질문과 답변 스크립트(30초·90초)·꼬리 질문 대비
C++ 면접에서 RAII, 이동 의미론, vtable, data race, 반복자 무효화, ODR 같은 단골 주제를 30초 요약과 90초 확장 답변으로 나눠 말하는 법, 그리고 이어지는 꼬리 질문에 한 줄로 대응하는 요령을 다룹니다.
-
C++ struct vs class: 기본 접근 제어, POD, C 호환성의 차이
C++에서 struct와 class의 문법상 차이는 멤버와 상속의 기본 접근 지정자뿐입니다. 그런데도 데이터 묶음에는 struct, 불변식을 지키는 캡슐화에는 class를 쓰는 관례가 왜 생겼는지, POD 조건과 C 호환, memcpy 가능 여부까지 설명합니다.
-
C++ malloc vs new vs make_unique: 메모리 할당 방식별 안전성 비교
C++ malloc, new, make_unique를 생성자 호출·타입 안전성·실패 처리(nullptr, bad_alloc, nothrow)·예외 안전성으로 비교하고, 속도 차이가 거의 없는 이유와 벤치마크가 0ms로 나오는 이유까지 정리합니다.
-
C++ vector reserve vs resize: capacity와 size의 차이와 쓰임
vector의 reserve는 capacity만 늘리고 size는 그대로 두지만, resize는 요소를 실제로 만들고 초기화해 size를 바꿉니다. 이 차이 때문에 reserve 뒤 인덱스로 접근하거나 resize 뒤 push_back을 하면 생기는 버그와 재할당 횟수 차이를 예제로 보여 줍니다.
-
C++ std::optional vs 포인터: 값이 없을 수 있는 반환값을 어떻게 표현할까
값이 없을 수 있는 반환값이나 선택적 매개변수를 nullptr 포인터 대신 std::optional로 표현하면 무엇이 안전해지는지 비교합니다. 반대로 다형성이나 큰 객체를 소유하지 않고 참조할 때는 왜 포인터가 맞는지 메모리 레이아웃과 벤치마크로 설명합니다.
-
C++ emplace_back vs push_back: 실제 성능 차이와 언제 다른지
emplace_back은 인자를 받아 컨테이너 안에서 바로 객체를 생성하고, push_back은 이미 만든 객체를 복사하거나 이동합니다. 단순 타입과 복잡한 객체 벤치마크로 실제 차이가 언제 생기는지 확인하고, map·set에서의 emplace 사용도 다룹니다.
-
C++ std::function vs 함수 포인터: 성능과 유연성의 트레이드오프
콜백을 저장할 때 함수 포인터와 std::function 중 무엇을 고를지 비교합니다. 호출 한 번의 비용 차이는 간접 호출 한 단계 정도이고, 실제 비용은 인라인 불가와 생성·복사 시 힙 할당에서 생긴다는 점을 이벤트 시스템·스레드 풀 예제로 설명합니다.
-
C++ std::variant vs union: 타입 안전성과 비용 비교
C++ union이 활성 멤버를 추적하지 않아 생기는 문제와 std::variant가 이를 해결하는 방식을 비교하고, std::visit와 overloaded 패턴으로 타입별 처리를 작성하는 방법, JSON 값·AST 노드·에러 처리 예제를 다룹니다.
-
C++ C 배열 vs std::array vs vector: 성능과 안전성 비교
C 스타일 배열, std::array, std::vector를 크기 고정 여부, 스택·힙 배치, 범위 검사 관점에서 비교하고, 접근·생성·순회 비용이 어디서 갈리는지 설명합니다. operator[]와 at()의 차이, 함수로 넘길 때 크기 정보가 사라지는 문제도 다룹니다.
-
C++ string vs string_view: 복사 없는 문자열 처리와 선택 기준
읽기 전용 문자열을 인자로 받을 때 std::string_view가 복사와 할당을 어떻게 줄이는지, 소유와 수정이 필요할 때는 왜 std::string이어야 하는지 비교합니다. 부분 문자열, 파싱, 로깅 예제와 함께 마이크로벤치마크를 읽을 때의 함정도 짚습니다.