전체 글 150

[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가 스코프를 벗어나면..

Transaction Isolation Level (트랜잭션 격리 수준)

트랜잭션 격리 수준(Isolation Level)은 동시에 여러 트랜잭션이 실행될 때, 서로에게 미치는 영향을 얼마나 허용할지 결정하는 설정입니다.격리 수준이 높을수록 데이터 일관성(Consistency)은 좋아지지만, 성능 오버헤드가 증가할 수 있습니다.1. 트랜잭션 격리 수준과 발생할 수 있는 문제트랜잭션을 동시에 실행할 때 발생할 수 있는 대표적인 문제는 다음과 같습니다.문제설명Dirty Read (더티 리드)다른 트랜잭션이 커밋하지 않은 데이터를 읽는 문제Non-Repeatable Read (반복 불가능한 읽기)같은 데이터를 여러 번 조회할 때, 중간에 다른 트랜잭션이 변경하여 값이 달라지는 문제Phantom Read (팬텀 리드)같은 조건으로 여러 번 조회할 때, 중간에 다른 트랜잭션이 데이터를..

프로그래밍/DB 2025.02.26

[Modern C++] 우측값 레퍼런스

이름이 없으면 우측값, 이름이 있으면 좌측값일반적으로 이름이 붙어 있으면 좌측값(lvalue), 이름이 없이 임시로 생성된 값은 우측값(rvalue) 입니다.int a = 10; // a는 좌측값 (이름이 있음)int&& r = 5; // 5는 우측값 (이름이 없음)int b = a; // a는 좌측값우측값 레퍼런스 (Type&&)Type&& 는 우측값을 가리킬 수 있는 레퍼런스입니다.우측값 레퍼런스를 사용하면 임시 객체의 수명을 연장할 수 있습니다.int&& r = 10; // 10은 우측값이지만 r이 레퍼런스로 붙잡고 있어 소멸되지 않음std::move(arg)std::move(arg) 는 arg를 강제로 우측값으로 캐스팅합니다.std::move를 사용하면 더 이상 원래 변수를 사용하지 않을 것이라는..