전체 글

전체 글

    [C++ Primer Plus] 9. Memory Models and Namespaces

    Seperate Compilation 1챕터에서 말했듯, C++는 각 파일마다 컴파일을 따로(.c → .o)할 수 있다. 이런 방식덕분에 소스코드 하나를 수정하면 그거만 컴파일하고 링킹을 해서 실행파일을 만들 수 있다. Unix나 Linux의 make가 이런 관리를 도와준다. 한 소스 코드의 내용을 나눠야 한다고 생각해보자. 예를 들어, 클래스 구현부와 main()을 나누는 것이다. 이런 상황에서는 main에서 클래스 구현부를 알 필요가 있다. 이런 상황을 해결해주는 것이 #include 기능이다. 즉, 총 3개의 파일로 나눠질 것이다. 클래스의 정의와 메소드의 프로토타입을 담은 .hpp 파일 클래스 구현 코드를 담은 .cpp 파일 클래스 메소드를 사용하는 .cpp 파일 헤더 파일에는 주로 다음의 내용을..

    [C++ Primer Plus] 8. Adventures in Functions

    C++ Inline Functions Inline Functions은 프로그램의 속도를 올리기 위한 C++ 기능이다. 일반 함수와 인라인 함수의 차이점은 문법 보다는 컴파일러가 다루는 방법이다. 프로그램을 빌드하고 프로그램을 실행한다. 그러다가 function call에 다다르면 프로그램은 현재까지 수행한 명령 지점을 저장하고 매개변수로 넣은 값들을 stack에 저장한다. 그리고 함수의 실행 지점으로 날라가서 함수를 실행시킨다. 함수가 끝나면 아까 저장한 명령 지점을 불러내서 그쪽으로 돌아간다. 이런 과정들이 함수의 오버헤드다. 즉, 속도가 저하될 수 있는 지점이다. Inline function은 함수 호출 오버헤드를 해결하는 방법이다. 컴파일러가 인라인 함수 호출 시마다 함수 코드 자체를 그곳에 복사하..

    [C++ Primer Plus] 7. Funtions: C++'s Programming Modules

    Function Review 함수를 사용하려면 다음 절차를 거친다. 함수를 정의한다. 함수 프로토타입을 소스코드 서두에 쓴다. 함수를 호출한다. Why Prototypes? 함수 프로토타입은 컴파일러에게 함수 인터페이스를 알려주는 역할이다. 어떤 값이 리턴 되는지, 어떤 타입의 매개변수들을 받아야 하는지 등을 알려준다. 그러면 왜 프로토타입을 쓰는지 궁금할 수 있다. 그냥 main()에서 함수를 쓸 때마다 거기가서 찾아보면 되지 않나? 컴파일러는 그렇게 돌아가지 않는다. 너무 비효율적이기 때문이다. 애초에 함수의 정의가 다른 파일에 있을 수도 있다. 그럼 main() 위에 바로 함수를 정의하면 컴파일 되던데? 그건 맞다. 하지만 이는 별로 선호되지 않는다. main()이라는 주요 과정을 바로 볼 수 없기..

    [C++ Primer Plus] 10. Objects and Classes

    답해야 할 질문 new와 malloc()의 차이가 무엇인가 Abstraction, 추상화란 무엇인가 inline 메소드는 어떻게 작동하는가 enum class는 enum과 무엇이 다른가, 왜 필요한가 여는 글 OOP는 프로그램 디자인에 대한 하나의 방법일 뿐이다. C++은 프로그래머가 OOP적 접근을 더욱 쉽게 할 수 있도록 여러 기능을 추가했다. Abstraction Encapsulation and data hiding Polymorphism Inheritance Reusability of code class는 C++가 이러한 특징들을 한데모아 구현한 집합체다. Procedural and Object-Oriented Programming 절차지향적 접근은 먼저 어떤 일을 해야할 지 결정하고 나서 어떻게..

    malloc(), new

    'new' keyword new는 C++에서 등장한 키워드로 C의 malloc()을 대신한다. A* ptr = (A*)malloc(sizeof(A)); // malloc()을 활용한 동적 메모리 할당 A* ptr = new A; // new을 활용한 동적 메모리 할당 기본적으로 malloc()과 new의 차이점은 2개다. malloc()은 함수지만 new는 연산자다. 그래서 new는 연산자 오버로딩도 가능하다. new는 클래스의 생성자를 호출해준다. 이로 미뤄보아 new 연산자를 굳이 추가한 이유는 2가지를 들 수 있겠다. malloc()에 비해 문법이 간결하다. OOP는 C++의 주요 컨셉 중 하나이고 new는 오브젝트를 동적할당할 때 생성자 호출을 간단하게 구현해준다. 그렇다면 'new'는 mallo..

    I/O multiplexing: select(), poll(), kqueue()

    select() 특징 등록한 fd를 전부 체크해서 이벤트를 알아내야 한다. 커널 공간과 유저 공간 사이에 데이터 복사가 일어난다. 사용이 간편하고 지원 OS가 많아 portability이 높음 struct fd_set select()는 여러 fd를 한꺼번에 관찰하기 위해 fd_set 구조체를 활용한다. fd_set 구조체는 각 fd의 상태를 바트로 표현한다. fd가 겹칠 일은 없으니까 그 fd를 인덱스로 사용해서 해당 fd의 상태를 알아낼 수 있다. 상상 예시) short state = (fd_set >> fd) & 1; 이렇게 되면 각 fd를 추가하거나 확인할 때마다 귀찮은 비트 연산을 해야한다. 그래서 이를 위한 매크로가 있다. FD_ZERO(fd_set* set); //fdset을초기화 FD_SET..

    [C++ Primer Plus] 4. Compound Types

    출처 C++ Primer Plus 6판 챕터 4 대답해야 하는 질문들 wchar_t, char16_t, char32_t를 쓰는 string을 정의하는 방법이 무엇인가. struct에서 bit field는 무엇인가. int에서 enum, enum에서 int로의 캐스팅 차이점이 무엇인가. union은 어떻게 사용되는가. 서론 C++은 복합 자료형(Compound Type)을 제공한다. 복합 자료형은 integer와 float 자료형으로 이뤄진다. 가장 광범위한 복합 자료형은 Class다. 이 뿐만 아니라 C++은 C에서 가져온 복합 자료형 또한 제공한다. 예를 들어, array는 같은 자료형으로 여러개의 값을 가질 수 있다. Structure는 다양한 자료형의 여러개의 값을 가질 수 있다. Introduci..

    [번역] HTTP 서버: 밑바닥부터 만들어보기

    이 포스트는 다음 포스트를 번역/의역한 글입니다. 가독성을 위해 임의적으로 편집한 부분이 있습니다. 출처 https://medium.com/from-the-scratch/http-server-what-do-you-need-to-know-to-build-a-simple-http-server-from-scratch-d1ef8945e4fa HTTP Server: Everything you need to know to Build a simple HTTP server from scratch Vote for next post or mention what do you want to see next here: medium.com 서론 HTTP는 어디에나 있습니다. 우리가 방문하는 모든 웹사이트가 HTTP 서버 위에서 ..