본문 바로가기
반응형
[C++ 마스터] Day 29: C++에서의 디자인 패턴 디자인 패턴은 소프트웨어 설계에서 자주 발생하는 문제를 해결하기 위한 재사용 가능한 솔루션입니다. 디자인 패턴은 크게 세 가지 유형으로 분류됩니다: 생성 패턴(Creational Patterns), 구조 패턴(Structural Patterns), 행위 패턴(Behavioral Patterns). 1. 생성 패턴 (Creational Patterns)생성 패턴은 객체 생성 메커니즘을 다루며, 객체 생성의 유연성과 재사용성을 향상시킵니다. 1.1 싱글톤 패턴 (Singleton Pattern)싱글톤 패턴은 클래스의 인스턴스를 하나만 만들고, 그 인스턴스에 대한 전역적인 접근을 제공합니다.#include #include class Singleton {private: static Singleton* in.. 2024. 8. 1.
[C++ 네트워크 프로그래밍] Day 25: 프로젝트: 서버 개발 (1) 실시간 채팅 애플리케이션 서버 개발 (계속)이전 단계에서는 클라이언트 부분을 개발했습니다. 이번 단계에서는 서버 부분을 더 발전시키고, 사용자 이름과 메시지를 관리하는 기능을 추가하겠습니다.서버 기능 요구사항사용자 연결 관리: 여러 사용자가 동시에 서버에 연결할 수 있어야 합니다.메시지 중계: 서버는 클라이언트로부터 메시지를 받아 다른 모든 클라이언트에게 중계합니다.사용자 이름 관리: 각 사용자는 고유한 사용자 이름을 가지고 있어야 합니다.메시지 형식 관리: JSON 형식의 메시지를 처리하고, 사용자 이름과 메시지를 구분합니다.서버 클래스 다이어그램+-------------------+| ChatServer |+-------------------+| +start() || +s.. 2024. 8. 1.
[C++ 마스터] Day 26: 멀티스레딩과 동기화 멀티스레딩 (Multithreading)멀티스레딩은 하나의 프로그램이 동시에 여러 작업을 수행할 수 있도록 하는 기능입니다. C++11부터 표준 라이브러리는 멀티스레딩을 지원하는 다양한 기능을 제공합니다. 주요 클래스와 함수로는 thread, mutex, lock_guard, unique_lock 등이 있습니다. 1. 스레드 (Thread)스레드는 프로그램의 실행 단위를 나타냅니다. std::thread 클래스를 사용하여 스레드를 생성할 수 있습니다. 1.1 스레드 생성#include #include using namespace std;void printMessage(const string& message) { cout  2. 뮤텍스 (Mutex)뮤텍스는 상호 배제를 제공하여, 여러 스레드가 동시에.. 2024. 8. 1.
[C++ 성능 최적화 및 고급 테크닉] Day 26: 프로젝트: 고성능 매트릭스 라이브러리 개발 (3) 프로젝트 목표이 단계에서는 매트릭스 라이브러리의 성능을 더욱 향상시키기 위해 추가적인 최적화 기법을 적용하고, 병렬 프로그래밍을 도입합니다. 특히, 다음과 같은 부분을 다룹니다:병렬 프로그래밍 도입: OpenMP를 사용하여 병렬로 행렬 연산을 수행합니다.매트릭스 라이브러리 완성: 라이브러리의 다양한 기능을 통합하고 최적화합니다. Step 1: 병렬 프로그래밍 도입OpenMP를 사용하여 행렬 덧셈과 행렬 곱셈을 병렬로 수행하도록 수정합니다. Matrix.cpp: 병렬 행렬 덧셈#include "Matrix.h"#include Matrix operator+(const Matrix& lhs, const Matrix& rhs) { if (lhs.getRows() != rhs.getRows() || lhs... 2024. 8. 1.
[C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 26: C++로 네트워크 프로그래밍 (소켓 프로그래밍) 소켓 프로그래밍 소개소켓 프로그래밍은 네트워크를 통해 통신하는 소프트웨어를 작성하는 기술입니다. C++에서는 Berkeley 소켓 API를 사용하여 소켓 프로그래밍을 구현할 수 있습니다. 오늘은 TCP/IP 소켓을 사용하여 간단한 클라이언트-서버 애플리케이션을 구현해보겠습니다. TCP 서버 구현1. 서버 소켓 설정TCP 서버는 클라이언트 연결을 수락하고 데이터를 주고받습니다. 서버는 다음 단계를 통해 구현됩니다.소켓 생성소켓 바인딩소켓 리스닝클라이언트 연결 수락데이터 송수신tcp_server.cpp#include #include #include #include #include #define PORT 8080int main() { int server_fd, new_socket; struct so.. 2024. 8. 1.
[C++ 마스터] Day 27: 최신 C++ 표준 (C++11, C++14, C++17, C++20) 기능 소개 C++11 기능C++11은 C++ 언어에 많은 중요한 기능을 도입했습니다. 주요 기능 중 일부를 살펴보겠습니다. 1. 자동 타입 추론 (auto)auto 키워드는 변수의 타입을 자동으로 추론합니다.#include #include using namespace std;int main() { auto x = 10; // int로 추론 auto y = 3.14; // double로 추론 auto z = "Hello, World!"; // const char*로 추론 cout  2. 람다 함수 (Lambda Functions)람다 함수는 익명 함수로, 함수 객체를 간단하게 정의할 수 있습니다.#include #include #include us.. 2024. 8. 1.
[C++ 마스터] Day 24: 프로젝트 - 간단한 콘솔 게임 만들기 (2) 이번 단계에서는 간단한 콘솔 게임 프로젝트를 완성하겠습니다. 어제는 미로 생성과 플레이어 이동을 구현했습니다. 오늘은 게임 루프를 추가하고 승리 조건을 구현하여 게임을 완성할 것입니다. 1. 게임 루프와 승리 조건 추가게임이 종료될 때까지 반복적으로 상태를 업데이트하고 화면을 출력하는 게임 루프를 추가합니다. 플레이어가 출구에 도달하면 게임이 종료됩니다. 코드 업데이트#include #include using namespace std;const int WIDTH = 10;const int HEIGHT = 10;vector> maze = { {'#', '#', '#', '#', '#', '#', '#', '#', '#', '#'}, {'#', 'P', ' ', ' ', '#', ' ', ' ',.. 2024. 8. 1.
[C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 24: gRPC를 이용한 분산 시스템 gRPC 소개gRPC는 Google에서 개발한 고성능, 범용 RPC(Remote Procedure Call) 프레임워크입니다. 이를 통해 서로 다른 시스템 간의 통신을 쉽게 구현할 수 있습니다. gRPC는 HTTP/2를 기반으로 하며, 프로토콜 버퍼(Protocol Buffers)를 사용하여 효율적인 직렬화 및 역직렬화를 제공합니다. gRPC 설치gRPC와 Protocol Buffers를 설치하려면 다음 명령어를 사용합니다.sudo apt-get install -y build-essential autoconf libtool pkg-configgit clone -b v1.39.1 https://github.com/grpc/grpccd grpcgit submodule update --initmakesudo .. 2024. 8. 1.
[C++ 성능 최적화 및 고급 테크닉] Day 24: 프로젝트: 고성능 매트릭스 라이브러리 개발 (1) 프로젝트 개요고성능 매트릭스 라이브러리를 개발하는 프로젝트를 시작하겠습니다. 이 라이브러리는 행렬의 기본 연산(덧셈, 곱셈, 전치 등)을 고성능으로 구현하여 다양한 응용 프로그램에서 사용할 수 있도록 합니다. 프로젝트 목표효율적인 데이터 구조: 행렬을 저장하기 위한 효율적인 데이터 구조를 설계합니다.기본 연산 구현: 행렬 덧셈, 행렬 곱셈, 행렬 전치 등의 기본 연산을 구현합니다.최적화: 루프 언롤링, 메모리 접근 최적화 등 다양한 최적화 기법을 적용합니다.사용자 인터페이스: 사용자가 쉽게 사용할 수 있는 인터페이스를 제공합니다. Step 1: 효율적인 데이터 구조 설계먼저, 행렬을 저장하기 위한 효율적인 데이터 구조를 설계합니다. 행렬은 2차원 배열로 표현할 수 있으며, 이를 클래스 형태로 구현합니다... 2024. 8. 1.
[C++ 네트워크 프로그래밍] Day 24: 프로젝트: 클라이언트 개발 (2) 실시간 채팅 애플리케이션 클라이언트 개발 (계속)이전 단계에서는 기본적인 WebSocket 클라이언트를 구현하였습니다. 이번 단계에서는 클라이언트에 더 많은 기능을 추가하고, 사용자 인터페이스를 개선하겠습니다.추가 기능 요구사항사용자 인터페이스 개선: 더 나은 사용자 경험을 위해 사용자 인터페이스를 개선합니다.사용자 이름 설정: 각 사용자가 고유한 사용자 이름으로 메시지를 전송할 수 있도록 합니다.메시지 형식 지정: 메시지를 JSON 형식으로 전송하여 사용자 이름과 메시지를 구분합니다.클라이언트 클래스 다이어그램+-------------------+| ChatClient |+-------------------+| +connect() || +disconnect() || +s.. 2024. 8. 1.
반응형