목록C++ (67)
나만의 작은 도서관

개요서버는 마치 식당과도 같다. 식당에서 손님이 오면 손님을 받아 자리로 안내하는 것처럼 서버는 연결 요청을 한 소켓을 연결하고, 손님이 주문한 음식을 만들어 해당 자리에 서빙하는 것처럼, 요청한 작업을 처리하여 해당 소켓으로 처리된 데이터를 전송한다. 이 글에서는 식당으로 비유하며 클라이언트-서버 구조에서 각각 어떻게 통신을 연결하는지 간단히 정리해보고자 한다. 소켓(socket)이란? 소켓은 통신의 극점이며, 통신을 주고받으려면 반드시 필요한 개체이다(핸드폰으로 자주 비유되곤 한다. 식당 비유에 맞게 비유하자면 한 사람이라고 보면 된다). 각 소켓은 IP 주소 + 포트 번호 조합으로 구별하며, 통신을 통해 컴퓨터가 데이터를 수신하면 해당 포트를 사용하는 프로세스를 찾아 작업을 수행한다. 전화를 걸..

목차Winsock이란Winsock을 이용한 서버 열기클라이언트를 서버에 연결하기깃헙 코드Winsock이란?Winsock은 윈도우 환경에서 통신하기 위해 MS에서 제작한 소켓 라이브러리이다. Winsock을 사용하기 위해 다음과 같은 헤더 및 라이브러리를 추가하면 된다. 다음 목차부터 작성하는 클라이언트, 서버 코드엔 해당 및 라이브러리가 추가된 상태로 작성하였다.// Winsock 통신을 위한 헤더들#include #include #include #pragma comment(lib, "ws2_32.lib") +) 참고로, 여기저기 WSA로 시작하는 함수나 타입들이 잔뜩 나올텐데 WSA는 WinSock API의 약자이다.Winsock을 이용한 서버 열기winsock 초기화Winsock을 사용해 통신하기 위..

typedef 키워드typedef 키워드는 C언어에서 넘어온 키워드이며, 특정 타입의 별칭을 정의하는 키워드이다. 복잡한 타입을 하나의 이름으로 간결하게 표현하고 싶을 때나 같은 타입이라도 이름을 달리 부여하여 코드의 가독성을 높일 때 사용한다. typedef 키워드의 사용법은 다음과 같다. typedef 선언부// typedef 별칭을_지어줄_타입 별칭_이름// 복잡한 타입: [, , , ...]typedef std::vector> pairlist_t;// 같은 타입, 다른 이름도 가능하다.typedef std::vector numlist_t;typedef std::vector numlist_t2; typedef 사용int main(){ pairlist_t pairlist; // std::vec..

네임스페이스란?네임스페이스(namespace)는 한국말로 "이름 공간"이며, 단어에서 알 수 있듯 사용한 객체(함수나 변수와 같은)가 소속된 공간의 이름을 말한다. 코드의 양이 많아지거나 많은 사람들이 협력하는 프로젝트인 경우, 같은 이름으로 선언한 함수들이 발생할 수 있는데, 이때 네임스페이스를 이용하여 같은 이름의 함수들을 구분할 수 있다. 네임스페이스의 사용하는 방법은 아래 코드와 같다. 네임스페이스 선언부// namespace 네임스페이스_이름{ // 코드1// 코드2// ...// }namespace myNamespace{ int x = 123; void print(){ std::cout 네임스페이스에 정의된 객체 사용법// 네임스페이스_이름::함수_이름int main(..

두 포인터(Two-pointer)란?두 포인터(Two Pointer)는 두 개의 포인터를 사용하여 문제를 해결하는 알고리즘 기법이다. 두 포인터는 일반적으로 정렬된 배열에서 사용되며, 특정 조건을 만족하는 구간이나 조합을 찾는 문제에서 활용한다. 문제 유형으로는 부분합 찾기나 두 수의 합 등이 있다. 주 목표는 최적화두 포인터는 다른 알고리즘이랑 느낌이 살짝 다르다. 다른 알고리즘들은 특정 문제를 해결하기 위해 사용한다면, 두 포인터는 해결 가능한 문제의 시간복잡도를 줄이기 위해 사용한다. 즉, 최적화를 위한 알고리즘이며 일반적으로 O(N^2) -> O(N)으로 줄이는 것이 목표다. 동작방식두 포인터를 사용하는 상황은 다양하다. 아래 예제는 합이 9가 되는 구간을 찾는 경우이다. 1. 초기화 시작과 끝..

위상 정렬(Topological Sorting)이란? 위상 정렬(Topological Sorting)은 방향 그래프(Directed Graph)의 모든 정점을 간선의 방향을 거스르지 않도록 일렬로 정렬하는 방법이다. 방향성 있는 비순환 그래프(DAG, Directed Acyclic Graph)에서 사용할 수 있으며, 정렬 기준은 선행 정점이 후행 정점보다 먼저 나오는 순서를 따른다. 예를 들어, A 작업을 먼저 끝낸 후에 B 작업을 수행해야 하는 경우, A가 B보다 먼저 나오도록 정렬한다. 위상 정렬은 부분 순서들을 만족하는 전체 순서를 구하는 문제에서 활용되며, 문제 유형은 과목 수강 순서나 프로젝트 작업 순서 등이 있다. 동작방식(아래 동작방식의 예는 BFS를 기반으로 설명한다. DFS로 구현하는 방..