본문 바로가기

전체 글209

Modern C++ : std::concepts (20) std::concepts 개요C++ Concepts는 템플릿 파라미터에 대한 제약 조건을 명시적으로 표현하는 기능입니다. 템플릿이 특정 요구사항(예: 특정 멤버 함수나 연산자를 지원)을 만족하는 타입에 대해서만 인스턴스화되도록 강제할 수 있습니다. 이를 통해 컴파일 타임에 타입 요구사항을 검증하고, 의도에 맞지 않는 타입이 사용될 경우 훨씬 명확하고 이해하기 쉬운 에러 메시지를 생성할 수 있습니다. C++ 버전별 주요 키워드 도입 시기C++20: concept, requires 키워드가 도입되어 Concepts 기능이 표준으로 채택되었습니다. 내용 설명Concepts는 concept 키워드를 사용하여 정의하며, requires 절을 통해 템플릿 파라미터가 만족해야 할 제약 조건을 기술합니다. 여러 Con.. 2025. 9. 25.
Modern C++ : Type Traits 1 (11, 14, 17, 20) Type Traits 1 개요Type traits는 C++ 템플릿 메타프로그래밍의 핵심 기능 중 하나로, 컴파일 시간에 타입에 대한 정보를 질의하거나 타입을 변환하는 데 사용되는 템플릿 클래스 집합입니다. 헤더 파일에 정의되어 있으며, 이를 통해 코드의 유연성과 안정성을 크게 향상시킬 수 있습니다.주요 용도는 다음과 같습니다.타입 검사: 특정 타입이 정수형, 부동소수점형, 클래스 등 특정 카테고리에 속하는지 확인합니다.타입 속성 확인: 타입이 const 한정자를 가졌는지, 포인터인지 등을 확인합니다.타입 관계 확인: 두 타입이 동일한지, 한 타입이 다른 타입으로 변환 가능한지 등을 확인합니다.타입 변환: 타입에 const를 추가하거나 포인터를 제거하는 등의 변환을 수행합니다.특히 static_asser.. 2025. 9. 24.
Modern C++ : 템플릿 특수화 (Template Specialization) (98, 11, 17) 템플릿 특수화 (Template Specialization) 개요템플릿 특수화(Template Specialization)는 특정 타입에 대해 일반적인 템플릿 구현과 다르게 동작하는 특별한 버전을 제공하는 C++ 기능입니다. 이를 통해 특정 타입에 최적화되거나 특별한 동작을 수행하는 코드를 작성할 수 있습니다. 예를 들어, 일반 템플릿 함수가 모든 타입에 대해 동일한 로직을 수행하지만, 특정 타입(예: std::string)에 대해서는 다른 로직을 수행해야 할 때 유용하게 사용됩니다. C++ 버전별 주요 키워드 도입 시기C++98: 템플릿(Template) 개념과 함께 템플릿 특수화(Template Specialization)가 표준에 도입되었습니다.C++11: extern template 키워드가 도입.. 2025. 9. 23.
Modern C++ : 복사 및 이동 의미론 (Copy and Move Semantics) (98, 11) 복사 및 이동 의미론 (Copy and Move Semantics) 개요C++에서 객체를 다룰 때, 객체의 데이터를 복사하거나 소유권을 이전하는 방식은 매우 중요합니다. 특히 동적 할당된 메모리와 같은 리소스를 관리하는 클래스의 경우, 이러한 동작을 어떻게 정의하느냐에 따라 프로그램의 성능과 안정성이 크게 달라집니다.복사 의미론(Copy Semantics): 기존 객체의 내용을 그대로 복사하여 새로운 객체를 생성하거나 다른 객체에 대입합니다. 원본과 사본은 독립적인 리소스를 가집니다.이동 의미론(Move Semantics): 기존 객체(주로 임시 객체)의 리소스 소유권을 새로운 객체로 '이동'시킵니다. 불필요한 데이터 복사를 피할 수 있어 성능이 크게 향상됩니다. 원본 객체는 리소스를 잃고 비어 있는(v.. 2025. 9. 22.
Modern C++ : 연산자 오버로딩 (Operator Overloading) (98, 11, 20) 연산자 오버로딩 (Operator Overloading) 개요연산자 오버로딩(Operator Overloading)은 C++의 강력한 기능 중 하나로, 사용자가 직접 정의한 클래스 타입에 +, -, *, ==와 같은 내장 연산자를 사용할 수 있도록 재정의하는 것을 의미합니다. 이를 통해 사용자 정의 타입도 기본 데이터 타입처럼 자연스럽고 직관적인 문법으로 다룰 수 있어 코드의 가독성과 사용 편의성이 크게 향상됩니다.예를 들어, 두 Matrix 객체를 더할 때 m1.add(m2) 대신 m1 + m2와 같이 간결하게 표현할 수 있습니다. C++ 버전별 주요 키워드 도입 시기C++98: 연산자 오버로딩의 기본 개념이 도입되었습니다. 대부분의 연산자를 오버로딩할 수 있는 기능이 이때부터 제공되었습니다.C++11.. 2025. 9. 21.
Modern C++ : 클래스 템플릿(Class Template) (98) 클래스 템플릿 (Class Template) 개요클래스 템플릿(Class Template)은 구체적인 데이터 타입을 명시하지 않고, 일반화된(generic) 형태로 클래스를 정의하는 방법입니다. 이를 통해 다양한 자료형에 대해 동일한 동작을 하는 클래스를 한 번만 정의하여 코드의 재사용성을 크게 높일 수 있습니다. 컴파일러는 템플릿에 명시된 타입(예: int, float, double 등)에 맞춰 실제 클래스를 생성합니다. C++ 버전별 주요 키워드 도입 시기C++98: template, typename 키워드를 사용한 클래스 템플릿 기본 기능이 도입되었습니다. 내용 설명클래스 템플릿은 template 또는 template 키워드로 선언을 시작합니다. 여기서 T는 타입 매개변수(type paramet.. 2025. 9. 20.
꿈 속의 그대에게, 1906년 석유, 1907년 전선 "1906년 석유가 1907년 전선보다 먼저였다..." 여러 서사이후 꿈속의 그대는 억울한 듯 자랑스러운듯 강조하며 마지막으로 한 말.그 말로인해 블로그를 작성합니다. 시대별 지배층 혹은 관리자는 인류가 다시 성숙한 사회를 구성할 수 있을 때까지 잉여물의 관리 및 분배를 담당하는 역할을 수행해야합니다. 그리고 관리자들의 어리석음 마저도 인내의 시간에 들어갔다고 봅니다. 인류 권력의 계보와 민주주의 주도권 사회로의 흐름1. 초기 공동체 시대: 부족장과 샤먼의 권력인류 초기 공동체에서 권력은 부족장(Chief)과 샤먼(주술사)에게 있었습니다.이 시기 민간인은 비교적 평등한 공동체 일원으로 살았으나, 생존이 중심이었고 강자나 주술적 권위를 지닌 이들이 영향력을 행사했습니다.권력 기반: 혈연, 무력, 주술민간인.. 2025. 9. 19.
Modern C++ : 다형성(Polymorphism) (98, 11) 다형성 (Polymorphism) 개요다형성(Polymorphism)은 객체 지향 프로그래밍의 핵심 원칙 중 하나로, '여러 형태를 가질 수 있는 능력'을 의미합니다. C++에서는 주로 부모 클래스의 포인터나 참조를 통해 자식 클래스의 객체를 다루면서, 동일한 함수 호출이 객체의 실제 타입에 따라 다른 동작을 하도록 만드는 가상 함수(Virtual Function) 메커니즘으로 구현됩니다.이를 통해 코드의 유연성과 확장성을 높일 수 있으며, 다양한 객체들을 공통된 인터페이스로 관리할 수 있습니다. C++ 버전별 주요 키워드 도입 시기C++98 이전: virtual 키워드를 통해 다형성의 기본 개념이 지원되었습니다.C++11: 다형성 및 클래스 설계를 더 명확하고 안전하게 만들어주는 여러 키워드가 도입되었.. 2025. 9. 19.
Modern C++ : 상속(Inheritance) (98, 11) 상속 (Inheritance) 개요상속(Inheritance)은 객체 지향 프로그래밍의 핵심 개념 중 하나로, 기존 클래스(기반 클래스 또는 부모 클래스)의 멤버(변수, 메서드)를 새로운 클래스(파생 클래스 또는 자식 클래스)가 물려받아 사용할 수 있게 하는 기능입니다. 이를 통해 코드 재사용성을 높이고, 클래스 간의 계층 구조를 형성하여 프로그램을 더 체계적으로 구성할 수 있습니다.C++에서는 한 클래스가 다른 클래스로부터 상속받을 때, 파생 클래스는 기반 클래스의 public 및 protected 멤버에 접근할 수 있습니다. C++ 버전별 주요 키워드 도입 시기C++98: class, public, protected, private, virtual, 생성자 초기화 목록 순서는 멤버 변수 선언 순서와 .. 2025. 9. 18.