본문 바로가기
반응형

-----ETC-----/C++ 고급 프로그래밍과 응용 프로젝트 시리즈31

[C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 11: 디자인 패턴 심화 - 옵저버 패턴 (Observer Pattern) 옵저버 패턴 (Observer Pattern)옵저버 패턴은 행위 패턴 중 하나로, 객체 간의 일대다 관계를 정의합니다. 한 객체의 상태 변화가 다른 객체들에 자동으로 통지될 수 있도록 합니다. 이를 통해 객체들 간의 느슨한 결합을 유지하면서도 이벤트 기반 프로그래밍을 할 수 있습니다. 옵저버 패턴의 특징일대다 관계: 하나의 주체(Subject) 객체가 다수의 옵저버(Observer) 객체에 상태 변화를 통지합니다.느슨한 결합: 주체와 옵저버는 서로 독립적으로 동작하며, 주체는 옵저버가 누구인지 알 필요가 없습니다.이벤트 기반: 상태 변화가 발생할 때 자동으로 통지가 이루어집니다.옵저버 패턴의 구조Subject (주체): 상태를 가지고 있으며, 상태 변화 시 옵저버에게 통지합니다.Observer (옵저버).. 2024. 8. 1.
[C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 12: 디자인 패턴 심화 - 데코레이터 패턴 (Decorator Pattern) 데코레이터 패턴 (Decorator Pattern)데코레이터 패턴은 객체에 동적으로 새로운 기능을 추가할 수 있도록 하는 구조 패턴입니다. 이 패턴을 사용하면 서브클래싱 없이도 객체의 기능을 확장할 수 있습니다. 데코레이터 패턴은 기본 객체와 그 객체의 데코레이터를 동일한 인터페이스로 취급하여 기능을 확장합니다. 데코레이터 패턴의 특징동적 기능 확장: 객체의 기능을 동적으로 확장할 수 있습니다.개방-폐쇄 원칙: 기존 코드의 수정 없이 새로운 기능을 추가할 수 있습니다.유연한 설계: 상속 대신 합성을 사용하여 기능을 확장합니다.데코레이터 패턴의 구조Component (구성 요소): 기본 객체 인터페이스 또는 추상 클래스ConcreteComponent (구체적 구성 요소): 기본 객체의 구체적 구현Decor.. 2024. 8. 1.
[C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 9: 디자인 패턴 심화 - 팩토리 패턴 (Factory Pattern) 팩토리 패턴 (Factory Pattern)팩토리 패턴은 객체 생성 로직을 별도의 팩토리 클래스로 분리하여, 객체 생성의 유연성과 확장성을 높이는 디자인 패턴입니다. 이는 객체 생성 방식을 캡슐화하여 클라이언트 코드가 객체 생성 방법에 의존하지 않도록 합니다. 팩토리 패턴의 종류단순 팩토리 패턴 (Simple Factory Pattern)팩토리 메서드 패턴 (Factory Method Pattern)추상 팩토리 패턴 (Abstract Factory Pattern)단순 팩토리 패턴 (Simple Factory Pattern)단순 팩토리 패턴은 객체 생성을 위한 메서드를 제공하는 클래스를 정의합니다. 이 클래스는 클라이언트 코드 대신 객체를 생성합니다. 단순 팩토리 패턴 예제#include #include .. 2024. 8. 1.
[C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 10: 디자인 패턴 심화 - 전략 패턴 (Strategy Pattern) 전략 패턴 (Strategy Pattern)전략 패턴은 행위 패턴 중 하나로, 알고리즘을 각각의 클래스에 캡슐화하여, 클라이언트가 알고리즘을 독립적으로 변경할 수 있도록 합니다. 이를 통해 알고리즘의 변화가 클라이언트 코드에 영향을 미치지 않도록 합니다. 전략 패턴의 특징알고리즘 캡슐화: 알고리즘을 독립적인 클래스로 캡슐화하여 교체가 용이합니다.유연성 제공: 런타임에 알고리즘을 동적으로 변경할 수 있습니다.클래스 분리: 클라이언트 코드와 알고리즘 클래스를 분리하여 코드의 가독성과 유지보수성을 높입니다.전략 패턴의 구조Context: 전략을 사용하는 클래스Strategy: 알고리즘을 정의하는 인터페이스ConcreteStrategy: 구체적인 알고리즘을 구현하는 클래스전략 패턴 UML 다이어그램+------.. 2024. 8. 1.
[C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 7: R-값 참조와 이동 시멘틱 R-값 참조 (Rvalue References)R-값 참조는 C++11에서 도입된 기능으로, 임시 객체나 이동할 수 있는 리소스를 참조하는 데 사용됩니다. R-값 참조를 사용하면 불필요한 복사 연산을 줄이고, 성능을 최적화할 수 있습니다. R-값 참조의 기본 사용법R-값 참조는 && 연산자를 사용하여 정의됩니다.#include void printValue(int& x) { std::cout  이 예제에서 printValue 함수는 L-값 참조와 R-값 참조를 모두 처리할 수 있습니다. a는 L-값으로, 20과 a + 30은 R-값으로 전달됩니다.이동 시멘틱 (Move Semantics)이동 시멘틱은 R-값 참조를 활용하여 객체의 소유권을 이전하는 방법입니다. 이를 통해 불필요한 복사 연산을 피하고,.. 2024. 8. 1.
[C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 8: 디자인 패턴 심화 - 싱글톤 패턴 (Singleton Pattern) 싱글톤 패턴 (Singleton Pattern)싱글톤 패턴은 특정 클래스의 인스턴스가 하나만 존재하도록 보장하고, 그 인스턴스에 대한 전역 접근점을 제공하는 디자인 패턴입니다. 이는 전역 상태를 관리하거나, 리소스를 공유해야 하는 상황에서 유용합니다. 싱글톤 패턴의 특징유일한 인스턴스: 클래스의 인스턴스가 하나만 존재함을 보장합니다.전역 접근점: 유일한 인스턴스에 대한 전역 접근을 제공합니다.게으른 초기화: 인스턴스가 처음 필요할 때 생성됩니다. 기본 싱글톤 패턴 구현싱글톤 패턴을 구현하는 방법은 여러 가지가 있지만, 여기서는 가장 일반적인 구현 방법을 소개합니다. 싱글톤 클래스 정의#include #include class Singleton {private: static Singleton* ins.. 2024. 8. 1.
[C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 5: 범위 기반 for 루프와 초기화 리스트 범위 기반 for 루프 (Range-Based For Loop)범위 기반 for 루프는 C++11에서 도입된 기능으로, 컨테이너나 배열의 모든 요소를 쉽게 반복할 수 있도록 합니다. 이는 코드의 가독성을 높이고, 반복문을 간결하게 작성할 수 있게 해줍니다. 범위 기반 for 루프의 기본 구조범위 기반 for 루프의 기본 구조는 다음과 같습니다:for (declaration : range) { // 반복할 코드}declaration: 반복 변수 선언range: 반복할 범위 (컨테이너, 배열, initializer_list 등) 범위 기반 for 루프 예제다음 예제는 벡터의 요소를 출력하는 범위 기반 for 루프를 보여줍니다.#include #include int main() { std::vect.. 2024. 8. 1.
[C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 6: constexpr과 상수 표현식 C++11부터 도입된 constexpr 키워드는 컴파일 시간에 평가될 수 있는 상수 표현식을 정의할 수 있게 합니다. 이는 프로그램의 성능과 안정성을 높이는 데 유용합니다. 오늘은 constexpr의 사용법과 상수 표현식에 대해 자세히 학습하겠습니다.constexpr (상수 표현식)constexpr의 기본 사용법constexpr 키워드는 변수, 함수, 생성자 등에 사용할 수 있습니다. constexpr로 선언된 변수는 반드시 컴파일 시간에 값을 결정할 수 있어야 합니다. 기본 예제#include constexpr int square(int x) { return x * x;}int main() { constexpr int result = square(5); std::cout  이 예제에서 .. 2024. 8. 1.
[C++ 고급 프로그래밍과 응용 프로젝트] Day 3: SFINAE와 개념 SFINAE(Substitution Failure Is Not An Error)는 템플릿 메타프로그래밍에서 중요한 개념으로, 템플릿 인자 치환 실패가 오류를 일으키지 않도록 하는 원리입니다. 이를 통해 조건부로 템플릿을 선택할 수 있습니다. 오늘은 SFINAE와 함께 개념(Concepts)에 대해 학습하겠습니다.SFINAESFINAE란?SFINAE는 "Substitution Failure Is Not An Error"의 약자로, 템플릿 인자 치환이 실패하더라도 이를 오류로 간주하지 않고, 다른 템플릿이 선택될 수 있도록 합니다. 이를 통해 템플릿 특수화나 함수 오버로딩 시 특정 조건에 따라 선택할 수 있습니다. SFINAE의 기본 사용법다음은 SFINAE를 사용하여 특정 타입에 대해서만 템플릿을 활성화하.. 2024. 8. 1.
반응형