Outdated 104

[C++ Core] 함수 개체(function object)와 람다 표현식(lambda expression)

[C++ Core] 함수 개체(function object)와 람다 표현식(lambda expression)함수 개체함수 개체(function object)란, operator()를 오버로드한 개체를 의미한다. 펑터(functor)라고도 한다. 다음은 가장 간단한 함수 개체이다.struct Foo { void operator()() { } }; // 실제 사용법 Foo a; a(); 그럼 이와 같은 함수 개체는 왜 사용하는 것일까? 바로, 성능 때문에 사용하는 것이다. 특히, 함수 개체는 STL 알고리즘을 이용할 때 유용하다. STL 알고리즘의 어떤 버전은 마지막 인자로 함수를 받는다. 가령 std::for_each()나 std::count_if() 말이다. 여기에 함수 개체를 넘겨주면 그 바디가 인라인..

[Network] IPv4(Internet Protocol version 4)

[Network] IPv4(Internet Protocol version 4)IPv4는 우리가 흔히 말하는 IP 주소를 뜻한다. OSI 7 계층에선 네트워크 계층에 속하며, TCP/IP 계층에선 인터넷 계층에 속하는 비연결지향 프로토콜(connectionless protocol)이다. 여기서, 비연결지향 프로토콜이라는 것은 상대에게 연락 없이 그냥 데이터를 전송하고 끝내는 프로토콜이다. 반대로는 연결지향 프로토콜(connection-oriented protocol)이 있다.많이 접해본 개념이기에 독자 대부분이 기본적인 것은 잘 알 것이라고 생각한다. IP 주소의 길이는 32비트이며, 8비트 단위로 점을 찍어 표시(dotted decimal)한다. 32비트면 약 42억 7천만개의 장비에 할당이 가능하다. ..

Outdated/Network 2018.08.30

[C++ Core] 상수 구문 - new 연산자

[C++ Core] 상수 구문 - new 연산자자유 영역변수들은 모두 각자만의 유효범위(scope)와 수명주기(lifetime)가 존재한다. 지역 변수인 경우에는 선언된 유효범위를 벗어나게 되면 자동으로 없어진다. 하지만, 간혹 유효범위와 독립적으로 존재하는 변수들이 유용할 때가 있다. 가령 함수 안에 있는 객체를 반환하는 경우말이다. 그런 변수들은 스택 대신 자유 영역(free store)에 존재하며 이 영역은 힙(heap), 동적 메모리(dynamic memory)라고도 불린다. 자유 영역에 존재하는 변수를 만드려면 new와 delete 연산자를 사용하면 된다.// C11 : 중괄호 초기자를 통해 초기화를 할 수 있다. int* ip = new int{ 2 }; // new[]를 이용하면 연속된 메모..

[C++ Core] 상수 구문 - const vs constexpr

[C++ Core] 상수 구문 - const vs constexpr상수 구문C++에서는 상수(constant)의 의미를 부여하기 위해 두 가지의 메커니즘을 제공한다.constexpr : 컴파일 시간에 평가한다.const : 해당 유효범위 내에서는 수정할 수 없다. 불변성을 강조한다.상수 구문은 컴파일러가 평가(evaluate)할 수 있으며, 정수, 부동소수점 수, 열거형으로 시작하여야 하며, 연산자나, 값을 결과로 생산하는 constexpr 함수로 결합할 수 있다.상수 구문은 다음의 이유 때문에 쓰인다.상수는 코드의 가독성을 높인다. 특히, 마법의 숫자(magic number)를 피할 수 있다.상수는 유지보수를 쉽게 한다.멀티 스레드 시스템에서 개체 간 자원 경쟁을 피할 수 있다.가끔 컴파일 시간에 무언..

[Network] OSI 참조 모델(OSI reference model)과 TCP/IP

[Network] OSI 참조 모델(OSI reference model)과 TCP/IPOSI 참조 모델OSI 참조 모델은 ISO에서 만든 모델로, 컴퓨터 사이의 통신 단계를 7개의 계층으로 분류하고, 각 계층별 기능을 정의해 놓은 것을 말한다. 7개의 계층이기 때문에 OSI 7 계층이라고도 부른다.계층이름역할주요 프로토콜7응용 계층응용 프로그램과 통신 프로그램간 인터페이스 제공HTTP, FTP6표현 계층데이터의 표현 및 암호화 방식ASCII, MPEG, SSL5세션 계층세션의 시작 및 종료 제어TCP session setup4전송 계층종단 프로그램 간의 데이터 전달TCP, UDP3네트워크 계층종단 장비 간의 데이터 전달IP, ICMP2데이터 링크 계층인접 장비와 연결을 위한 논리적 사양Ethernet, ..

Outdated/Network 2018.08.18

[C++ Core] POD(plain old data), 표준 레이아웃 타입(standard layout type), 간단한 타입(trivial type)

[C++ Core] POD(plain old data), 표준 레이아웃 타입(standard layout type), 간단한 타입(trivial type)PODPOD(plain old data)란, 메모리 상에서 연속적인 바이트 열을 말한다. 이따금씩 개체를 POD로 취급해야 할 때가 있다. 가령 실행 시간 다형성이나 유저가 정의한 복사 의미론 등과 같은 진보된 의미론 문법이 필요없을 때말이다. 왜냐하면, POD로 취급하면 하드웨어에서 좀 더 효율적으로 개체를 옮기거나 복사할 수 있기 때문이다. 즉, POD는 클래스 레이아웃이나 유저가 정의한 생성, 복사, 이동 의미론의 복잡성에 대한 고려 없이 '데이터 자체'로 취급할 수 있는 개체이다.POD 개체는 다음 조건을 갖춰야 한다.표준 레이아웃 타입(stan..

[C++ Core] 우측 값 레퍼런스(rvalue reference)

[C++ Core] 우측 값 레퍼런스(rvalue reference)좌측 값과 우측 값본 설명에 들어가기 전 좌측 값(혹은 좌변 값, left-value)과 우측 값(혹은 우변 값, right-value)이 무엇인지 먼저 알 필요가 있다. 좌측 값이란 대입 연산자 왼쪽에 올 수 있는 값들을 얘기한다. 즉, 메모리가 할당되는 대상들이다. 우측 값은 좌측 값을 제외한 모든 것을 얘기한다.int i3 = 0; // i3는 좌측값, 0은 우측값이다. int i4 = i3; // i3는 여기서 우측값으로 사용된다. // 즉, i3 변수에 저장된 값이 사용되는 것이다. 우측 값 레퍼런스우측 값 레퍼런스란, 이런 우측값들을 참조할 수 있다는 얘기다. 특히, 우측 값들 중 임시 값(혹은 임시 객체)들에 대해 의미가 있..

[C++ Core] 타입 추론(type deduction) - auto와 decltype

[C++ Core] 타입 추론(type deduction) - auto와 decltype타입 추론 : auto 그리고 decltype()C++11부터 C++은 구문으로부터 타입을 추론할 수 있다. 바로 auto와 decltype()이다. 이 메커니즘이 제공됨으로써 더욱 간결하고 효율적인 코드 작성이 가능해졌다. 두 메커니즘이 추론하는 타입은 모두 컴파일러가 이미 알고있는 구문의 타입만을 보고한다.auto 타입 지정자변수를 초기화할 때, 명시적 타입을 적는 대신 auto 타입 지정자를 넣을 수 있다. auto는 그것의 초기자로부터 개체의 타입을 추론하게 되는데, 타입은 변수, const나 constexpr일 수 있다. 하지만 구문의 타입은 레퍼런스가 될 수 없다. 왜냐하면 레퍼런스는 암시적으로 구문에서 참..

[Review] Programming Principles and Practice Using C++(비야네 스트롭스트룹 저) - 리뷰

Programming Principles and Practice Using C++(비야네 스트롭스트룹 저) - 리뷰 Programming Principles and Practice Using C++대상 독자C++을 배우려고 하는 프로그래밍 입문자책 소개C++의 창시자 비야네 스트롭스트룹이 프로그래밍 입문자를 대상으로 쓴 책이다. 저자는 C++을 이용해 (책 제목처럼)프로그래밍의 원칙과 여러 노하우를 전수해주고 있다. 이 책에서는 C++11, C++14표준을 반영하여 모던 C++을 빠르게 익힐 수 있도록 도와주고 있다. 핵심 언어에서부터 표준 라이브러리의 대부분을 살펴보게 되므로, 이 책 한 권을 뗀다면 입문 수준은 뗄 것이라 생각한다. 또한, 상향식 접근으로 입문자에겐 어려울 수 있는 로우레벨보단 하이레..

Outdated/Book 2018.02.05

[Review] 모던 C++ 프로그래밍 입문(음두헌 저) 리뷰

모던 C++ 프로그래밍 입문(음두헌 저) - 리뷰모던 C++ 프로그래밍 입문책 소개pclaf라는 WinAPI 프레임워크를 이용해 GUI 프로그래밍과 모던 C++을 익힐 수 있는 책이다. 단계별로 진행하면서 카드 게임을 완성하고 더불어 객체지향 개념도 정립할 수 있게 도와준다. STL과 일반화 프로그래밍도 소개해주고 있으며, 다양한 예제로 실력 향상을 도와주는 책이다.챕터 별로 '실습 과제 - 필수 문법 - 응용 과제 - 연습 문제'로 구성되어 있다. 실습 과제 전, 비유를 통해 이론적인 내용들을 쉽게 설명한다. 실습 과제는 따라하면서 객체지향 개념을 습득하는 과정으로 되어 있고, 필수 문법은 챕터 별 필수적인 문법을 예제 위주로 다루며, 응용 과제에서는 실습 과제와 필수 문법에서 다룬 문법 요소들을 응용..

Outdated/Book 2018.01.19