C++ Software-Design Study - 1
·
C++
보통의 객체지향 프로그램을 작성한다고 했을 때 "다형성"의 특징을 이용한다. 다형성은 쉽게 말해 하나의 타입으로 여러형태의 객체를 다를 수 있는 특징이다. 코드로 살펴보면 앞으로 그림을 그리는 프로그램을 만든다고 해보자 그림을 그리는 프로그램은 필요한 객체들을 모두 그린다는 요구사항이있다. 현재 필요한 객체는 '사각형' '원'이다. 이러한 요구사항을 가지고 있을 때 객체지향의 다형성을 가지고 어떻게 프로그램을 구현할 수 있을까? 구현방법1. Shape 인터페이스를 만든다. 인터페이스에서는 Draw 함수가 정의되어있다.2. 원, 사각형은 Shape의 함수를 구현한다.3. main 함수에서 각 객체를 그려준다. 코드Shape Classstruct Point{ double x; double y;};cla..
윈도우 소켓 깔끔하게 작성해보기
·
C++/네트워크
#pragma comment(lib,"ws2_32.lib")#include #include #include class WSAInitializer {public: WSAInitializer() { int result = WSAStartup(MAKEWORD(2, 2), &wsaData_); if (result != 0) { throw std::runtime_error("WSAStartup failed"); } } ~WSAInitializer() { WSACleanup(); } WSADATA& GetWSAData() { return wsaData_; }private: WSADATA wsaDa..
Modern C++ Thread 간결하게 사용하기
·
C++/기초
#include #include #include #include #include #include using namespace std::chrono_literals;void ThreadFunction(int threadNumber, std::latch& latch) { for (int i{ 0 }; i threads; for (int i{ 0 }; i  std::jthread를 사용합니다. 이는 C++20에서 도입된 새로운 스레드 클래스로, 자동으로 join을 수행하며 취소 요청을 지원합니다.std::latch를 사용하여 모든 스레드의 완료를 동기화합니다. 이는 C++20에서 도입된 새로운 동기화 프리미티브입니다.std::format을 사용하여 문자열 포매팅을 수행합니다. 이는 C++20의 새..
c++20 간결하게 코드쓰기(1)
·
C++/기초
struct OddAndEvens { std::vector odds, evens; };OddAndEvens separateOddsAndEvens(const std::vector& arr) { std::vector odds, evens; for (int i : arr) { i % 2 == 1 ? odds.emplace_back(i) : evens.emplace_back(i); } return OddAndEvens{ .odds = odds,.evens = evens };}int main(){ std::vector vecUnSplit{ 1,2,3,4,5,6,7,8,9,10 }; auto oddAndEvens{ separateOddsAndEvens(vecUnSplit) }; auto [odds, eve..
다시써보는 에코서버2 window 버전
·
C++/네트워크
이전버전에서 쓰레드를 추가했다. #include #include #include #include #include #include #pragma comment(lib, "ws2_32.lib")auto EchoHandler(SOCKET clientSocket)->void{ int receiveSize; std::array receivedBuffer; while ((receiveSize = ::recv(clientSocket, receivedBuffer.data(), receivedBuffer.size(), 0)) > 0) { ::send(clientSocket, receivedBuffer.data(), receiveSize, 0); std::cout.write(rec..
다시써보는 에코클라이언트 Linux 버전
·
C++/네트워크
#include #include #include #include #include #include #include #include // linux versionint main(){ int sock = 0; sockaddr_in server_addr = { .sin_family = AF_INET, .sin_port = htons(8888), }; std::array buffer{}; std::string message = "Hello, Server!"; // 소켓 생성 if ((sock = socket(AF_INET, SOCK_STREAM, 0)) (&nOpt), sizeof(nOpt)); // 서버 IP 주소 ..
다시 써보는 에코서버 window 버전
·
C++/네트워크
#include #include #include #include #pragma comment(lib, "ws2_32.lib")int main() { WSADATA wsaData; if (::WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { std::cerr (&serverAddress), sizeof(serverAddress)) == SOCKET_ERROR) { std::cerr (&clientAddress), &clientAddressSize)) != INVALID_SOCKET) { std::cout receivedBuffer; while ((receiveSize = ::recv(clientSocket, rec..
비전공자를 개발자로 만들면서...(2부)
·
글쓰기
1부에서는 내 친동생을 개발자로 만들었다면2부에서는 내 여자친구(예비신부)를 개발자로 만들었다. 우선 나와 내 여자친구의 관계에 대해서 말해보면 5년간 연애를 진행 중인 커플이고 현재 둘 다 개발자로 일을 하고 있다. 우리는 대학교 때부터 만나 지금까지 진행 중이다. 내가 대학생 때 여자친구도 대학생이었고 내가 취준생일 때 여자친구도 취준생 그리고 직장인일 때도 둘 다 직장인이어서 다행이도(?) 항상 동일한 신분에서 만날 수 있었다. 그러면 이제 여자친구를 어떻게 개발자로 만들었는지 알려주려고 한다. 여자친구는 서울에 중위권 대학교에서 화학공학과를 전공했다. 무려 화공기사를 가지고 있는 뇌섹녀다. 여자친구의 꿈은 공기업에 입사하는 것이어서 졸업을 하고 본격적으로 공기업을 준비했었다. 그러나 NCS의 벽은..