본문 바로가기

개발147

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.
Modern C++ : std::variant (17) std::variant 개요std::variant는 타입 안전(type-safe) 공용체(union)로, C++17 표준 라이브러리에 추가된 기능입니다. 주어진 여러 타입 중 하나의 값을 가질 수 있으며, 현재 어떤 타입의 값을 저장하고 있는지 항상 기억합니다. 기존 C 스타일 공용체와 달리 타입 정보가 없어 발생할 수 있는 오류를 컴파일 또는 런타임에 방지할 수 있습니다. C++ 버전별 주요 키워드 도입 시기C++17: std::variant가 처음 도입되었습니다. 내용 설명std::variant는 템플릿 인자로 명시된 타입들 중 하나의 인스턴스만 저장할 수 있는 컨테이너입니다. 예를 들어 std::variant은 int, double, std::string 중 하나의 값만 가질 수 있습니다.주요 기능.. 2025. 9. 29.
Modern C++ : std::optional (17) std::optional 개요std::optional은 C++17부터 도입된 기능으로, 값이 있을 수도 있고 없을 수도 있는 상황을 명시적으로 표현하는 데 사용되는 템플릿 클래스입니다. 함수가 유효한 값을 반환하지 못하는 경우, 이전에는 nullptr나 특별한 값(예: -1)을 반환하여 실패를 알렸습니다. std::optional은 이러한 상황을 더 안전하고 명확하게 처리할 수 있는 방법을 제공합니다. C++ 버전별 주요 키워드 도입 시기C++17: std::optional 도입 내용 설명std::optional 객체는 타입 T의 값을 포함하거나, 아무 값도 포함하지 않는 두 가지 상태를 가질 수 있습니다. 값이 없는 상태는 std::nullopt를 사용하여 표현합니다.주요 멤버 함수는 다음과 같습니다... 2025. 9. 28.
Modern C++ : Type Traits 2 (11, 14, 17, 20) Type Traits 2개요타입 특성(Type Traits)은 컴파일 시간에 타입에 대한 정보를 얻거나 타입을 변환하는 데 사용되는 템플릿 기반의 메커니즘입니다. 헤더에 정의된 클래스 템플릿들을 통해, 특정 타입이 정수형인지, 포인터인지, 혹은 두 타입이 동일한지 등을 확인할 수 있습니다. 이를 활용하면 템플릿 프로그래밍에서 타입에 따른 조건부 컴파일, static_assert를 이용한 타입 제약, 오버로드 해석 제어(SFINAE) 등을 효과적으로 구현할 수 있습니다.C++ 버전별 주요 키워드 도입 시기C++11: 헤더와 함께 대부분의 핵심 타입 특성들이 도입되었습니다. (std::is_same, std::is_integral, std::enable_if, std::conditional 등)C++14.. 2025. 9. 27.
Modern C++ : Variadic Templates and Fold Expressions (11, 17) Variadic Templates and Fold Expressions 개요C++에서 템플릿은 강력한 제네릭 프로그래밍 도구입니다. Variadic Templates는 임의의 개수의 템플릿 인자를 받을 수 있게 하여 템플릿의 유연성을 극대화합니다. 이를 통해 printf와 같이 가변 인자를 받는 함수를 타입에 안전하게 구현할 수 있습니다.Fold Expressions는 C++17부터 도입된 기능으로, Variadic Template의 파라미터 팩(parameter pack)을 매우 간결하고 직관적인 방식으로 처리할 수 있게 해주는 구문입니다.이 문서에서는 Variadic Templates의 기본 개념과 재귀를 이용한 고전적인 처리 방식, 그리고 C++17의 Fold Expressions를 활용한 현대적인.. 2025. 9. 26.
Modern C++ : std::concepts (20) std::concepts 개요C++ Concepts는 템플릿 파라미터에 대한 제약 조건을 명시적으로 표현하는 기능입니다. 템플릿이 특정 요구사항(예: 특정 멤버 함수나 연산자를 지원)을 만족하는 타입에 대해서만 인스턴스화되도록 강제할 수 있습니다. 이를 통해 컴파일 타임에 타입 요구사항을 검증하고, 의도에 맞지 않는 타입이 사용될 경우 훨씬 명확하고 이해하기 쉬운 에러 메시지를 생성할 수 있습니다. C++ 버전별 주요 키워드 도입 시기C++20: concept, requires 키워드가 도입되어 Concepts 기능이 표준으로 채택되었습니다. 내용 설명Concepts는 concept 키워드를 사용하여 정의하며, requires 절을 통해 템플릿 파라미터가 만족해야 할 제약 조건을 기술합니다. 여러 Con.. 2025. 9. 25.