본문 바로가기

개발147

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.
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.
Modern C++ : 클래스(Class) (98, 11, 17) 클래스 (Class) 개요C++에서 class는 사용자 정의 타입을 만드는 핵심적인 기능입니다. 클래스는 데이터(멤버 변수)와 해당 데이터를 처리하는 함수(멤버 함수)를 하나로 묶어 관리하며, 객체 지향 프로그래밍(OOP)의 기본이 됩니다. 클래스를 통해 데이터 캡슐화, 상속, 다형성 등 OOP의 주요 특징을 구현할 수 있습니다.C++ 버전별 주요 키워드 도입 시기C++98: class 키워드 자체는 C++의 초기 버전부터 존재했습니다.C++11: default, delete 키워드가 도입되어 컴파일러가 생성하는 기본 멤버 함수(생성자, 소멸자 등)를 명시적으로 사용하거나 삭제할 수 있게 되었습니다.C++17: std::string_view가 도입되어, 문자열을 복사하지 않고도 읽기 전용으로 안전하고 효.. 2025. 9. 17.
Modern C++ : 유틸리티 함수 활용 (11, 17) 모던 C++ 유틸리티 함수 활용 개요utils.h 헤더 파일에 정의된 다양한 유틸리티 함수를 활용하여 C++11, C++17, C++20 등 모던 C++의 주요 표준 기능들을 사용하는 방법을 알아봅니다. 템플릿, constexpr, std::string_view, 구조적 바인딩(structured bindings) 등 코드의 재사용성과 가독성, 성능을 높여주는 기능들을 실제 예제를 통해 학습합니다. C++ 버전별 주요 키워드 도입 시기C++11constexpr: 컴파일 타임에 값을 계산할 수 있는 상수 표현식입니다.std::array: 정적 크기의 배열을 위한 컨테이너입니다.std::vector, std::map: 개선된 표준 라이브러리 컨테이너입니다.범위 기반 for 루프 (Range-based for.. 2025. 9. 15.