프로그래밍/C,C++ 14

[Modern C++20] concept

🧠 concept란?C++ 템플릿에 제약 조건(조건식)을 줄 수 있는 문법📌 “이 타입은 이런 행동을 할 수 있어야 템플릿에 넣을 수 있다”✅ 안 되면 컴파일 에러를 깔끔하게 내줌 (더 이상 무시무시한 템플릿 에러 아님!)🧩 예시 없이 설명 못 하지!#include #include template concept Addable = requires(T a, T b) { { a + b } -> std::convertible_to;};template T add(T a, T b) { return a + b;}int main() { std::cout 🔍 위 예제 해석:Addable은 concept 이름requires(...) 안에 조건이 있음T 타입은 + 연산이 가능해야 하고결과도 T로 변환..

[Modern C++] string_view

✅ 1. std::string_view란?C++17에서 도입된 std::string_view는 문자열을 복사하지 않고 참조하는 경량 래퍼입니다.기존의 std::string과 const char*의 단점을 보완하며, 문자열을 더 효율적으로 처리할 수 있습니다.📌 주요 특징:✔ 문자열을 복사하지 않고 참조 → 빠르고 메모리 절약✔ std::string, "문자열 리터럴", char* 등과 함께 사용 가능✔ 읽기 전용 (mutable X)📌 기본 문법:#include #include void print(std::string_view sv) { // 복사 없이 문자열 참조 std::cout ✅ 2. std::string vs. std::string_view 차이점 비교 항목 std::string ..

[Modern C++20] 삼중 비교 연산자(Three-Way Comparison)

🔹 C++20 삼중 비교 연산자 (Three-Way Comparison, )✅ 1. 삼중 비교 연산자 ()란?C++20에서는 새로운 삼중 비교 연산자(Three-Way Comparison Operator) 인 (일명 "우주선 연산자"라고도 불림)가 도입되었습니다.이 연산자는 두 값을 비교하고 순서를 결정하는 통합 연산자로, 기존 ==, , = 연산자를 하나로 통합하는 역할을 합니다.📌 기본 문법:a b; // a와 b를 비교하여 결과 반환✔ a가 b보다 작으면 음수 값 반환✔ a가 b와 같으면 0 반환✔ a가 b보다 크면 양수 값 반환📌 반환 타입: 연산자의 반환값은 비교 대상에 따라 다를 수 있으며, 대표적인 타입은 다음과 같습니다.std::strong_ordering (강한 순서 비교)st..

[Modern C++] 람다 표현식 (Lambda Expression)

✅ 1. 람다 표현식이란?람다(lambda) 표현식은 익명 함수(Anonymous Function) 를 생성할 수 있는 기능으로, 함수 객체보다 간결하게 함수를 정의하고 사용할 수 있도록 지원합니다.📌 람다의 주요 특징:✔ 이름이 없는 함수(익명 함수)✔ 즉시 정의 및 호출 가능✔ 변수 캡처 기능 (클로저)✔ std::function과 함께 활용 가능✅ 2. 기본 문법[캡처](매개변수) -> 반환타입 { 함수 본문 };📌 각 부분 설명:[캡처] : 외부 변수 사용 방법 지정(매개변수) : 입력값 (함수 매개변수와 동일)-> 반환타입 : 함수의 반환 타입 (생략 가능){ 함수 본문 } : 람다의 실행 코드✅ 3. 람다 기본 사용법#include int main() { auto add = [](in..

[Modern C++] decltype

decltype 개념 및 사용법decltype은 표현식(expression)의 타입을 추론하는 C++ 키워드입니다.컴파일 타임에 특정 변수나 표현식의 정확한 타입을 가져올 때 사용됩니다.1. 기본 사용법#include int main() { int x = 10; decltype(x) y = 20; // y의 타입은 int (x의 타입을 따름) std::cout decltype(x)는 x의 타입을 가져오므로, y의 타입은 int가 됩니다.2. decltype과 auto 차이점auto컴파일러가 타입을 유추하지만, 값을 기반으로 타입을 결정합니다.우변을 기반으로 타입이 결정됨 (대입되는 표현식의 타입)auto a = 10; // a는 int (10은 int 리터럴)auto b = ..

[Modern C++] STL 자료구조

C++ 표준 라이브러리(std)에서 제공하는 주요 자료구조(Container)들은 크게 Sequence Container(순차 컨테이너), Associative Container(연관 컨테이너), Unordered Container(비순서 연관 컨테이너), Container Adapter(컨테이너 어댑터)로 나눌 수 있습니다.1. Sequence Container (순차 컨테이너)요소를 특정 순서로 저장하는 컨테이너입니다.컨테이너설명특징std::vector동적 크기 배열- 빠른 임의 접근(O(1)) - 끝에서 추가/삭제 O(1), 중간 삽입/삭제 O(n)std::deque양쪽 끝에서 삽입/삭제 가능한 동적 배열- 앞뒤에서 O(1) 삽입/삭제 - 랜덤 접근 가능(O(1))std::list이중 연결 리스트-..

[Modern C++] std::atomic

🔹 std::atomic 개념과 활용std::atomic은 C++에서 멀티스레드 환경에서의 동기화 없이 원자적 연산을 수행할 수 있도록 제공되는 템플릿 클래스입니다.이를 통해 Lock-Free 또는 Wait-Free 알고리즘을 구현할 수 있으며, CPU의 원자적 연산을 직접 활용하여 성능을 높일 수 있습니다.✅ 1. std::atomic의 특징✔ 멀티스레드 안전(Thread-safe)✔ Lock-Free 지원 (하드웨어 CAS 등 사용)✔ 메모리 순서 제어 가능 (memory_order 옵션)✔ 기본 데이터 타입, 사용자 정의 타입에도 적용 가능✅ 2. std::atomic 기본 사용법#include #include #include std::atomic counter(0);void increment()..

[Modern C++] 동기화 기법(Synchronization)

C++에서 동기화(Synchronization)는 멀티스레드 환경에서 여러 스레드가 동시에 공유 데이터에 접근할 때 발생할 수 있는 경쟁 상태(Race Condition)를 방지하고, 데이터 무결성을 유지하기 위해 사용됩니다. C++에서 제공하는 주요 동기화 기법들을 설명하겠습니다.1. 뮤텍스 (Mutex, Mutual Exclusion)뮤텍스는 한 번에 하나의 스레드만 특정 코드 블록을 실행할 수 있도록 보장하는 동기화 객체입니다.사용 예시 (std::mutex)#include #include #include std::mutex mtx; // 뮤텍스 객체int shared_data = 0;void increment() { std::lock_guard lock(mtx); // 뮤텍스 잠금 (자동 해..

[Modern C++] std::thread

std::thread는 C++11에서 도입된 멀티스레딩을 지원하는 표준 라이브러리의 클래스입니다. 이를 통해 프로그램 내에서 여러 개의 스레드를 생성하고 실행할 수 있으며, 병렬 처리를 활용할 수 있습니다.📌 std::thread 개요std::thread는 C++의 헤더에 포함되어 있으며, 이를 사용하여 새로운 실행 흐름을 생성할 수 있습니다.#include #include void func() { std::cout 📌 주요 기능스레드 생성std::thread 객체를 생성하면 즉시 새로운 스레드에서 지정한 함수가 실행됩니다.스레드 종료 대기 (join())join()을 호출하면 메인 스레드는 해당 스레드가 종료될 때까지 기다립니다.스레드 분리 (detach())detach()를 호출하면 스레드..

[Modern C++] smart pointer(unique_ptr, shared_ptr, weak_ptr)

🔹 std::unique_ptr란?std::unique_ptr는 C++의 스마트 포인터 중 하나로, 단 하나의 포인터만 객체를 소유할 수 있도록 설계된 스마트 포인터입니다.즉, 같은 객체를 두 개 이상의 unique_ptr가 공유할 수 없으며, 소유권이 한 곳에만 존재합니다.소유하고 있는 unique_ptr가 범위를 벗어나거나 reset()되면 자동으로 객체가 삭제되어 메모리 누수를 방지할 수 있습니다.✅ std::unique_ptr의 특징단독 소유(Exclusive Ownership)하나의 unique_ptr만 특정 객체를 소유 가능.다른 unique_ptr에 복사할 수 없음(copy constructor와 copy assignment가 삭제됨).자동 메모리 관리unique_ptr가 스코프를 벗어나면..