728x90
반응형

Programming/C++ 24

C++ : 성능 최적화

성능 최적화1. 메모리 정렬, 캐시 친화적 설계 성능 최적화의 중요한 요소 중 하나는 메모리 접근 패턴을 최적화하여 CPU 캐시 효율을 높이는 것입니다. 캐시 친화적인 설계를 통해 데이터를 메모리에서 효율적으로 접근하고, 프로세서 캐시를 효과적으로 사용할 수 있습니다.1.1. 메모리 정렬 메모리 정렬을 통해 데이터가 연속적으로 메모리에 배치되도록 하여 캐시 히트를 극대화할 수 있습니다. 예를 들어, 구조체의 멤버를 정렬하여 캐시 성능을 향상시킬 수 있습니다.#include struct alignas(64) AlignedStruct { int a; int b;};int main() { AlignedStruct data; std::cout 1.2. 캐시 친화적 설계 캐시 친화..

Programming/C++ 01:19:51

C++ : 스레드와 동기화

스레드와 동기화1. std::thread, std::mutex, std::lock_guard C++11에서 도입된 std::thread는 멀티스레드를 사용하여 병렬로 작업을 처리할 수 있도록 도와주는 라이브러리입니다. 스레드 간의 자원 경쟁을 방지하려면 std::mutex와 std::lock_guard를 사용하여 동기화할 수 있습니다.1.1. std::thread std::thread는 새로운 스레드를 생성하고, 해당 스레드에서 실행할 함수를 지정하는 데 사용됩니다.#include #include void printMessage() { std::cout 1.2. std::mutex와 std::lock_guard std::mutex는 스레드 간에 공유 자원에 대한 동시 접근을 방지하는데 사..

Programming/C++ 2025.05.23

C++ : 고급 템플릿

고급 템플릿 프로그래밍1. SFINAE, enable_if SFINAE (Substitution Failure Is Not An Error)는 템플릿 메타프로그래밍에서 중요한 개념으로, 템플릿 인자에 따라 컴파일 타임에 조건을 처리할 수 있도록 합니다. `enable_if`는 특정 조건에 맞는 타입만을 허용하는 데 사용됩니다.1.1. SFINAE 템플릿을 사용할 때 조건에 맞지 않으면 컴파일 오류를 발생시키는 대신, 해당 템플릿을 제외시킵니다. 이를 통해 오버로딩을 사용할 때 더욱 유연하게 템플릿을 설계할 수 있습니다.#include #include template std::enable_if_t::value, T> add(T a, T b) { return a + b;}int main() { ..

Programming/C++ 2025.05.22

C++ : 현대적 C++

현대적 C++1. auto, decltype, nullptrC++11부터 제공되는 `auto`, `decltype`, `nullptr`는 코드의 가독성과 효율성을 높여줍니다.1.1. auto`auto`는 변수의 타입을 컴파일러가 자동으로 추론하도록 도와줍니다. 이를 통해 타입을 명시적으로 선언하지 않아도 됩니다.#include int main() { auto x = 5; // int 타입으로 자동 추론 auto y = 3.14; // double 타입으로 자동 추론 std::cout 1.2. decltype`decltype`는 변수나 표현식의 타입을 가져오는 키워드입니다. 이는 특히 복잡한 타입을 다룰 때 유용합니다.#include int main() { int x = 10; ..

Programming/C++ 2025.05.21

C++ : 스마트 포인터

스마트 포인터1. 스마트 포인터란? 스마트 포인터는 메모리 관리의 문제를 해결하는 중요한 도구입니다. C++에서는 `std::unique_ptr`, `std::shared_ptr`, `std::weak_ptr`가 스마트 포인터로 제공됩니다. 이들은 동적 메모리를 자동으로 관리하여 메모리 누수와 같은 문제를 방지합니다.2. unique_ptr `std::unique_ptr`는 소유권이 하나만 존재하는 스마트 포인터입니다. `unique_ptr`가 소유한 메모리는 다른 포인터로 복사할 수 없으며, 해당 포인터가 파괴되면 자동으로 메모리가 해제됩니다.2.1. unique_ptr 사용 예시#include #include class MyClass {public: MyClass() { st..

Programming/C++ 2025.05.20

C++ : 고급 객체지향 설계

고급 객체지향 설계1. 추상 클래스와 인터페이스 추상 클래스는 추상 메서드를 포함하는 클래스입니다. 추상 메서드는 구현되지 않은 메서드로, 해당 클래스는 인스턴스화할 수 없습니다. 인터페이스는 모든 메서드가 추상 메서드인 클래스와 유사하지만, C++에서는 추상 클래스로 구현됩니다.1.1. 추상 클래스 예시#include class Animal {public: virtual void makeSound() = 0; // 순수 가상 함수 (추상 메서드)};class Dog : public Animal {public: void makeSound() override { std::cout 위 코드에서 `Animal` 클래스는 추상 클래스로, `makeSound()` 함수는 순수 가상 함..

Programming/C++ 2025.05.19

C++ : 중급 프로젝트

중급 프로젝트1. STL 기반 주소록 STL(Standard Template Library)을 사용하여 주소록 프로그램을 만들 수 있습니다. 이 프로그램은 사용자 입력을 받아 이름, 전화번호, 이메일 등의 정보를 저장하고, 저장된 정보를 출력하는 기능을 포함합니다.1.1. 프로젝트 구성사용자 정의 클래스와 STL의 vector를 활용주소록 항목을 구조체로 정의사용자 인터페이스: 주소록에 항목 추가, 삭제, 출력 기능 제공1.2. 코드 예시#include #include #include struct Contact { std::string name; std::string phone; std::string email;};class AddressBook {public: void addC..

Programming/C++ 2025.05.18

C++ : 네임스페이스와 모듈화

네임스페이스와 모듈화1. 네임스페이스 (Namespace)네임스페이스는 이름 충돌을 방지하기 위해 사용됩니다. 다양한 함수, 클래스, 변수를 그룹화하여 코드의 가독성을 높이고 충돌을 방지합니다. C++의 기본 라이브러리도 `std`라는 네임스페이스 안에 포함되어 있습니다.1.1. 사용자 정의 네임스페이스사용자가 직접 네임스페이스를 정의하여 코드의 범위를 지정할 수 있습니다. 이를 통해 코드의 충돌을 방지하고, 모듈화된 구조로 만들 수 있습니다.#include namespace MyNamespace { void sayHello() { std::cout 📌 Tip: 네임스페이스를 사용하면 동일한 이름의 함수나 변수를 여러 군데에서 정의할 수 있으므로, 이름 충돌을 방지하는 데 유용합니다...

Programming/C++ 2025.04.28

C++ : 표준 템플릿 라이브러리

표준 템플릿 라이브러리 (STL)1. 표준 템플릿 라이브러리 (STL) 소개표준 템플릿 라이브러리(STL)는 C++의 강력한 기능 중 하나로, 다양한 데이터 구조와 알고리즘을 제공하여 프로그래밍을 더 효율적으로 만들어줍니다.STL에는 여러 가지 유용한 컨테이너, 알고리즘, 반복자 등이 포함되어 있어 다양한 문제를 빠르고 간단하게 해결할 수 있습니다.2. STL의 주요 컨테이너2.1. vector`vector`는 동적으로 크기가 조정되는 배열입니다. 배열처럼 인덱스를 통해 접근할 수 있으며, 크기가 자동으로 조정됩니다.가장 자주 사용되는 컨테이너 중 하나입니다.#include #include using namespace std;int main() { vector v = {1, 2, 3, 4, 5}; ..

Programming/C++ 2025.04.28

C++ : 예외 처리

예외 처리1. 예외 처리 기본 개념예외 처리는 프로그램 실행 중에 발생할 수 있는 오류를 처리하는 방법입니다.예외를 처리하면 프로그램이 예기치 않게 종료되는 것을 방지하고, 오류 상황을 적절하게 처리할 수 있습니다.1.1. try, catch, throw예외 처리는 `try`, `catch`, `throw` 키워드를 사용하여 구현합니다.- `try`: 예외가 발생할 수 있는 코드 블록을 감쌉니다.- `catch`: 예외가 발생했을 때 실행되는 코드 블록을 정의합니다.- `throw`: 예외를 발생시키는 데 사용됩니다.#include using namespace std;int divide(int a, int b) { if (b == 0) { throw "Division by zero er..

Programming/C++ 2025.04.28
728x90
반응형