본문 바로가기
반응형

💻 programming/c++26

[c++] RapidJson 사용하기, c++에서 JSON 파싱하기 JSON은 key, value 쌍으로 이루어진 데이터의 집합입니다. 웹에 데이터를 전송하거나, 간단한 구성 파일을 작성하는 데 주로 JSON 파일이 사용되곤 합니다. 물론 다양한 JSON 파싱 라이브러리가 있지만, 특히 RapidJson 라이브러리는 아래와 같은 장점이 있습니다. 1. 외부 라이브러리를 사용하지 않고 그냥 header 파일만 include 경로에 포함시키면 빌드할 수 있습니다 2. MIT 라이선스를 따르므로 상업적으로 사용하기 쉽습니다 RapidJson을 사용하기 전에 간단히 JSON에 대해 이해해봅시다. 먼저 JSON 문자열을 구성하는 두 가지 기본 데이터 포맷이 있습니다. (JSON object와 JSON array) 먼저 JSON object는 다음의 특징을 가집니다. * 중괄호 {.. 2023. 9. 13.
[c++] TCP/IP 서버 클라이언트 설명 및 예제 코드 (소켓 프로그래밍) TCP(전송 제어 프로토콜)는 두 컴퓨터 간의 안정적인 통신을 설정하는 데 사용됩니다. TCP 서버와 클라이언트 코드를 통해 두 컴퓨터 간의 데이터를 전송할 수 있습니다. 이 문서에서는 C++로 작성된 TCP 서버와 클라이언트의 기본 예제 코드를 제공합니다. TCP 서버 코드 먼저 TCP 서버 코드는 소켓을 생성하고, (1. 소켓 생성) 포트 번호에 바인딩하고, (2. 바인딩) 들어오는 연결을 수신 대기하고, (3. 수신 대기) 들어오는 연결을 수락합니다. (4. 연결 수락) 소켓은 두 컴퓨터 간의 양방향 통신을 허용하는 엔드포인트를 의미합니다. 소켓은 통신 도메인, 소켓 유형 및 프로토콜을 제공하여 만들 수 있습니다. (IP 버전, 포트번호, TCP/UDP 프로토콜 등) 먼저, 통신 도메인은 소켓이 사.. 2023. 3. 20.
[c++] fold expression high-order function 함수형 프로그래밍 (functional programming)에서 함수는 고차 함수 (high-order)와 일차 함수 (first order)로 나뉜다. 고차 함수는 함수를 인자로 받거나 반환하는 형태를 의미하며, 일차 함수는 고차 함수가 아닌 모든 함수를 의미한다. 고차 함수가 필요한 이유는 고차 함수의 인자로 들어온 함수를 통해 데이터를 재귀적 (또는 반복적)으로 처리하기 위함이다. #include auto twice = [](auto f, int v) { return f(f(v)); } auto f = [](int i) { return i + 3; } int main() { std::cout 2021. 8. 5.
[c++] logger 클래스 만들기 #include #include #include #include #include #include using namespace std; enum class LOGLEVEL : int { FATAL, ERRORS, WARN, INFO, DEBUG }; static LOGLEVEL kLogLevel = LOGLEVEL::DEBUG; class LogPrefix { public: LogPrefix(LOGLEVEL loglevel_ = LOGLEVEL::DEBUG) { if(loglevel_ == LOGLEVEL::FATAL) { message = "[FATAL] "; } else if (loglevel_ == LOGLEVEL::ERRORS) { message = "[ERROR] "; } else if (logl.. 2021. 8. 4.
[c++] timer 클래스 만들기 chrono 라이브러리를 이용해서 타이머 클래스를 만들어봅시다. #include #include #include #include typedef std::chrono::steady_clock sclock; //@brief Timer measure time diff between start() and stop() class Timer { public: virtual ~Timer() { } inline void start() { start_time = sclock::now(); } inline void stop() { end_time = sclock::now(); } inline double elapsed_milli() const { return std::chrono::duration_cast(end_time.. 2021. 8. 4.
[c++] thread vs task (thread 와 async) thread와 task는 사용 목적과 추상화 정도가 다르다 thread는 원시적인 병렬처리 방법이고, thread를 사용해 task는 데이터를 동기화하는 방법이다 ⭐ 다시 말하면 데이터를 동기화 할 때는 굳이 개발자가 직접 thread를 생성하고, mutex를 이용하기 보다는 ⭐ c++에서 제공하는 task를 이용하는 것이 좋다 ⭐ 심지어 task를 이용할 때 thread를 생성할 수도 있고, 필요하면 생성하지 않고 동기화 할 수도 있다. thread는 말그대로 병렬처리를 위한 흐름을 생성하고 제어하기 위한 기본적인 함수를 제공한다 (join, detach 등) async와 같은 task는 promise-future 사이에 통신 흐름을 만든다 future에서 get 함수를 호출하여 promise와 동기화.. 2021. 8. 4.
[c++] thread 요즘은 고성능 프로그램을 만들 때 멀티코어를 얼마나 잘 활용하느냐를 중요하게 여깁니다. C++ 11부터는 thread 라이브러리를 지원하여 플랫폼과 독립적으로 thread를 구현할 수 있습니다. thread 특징 thread는 프로세스의 실행 단위에 해당한다 한 프로세스 내에서 동작되는 thread는 메모리를 공유할 수 있다 thread는 독립적인 자원을 수행하므로 각자의 스택과 레지스터 값을 가진다 thread마다 스택을 독립적으로 할당하는 이유 독립적인 실행 흐름을 제공하기 위해 최소 조건으로 스택을 독립적으로 할당해야 합니다. 왜냐하면 스택은 함수 호출 시 전달되는 인자, 되돌아갈 주소, 함수 내 변수등을 저장하기 위한 메모리 공간으로 사용되기 때문입니다. thread의 장점 thread는 프로세스.. 2021. 8. 4.
[c++] lvalue reference and rvalue reference lvalues references and rvalues references in C++ with Examples - GeeksforGeeks l-value and r-value l=value는 객체를 가리키는 메모리 위치를 나타내고, r-value는 메모리 위치에 할당된 값을 나타냅니다. 여기서 참조 (reference)는 이미 존재하는 변수에 다른 이름을 할당하는 것외에 다른 기능은 없습니다. int a = 10; int& lref = a; // 좌측 값 참조 int&& rref = 10; // 우측 값 참조 아래 코드는 좌측 값 참조와 참조된 변수의 주소를 비교하는 코드입니다. 마치 포인터처럼 같은 메모리 주소를 갖는 것을 알 수 있습니다. #include using namespace std; // .. 2021. 8. 4.
[c++] condition variable (조건 변수) condition variable (조건 변수)를 사용하면 c++에서 멀티스레드 간 동기화를 구현할 수 있다 그렇지만 condition variable을 사용하는 것보다는, packaged task나 async와 같이 c++에서 제공하는 task를 이용하는 것이 멀티스레드 간 동기화를 안정적으로 구현하는 방법이라는 점을 명심하자 2021.08.04 - [c++/library] - [c++] thread vs task (thread 와 async) 2020/12/15 - [c++ language/library] - [c++] future 2020/12/15 - [c++ language/library] - [c++] packaged task 2020/12/15 - [c++ language/library] -.. 2020. 12. 17.
반응형