본문 바로가기

전체 글223

Before Classic C++ : enum enum 개요열거형(enum)은 서로 연관된 정수형 상수들의 집합에 의미 있는 이름을 부여하여 코드의 가독성과 유지보수성을 높이는 사용자 정의 타입입니다. C++ 버전별 주요 키워드 도입 시기C99 이전 (C/C++): 전통적인 enum은 C 언어 초기부터 존재했습니다.C++11: 타입 안전성을 강화하고 이름 충돌을 방지하는 enum class (또는 enum struct)가 도입되었습니다. 또한, 열거형의 기반이 되는 정수 타입을 명시적으로 지정할 수 있게 되었습니다. 내용 설명enum [열거명] { 상수명 [= 상수값], ... }; 형태로 선언합니다.상수 값을 지정하지 않으면 첫 번째 상수는 0으로 시작하며, 이후 상수들은 이전 값보다 1씩 큰 값을 자동으로 갖게 됩니다.전통적인 enum의 상수들은.. 2025. 10. 27.
Before Classic C++ : Comma Operator 04. 나열 연산자 (Comma Operator) 개요나열 연산자(,)는 여러 표현식을 왼쪽에서 오른쪽으로 순서대로 평가하는 연산자입니다. 전체 표현식의 결과값은 가장 오른쪽 표현식의 값이 됩니다. C++ 버전별 주요 키워드 도입 시기C99 이전 (C/C++): 쉼표 연산자는 C 언어 초기부터 존재했으며, C++에서도 처음부터 지원되었습니다. 내용 설명쉼표 연산자는 두 개의 피연산자를 가집니다. 왼쪽 피연산자를 먼저 평가하고, 그 결과를 버린 뒤 오른쪽 피연산자를 평가합니다. 전체 연산의 결과는 오른쪽 피연산자의 값과 타입이 됩니다. 주로 for 루프의 초기화나 증감 부분에서 여러 변수를 한 번에 처리할 때 사용됩니다. 예제 코드#include int main() { int i, j, k; /.. 2025. 10. 26.
Before Classic C++ : goto goto 개요goto는 프로그램의 실행 흐름을 지정된 레이블(label)로 무조건적으로 이동시키는 제어문입니다. C++ 버전별 주요 키워드 도입 시기C99 이전 (C/C++): goto는 C 언어 초기부터 존재했으며, C++에서도 처음부터 지원되었습니다. 내용 설명goto를 사용하면 코드의 특정 위치로 점프할 수 있습니다. 주로 다중 중첩 루프를 한 번에 빠져나가거나, 복잡한 에러 처리 로직을 단순화할 때 제한적으로 사용됩니다. 하지만 goto는 코드의 흐름을 예측하기 어렵게 만들어 가독성과 유지보수성을 해칠 수 있으므로 사용을 지양하는 것이 좋습니다. 예제 코드#include int main() { std::cout 실행 결과--- goto to exit nested loops ---i = 1,.. 2025. 10. 25.
Before Classic C++ : continue continue 개요continue는 반복문(for, while, do-while)의 현재 반복을 중단하고, 다음 반복을 시작하도록 제어를 옮기는 키워드입니다. C++ 버전별 주요 키워드 도입 시기C99 이전 (C/C++): continue는 C 언어 초기부터 존재했으며, C++에서도 처음부터 지원되었습니다. 내용 설명continue는 루프 본문의 나머지 부분을 건너뛰고, for문의 경우 증감식으로, while이나 do-while문의 경우 조건 검사 부분으로 바로 이동합니다. break가 루프를 완전히 탈출하는 것과 달리, continue는 루프를 계속 실행합니다. 예제 코드#include int main() { std::cout 실행 결과--- for loop with continue ---i .. 2025. 10. 24.
Before Classic C++ : break break 개요break는 switch 문이나 반복문(for, while, do-while)의 실행을 즉시 중단하고, 해당 블록을 빠져나갈 때 사용하는 제어문입니다. C++ 버전별 주요 키워드 도입 시기C99 이전 (C/C++): break는 C 언어 초기부터 존재했으며, C++에서도 처음부터 지원되었습니다. 내용 설명switch 블록 내의 특정 case를 처리한 후 전체 switch 문을 종료하거나, 반복문 내에서 특정 조건을 만족했을 때 더 이상 반복을 수행하지 않고 루프를 탈출하기 위해 사용됩니다. 예제 코드#include int main() { // for 문에서 break 사용 예제 std::cout 실행 결과--- for loop with break ---i = 1i = 2i = .. 2025. 10. 23.
Modern C++ : std::exception (98, 11) C++ 예외(Exception) 처리 개요C++ 예외 처리는 프로그램 실행 중에 발생하는 오류나 예외적인 상황(예: 0으로 나누기, 파일 열기 실패 등)을 처리하기 위한 강력하고 유연한 메커니즘입니다. 예외가 발생하면 일반적인 프로그램 흐름이 중단되고, 해당 예외를 처리할 수 있는 catch 블록으로 제어가 이동합니다. 이를 통해 오류 처리 코드를 기본 로직과 분리하여 코드의 가독성과 유지보수성을 높일 수 있습니다. C++ 버전별 주요 키워드 도입 시기C++98: try, catch, throw 키워드와 std::exception 클래스가 표준으로 도입되었습니다. 기본적인 예외 처리의 틀이 완성되었습니다.C++11: noexcept 지정자가 도입되었습니다. 함수가 예외를 발생시키지 않는다는 것을 명시적으.. 2025. 10. 22.
Modern C++ : std::async (11) std::async 개요std::async는 함수를 비동기적으로 실행하고 그 결과를 std::future 객체를 통해 얻을 수 있게 해주는 함수 템플릿입니다. std::thread와 달리 스레드 풀을 활용하여 스레드 생성 오버헤드를 줄일 수 있으며, 함수의 반환값을 쉽게 얻을 수 있는 장점이 있습니다. C++ 버전별 주요 키워드 도입 시기C++11 : std::async, std::future 도입 내용 설명std::async는 함수(또는 호출 가능한 객체)를 인자로 받아 비동기적으로 실행합니다. std::async는 std::future 객체를 반환하는데, 이 future 객체를 통해 비동기 작업의 결과를 얻거나 작업이 완료될 때까지 대기할 수 있습니다.std::async는 실행 정책(launch po.. 2025. 10. 21.
Modern C++ : std::scoped_lock (17) scoped lock 개요std::scoped_lock은 C++17에 도입된 RAII 스타일의 뮤텍스 래퍼(wrapper)로, 하나 이상의 뮤텍스를 교착 상태(deadlock)의 위험 없이 안전하게 잠그기 위해 사용됩니다. 생성자에서 전달된 모든 뮤텍스를 잠그고, 소멸자에서 자동으로 해제하여 사용이 간편하고 안전합니다. C++ 버전별 주요 키워드 도입 시기C++17: std::scoped_lock이 표준에 추가되었습니다. 내용 설명여러 개의 뮤텍스를 다룰 때, 스레드마다 뮤텍스를 잠그는 순서가 다르면 교착 상태가 발생할 수 있습니다. 예를 들어, 스레드 1은 mutexA를 잠근 후 mutexB를 잠그려 하고, 스레드 2는 mutexB를 잠근 후 mutexA를 잠그려 하면 두 스레드 모두 영원히 기다리는 .. 2025. 10. 20.
Modern C++ : std::shared_timed_mutex (14) shared timed mutex 개요std::shared_timed_mutex는 여러 스레드가 데이터를 읽는 것을 허용하면서, 데이터 쓰기는 단 하나의 스레드만 허용하는 읽기-쓰기 잠금(Read-Write Lock)을 구현합니다. 읽기 작업이 쓰기 작업보다 훨씬 빈번하게 발생하는 경우, 일반 std::mutex보다 높은 성능을 제공할 수 있습니다. C++ 버전별 주요 키워드 도입 시기C++14: std::shared_timed_mutex가 표준에 추가되었습니다.C++14: std::shared_lock이 std::shared_timed_mutex와 함께 사용하기 위한 RAII 래퍼로 추가되었습니다. 내용 설명std::shared_timed_mutex는 두 가지 종류의 잠금을 제공합니다.공유 잠금 (Sh.. 2025. 10. 19.