분류 전체보기 262

[TCP/IP 소켓 프로그래밍] (3) TCP 기반 서버 및 클라이언트 - 1

출처 : 열혈 TCP/IP 소켓 프로그래밍 윤성우 저 윈도우 기반의 소켓 프로그래밍입니다. TCP 기반 서버 및 클라이언트 구현 예시를 공부합니다. TCP/IP 프로토콜 스택 본 내용과 관련 있는 5계층과 프로토콜 스택은? 어플리케이션 계층 - Port 번호 전송 계층 - TCP/UDP 프로토콜 네트워크 계층 - IP 주소 링크 계층 - MAC 주소 물리 계층 TCP란 관련 내용: 2021.01.06 - [Computer Network] - [네트워크] 전송 계층 (2) TCP 프로토콜 / 혼잡 제어 [네트워크] 전송 계층 (2) TCP 프로토콜 / 혼잡 제어 TCP (Transmission Control Protocol) - 전송계층에서 신뢰성있는 통신을 위한 프로토콜 일대일 연결 지향적 (point ..

[TCP/IP 소켓 프로그래밍] (2) 소켓 프로토콜과 데이터 전송 특성

출처 : 열혈 TCP/IP 소켓 프로그래밍 윤성우 저 윈도우 기반의 소켓 프로그래밍입니다. 각 소켓 생성 과정에 필요한 정보에 대해 정리합니다. 프로토콜 이란 네트워크 통신을 위한 상호간의 규약 1. 소켓 생성 SOCKET socket(int af, int type, int protocol); af: 프로토콜 체계 (Protocol Family) type: 소켓 데이터 전송 방식 protocol: 프로토콜 - 첫번째 인자: 프로토콜 체계 PF_INET: IPv4 인터넷 프로토콜 PF_INET6: IPv6 인터넷 프로토콜 PF_LOCAL: 로컬 통신을 위한 UNIX 프로토콜 PF_PACAKET: Low Level 소켓을 위한 프로토콜 PF_IPX: IPX 노벨 프로토콜 - 두번째 인자: 타입 TCP (SO..

[TCP/IP 소켓 프로그래밍] (1) 소켓 생성

출처 : 열혈 TCP/IP 소켓 프로그래밍 윤성우 저 윈도우 기반의 소켓 프로그래밍입니다. 본 편에서는 기본적인 소켓 생성 과정과 기본 인터페이스에 대해 정리합니다. 소켓 이란 네트워크를 연결하기 위해 사용되는 인터페이스. 소켓에 주소체계, IP, 포트번호 등을 할당하여 사용한다. IP 주소와 포트번호를 할당하는 이유 IP 주소는 네트워크를 식별하고 목적지 호스트에게 전달하기 위해 사용한다. IP 주소만으로 호스트를 특정할 수 있으며 위와 같은 전달 역할은 네트워크의 라우터가 수행한다. 하지만, 같은 호스트 내에서도 여러 어플리케이션이 동작할 수 있다. 따라서 각 어플리케이션은 독립적인 포트번호를 할당받아 수신된 메세지가 자신의 어플리케이션에 도달할 수 있도록 한다. 위와 같은 포트 번호를 구분하여 메세..

[Modern C++] (3-2) 현대적 C++에 적응하기

현대적 C++ 기능을 잘 쓸 수 있도록 관련 내용을 정리한다. - 목록 1. iterator보다 const_iterator를 선호한다. 2. 예외를 방출하지 않을 함수는 noexcept로 선언한다. 3. 가능하면 항상 constexpr을 사용한다. 4. const 멤버 함수를 스레드에 안전하게 작성한다. 5. 특수 멤버 함수들의 자동 작성 조건을 숙지한다. 1. iterator보다 const_iterator를 선호한다. 원소를 바꿀 필요가 없는 반복자를 사용하는 함수에 const_iterator를 사용하도록 한다. cbegin()과 cend()는 const_iterator를 반환한다. std::vector values; // ... auto iter = std::find(values.cbegin(), v..

Advanced C++ 2021.03.26

[Modern C++] (3-1) 현대적 C++에 적응하기

현대적 C++ 기능을 잘 쓸 수 있도록 관련 내용을 정리한다. - 목록 1. 객체 생성시 괄호와 중괄호의 차이점을 안다. 2. 0과 NULL보다 nullptr을 선호한다. 3. typedef보다 별칭 선언을 선호한다. 4. 범위 없는 enum보다 범위 있는 enum을 선호한다. 5. 정의되지 않은 비공개 함수보다 삭제된 함수를 선호한다. 6. 재정의 함수들을 override로 선언한다. 1. 객체 생성시 괄호와 중괄호의 차이점을 안다. - C++11에서 변수 초기화 방법 // 괄호와 중괄호를 이용한 초기화 int x(0); int y = 0; int z{ 0 }; int w = { 0 }; 중괄호를 이용한 초기화의 특징: 균일 초기화 Uniform Intialization 모든 초기화에 사용가능한 단 한..

Advanced C++ 2021.03.25

[C++ 클래스] 템플릿 클래스와 전방 선언

템플릿 클래스 클래스 선언이 템플릿 인자와 함께 선언되어 인자만 달리하여 다른 클래스를 정의 및 생성 가능하다. - 임의의 원소를 담는 리스트 클래스 template class List { public: List(long size = DEFAULT_LIST_CAPACITY); ~List(); long Count() const; Item& Get(long index) const; Item& First() const; Item& Last() const; bool Includes(const Item&) const; void Append(const Item&); void Prepend(const Item&); void Remove(const Item&); void RemoveLast(); void RemoveF..

Advanced C++ 2021.03.24

[디자인 패턴] 행동 패턴 (8) 반복자 Iterator

반복자 (Mediator) 패턴 1. 의도 자료구조에서 흔히 쓰이는 패턴으로 속한 원소에 대한 순차적 접근 방법을 제공하고 방법에 대한 표현을 외부에 노출하지 않는다. 2. 활용 리스트와 같이 원소에 대한 접근과 다음 원소로 이동하는 방법이 존재하는 자료구조에서 모든 원소를 순차적으로 접근하는 방법을 구현한다. 순차적 접근을 통해 반복자 함수 내부에서 삽입, 삭제 등의 연산을 포함시킬 수 있다. 이를 위해 반복자는 현재 몇 번째 원소를 가리키고 있는지, 자료구조의 끝에 도달했는 지를 판별한다. - ListIterator와 List 반복자는 어떤 자료구조냐에 따라 순회 방법이 다르다. List와 같이 선형적 탐색 혹은 반대 방향으로 가능할 수도 있고 Tree같은 경우 전위, 중위, 후위 탐색 혹은 레벨 탐..

[디자인 패턴] 행동 패턴 (7) 중재자 Mediator

중재자 (Mediator) 패턴 1. 의도 같은 집합에 속해있는 객체들의 상호작용을 중재해주는 객체를 정의하고 상호작용을 하는 객체 간 결합도를 낮추도록 한다. 2. 활용 객체간의 상호작용에는 먼저 사건이 발생하고 다른 객체가 영향을 받는 등의 종속성이 존재하게 되는데, 이 복잡한 관계를 중재하고 객체 들은 서로 참조자를 관리하지 않고 중재자 객체만 알도록 하여 결합도를 낮추도록 한다. 결합도를 낮추게 되면 관리되는 객체들의 재사용성을 증가시킬 수 있다. - FontDialogDirector 클래스 FontDialogDirector 객체는 대화 상자를 구성하는 위젯 간의 상호작용을 중재한다. 대화 상자를 구성하는 요소중 ListBox는 마우스로 클릭할 수 있는 모든 리스트 정보를 관리한다. 사용자가 마우..

[Modern C++] (2) auto 키워드

auto 키워드 C++ 11에 추가된 기능으로 함수 반환 값이나 초기화시 데이터 타입을 자동으로 확인하여(연역하여) 변수 타입을 지정해준다. auto 키워드의 예시 auto x = 5; // int auto f = 1.0f // float auto d = 5.0 // double int func() {return 0;} auto res = func(); // 함수 결과에 대한 타입 연역 auto foo = func; // 함수 포인터 auto reset = [](Type* ptr) { ptr->reset(); } // 람다 클로저 함수 타입 연역을 위해 반드시 초기화값이 필요한 것이 특징이다. 타입을 직접 타자로 칠 때, 타입명이 길다면 불편한 점이 있는데 이를 자동으로 지정해주는 편함이 있다. 반복자의..

Advanced C++ 2021.03.22

[Modern C++] (1) 형식 연역

템플릿 함수 및 클래스와 C++11/14 혹은 그 이상의 버전에서 사용되는 auto 키워드에서 추론되는 형식 연역을 정리한다. 템플릿 형식 연역 템플릿 선언 template // T에 대한 형식 연역 void f(ParamType param); // 전달된 param에 대한 형식 ParamType 호출 방식 f(expr); // expr 이라는 표현식을 사용 경우 1. ParamType이 포인터 혹은 참조 형식인 경우 단순 참조 형식 T& template void f(T& param); 변수 선언 함수 호출 연역된 T 형식 param의 형식 int x = 27; f(x); int int & const int cx = x; f(cx); const int const int & const int& rx = x..

Advanced C++ 2021.03.19