본문 바로가기

개발143

Modern C++ : std::thread (11) std::thread 개요std::thread는 C++11부터 표준 라이브러리에 추가된 기능으로, 프로그램 내에서 새로운 스레드를 생성하고 관리할 수 있게 해주는 클래스입니다. 이를 통해 병렬(Parallel) 또는 동시성(Concurrent) 프로그래밍을 구현하여 프로그램의 성능을 향상시키거나 응답성을 높일 수 있습니다. C++ 버전별 주요 키워드 도입 시기C++11: std::thread 및 관련 기능들이 헤더에 처음 도입되었습니다. 내용 설명std::thread 객체는 생성 시 인자로 전달된 함수(또는 호출 가능한 객체)를 새로운 스레드에서 실행합니다. std::thread의 주요 특징은 다음과 같습니다.생성과 실행: std::thread 객체를 생성하면 즉시 새로운 스레드가 실행을 시작합니다. .. 2025. 10. 17.
Modern C++ : std::exception (98, 11, 17) std::exception 개요std::exception은 C++ 표준 라이브러리에서 모든 표준 예외 클래스의 기반이 되는 클래스입니다. 프로그램 실행 중 발생하는 오류(예: 잘못된 인수, 0으로 나누기 등)를 처리하기 위한 표준적인 방법을 제공합니다. 사용자는 std::exception을 상속하여 자신만의 예외 클래스를 만들 수 있으며, 이를 통해 오류 처리 코드를 더 명확하고 구조적으로 작성할 수 있습니다. C++ 버전별 주요 키워드 도입 시기C++98: std::exception이 표준 라이브러리에 처음 도입되었습니다.C++11: noexcept 키워드가 도입되어, 함수가 예외를 발생시키지 않음을 명시할 수 있게 되었습니다. what() 메소드 오버라이드 시 noexcept를 사용하는 것이 권장됩니.. 2025. 10. 16.
Modern C++ : std::weak_ptr (11) std::weak_ptr 개요std::weak_ptr는 std::shared_ptr가 관리하는 객체에 대한 비소유(non-owning) 참조를 제공하는 스마트 포인터입니다. std::shared_ptr와 달리 std::weak_ptr는 참조 카운트를 증가시키지 않으므로 순환 참조(circular reference) 문제를 해결하는 데 사용됩니다. C++ 버전별 주요 키워드 도입 시기C++11: std::weak_ptr가 도입되었습니다. 내용 설명std::weak_ptr는 std::shared_ptr 인스턴스를 가리키지만, 해당 객체의 생명 주기에 영향을 주지 않습니다. 즉, std::weak_ptr가 가리키는 객체는 마지막 std::shared_ptr가 소멸될 때 함께 소멸되며, std::weak_ptr.. 2025. 10. 15.
Modern C++ : std::shared_ptr (11, 17) std::shared_ptr 개요std::shared_ptr는 하나의 리소스를 여러 포인터가 공유해서 사용할 수 있게 하는 스마트 포인터입니다. 참조 카운팅(Reference Counting) 방식을 사용하여, 자신을 참조하는 shared_ptr가 몇 개인지 계산합니다. 참조 카운트가 0이 되면 자동으로 메모리를 해제합니다.이를 통해 여러 객체가 동일한 메모리 리소스에 안전하게 접근하고 소유권을 공유할 수 있으며, 리소스의 생명 주기를 자동으로 관리하여 메모리 누수를 방지합니다. C++ 버전별 주요 키워드 도입 시기C++11: std::shared_ptr가 표준 라이브러리에 처음 도입되었습니다.C++11: std::make_shared가 도입되어 더 안전하고 효율적인 shared_ptr 생성을 지원합니다.. 2025. 10. 14.
Modern C++ : std::unique_ptr (11, 14) std::unique_ptr 개요std::unique_ptr는 C++11부터 도입된 스마트 포인터로, 동적으로 할당된 객체에 대한 독점적인 소유권을 관리합니다. unique_ptr가 소멸될 때 (예: 범위를 벗어날 때) 관리하던 객체도 자동으로 소멸시켜, 메모리 누수를 방지하고 예외 안전성을 높입니다. 복사가 불가능하고 이동만 가능하다는 특징이 있습니다. C++ 버전별 주요 키워드 도입 시기C++11: std::unique_ptr 도입C++14: std::make_unique 헬퍼 함수 도입 내용 설명std::unique_ptr는 이름 그대로 포인터가 가리키는 객체에 대한 유일한(unique) 소유권을 가집니다. 이는 복사 생성자나 복사 대입 연산자가 없어 복사가 원천적으로 불가능하며, 소유권은 std:.. 2025. 10. 13.
Modern C++ : std::format (20) std::format 개요std::format은 C++20부터 도입된 기능으로, 타입-세이프(type-safe)하며 확장 가능한 방식으로 문자열을 포맷팅합니다. Python의 str.format이나 C#의 String.Format과 유사한 기능을 제공하여 기존의 printf 계열 함수나 iostreams보다 더 안전하고 편리한 대안을 제시합니다. C++ 버전별 주요 키워드 도입 시기C++20: std::format, std::format_to, std::format_to_n이 표준 라이브러리에 도입되었습니다. 내용 설명std::format 라이브러리는 다양한 방식으로 문자열을 생성하고 포맷팅하는 기능을 제공합니다.std::format: 포맷 문자열과 인자들을 받아 포맷팅된 새로운 std::string 객.. 2025. 10. 12.
Modern C++ : std::ranges (20) std::ranges 개요std::ranges는 C++20에 도입된 주요 기능으로, 컬렉션(컨테이너)을 다루는 방식을 혁신적으로 개선합니다. 기존의 반복자(iterator) 기반의 알고리즘을 파이프라이닝(pipelining) 가능한 '뷰(view)'와 '어댑터(adapter)'를 통해 더 직관적이고 가독성 높게 사용할 수 있도록 합니다. 이를 통해 복잡한 데이터 처리 로직을 간결하게 표현할 수 있습니다. C++ 버전별 주요 키워드 도입 시기C++20 : std::ranges, std::views, concepts와 함께 도입되었습니다. 내용 설명std::ranges 라이브러리는 크게 세 가지 요소로 구성됩니다.Ranges (범위): 반복 가능한 요소의 시퀀스를 나타내는 개념입니다. std::vector,.. 2025. 10. 11.
Modern C++ : std::Attributes (11, 14, 17, 20) std::Attributes 개요C++ Attributes는 코드에 메타데이터를 추가하는 표준화된 방법을 제공합니다. 이 메타데이터는 컴파일러가 경고를 생성하거나, 코드를 최적화하거나, 특정 규칙을 강제하는 데 사용될 수 있습니다. 속성은 [[attribute]] 구문을 사용하여 지정됩니다. C++ 버전별 주요 키워드 도입 시기C++11: [[noreturn]], [[carries_dependency]]C++14: [[deprecated]]C++17: [[fallthrough]], [[nodiscard]], [[maybe_unused]]C++20: [[likely]], [[unlikely]], [[no_unique_address]] 내용 설명[[nodiscard]]: 함수의 반환 값을 무시해서는 안 됨을.. 2025. 10. 10.
Modern C++ : std::any (17) std::any 개요std::any는 C++17부터 도입된 기능으로, 모든 타입의 값을 안전하게 저장하고 추출할 수 있는 타입 안전(type-safe) 컨테이너입니다. 특정 타입에 국한되지 않고 다양한 타입의 객체를 하나의 변수에 담아야 할 때 유용하게 사용됩니다. C++ 버전별 주요 키워드 도입 시기C++17: std::any가 표준 라이브러리에 처음 도입되었습니다. 내용 설명std::any는 내부에 어떤 타입의 값이든 저장할 수 있는 클래스 템플릿입니다. void*처럼 타입을 완전히 잃어버리는 것과 달리, std::any는 저장된 값의 타입을 기억하고 있어 타입 안전성을 보장합니다.주요 멤버 함수는 다음과 같습니다.any_cast(): std::any 객체에 저장된 값을 특정 타입 T로 캐스팅하여 반.. 2025. 9. 30.