목록전체 글 (332)
나만의 작은 도서관
주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다. 데이터 링크 계층에서 오류 검증을 했어도 전송 계층에서 다시 오류를 검증하는 이유(OSI 7 계층)OSI 7 계층 기준으로 사용자가 상대 호스트에게 데이터를 전송하면 최상위 계층인 애플리케이션 계층부터 물리 계층까지 내려가면서 헤더를 추가하고, 상대 호스트는 해당 데이터를 물리 계층부터 애플리케이션 계층까지 올라가면서 헤더를 제거한다.의아한 점은 2 계층인 데이터 링크 계층과 4 계층인 전송 계층의 UDP, TCP 둘 다 오류를 검출하는 필드가 헤더에 존재한다는 것이다. 각 호스트가 데이터를 주고받을 때 모든 계층을 한 번씩 지나간다면 굳이 여러 계층에서 오류 검출을 할 필요가 없어 보였다.데이터 링크 계층(L2)에서 오..
주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다. Protobuf keyword 재정리: Package, Optional, Oneofpackagepackage는 이름 충돌을 예방하기 위한 키워드이다.syntax = "proto3"package Protocol;message S_TEST { ... }위와 같이 .proto 파일을 작성하면 protoc를 거쳐 나온 xxx.pb.cc 와 xxx.pb.h에서 package이름으로 namespace가 만들어지고 message들은 해당 namespace 안에 정의되어 있게 된다(C++기준)프로젝트 내에선 아래와 같이 사용할 수 있다.// package Protocol에 의해 namespace가 Protocol인 S_TEST 클래스..
주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다. 템플릿에서 정의한 타입 매개변수(typename)는 반드시 템플릿 인자로 넘겨주지 않아도 된다.템플릿 매개변수는 넘겨준 템플릿 인자를 통해 타입이 결정된다. 따라서 템플릿 매개변수가 2개라면, 반드시 템플릿 인자도 2개를 넘겨줘야 되는 줄 알았다.// 정의templatevoid add(T a, U b) { return a + b;}// 템플릿 함수 호출int result1 = add(1, 2); // => 3하지만 이는 템플릿 매개변수를 명시적으로 알려줄 뿐, 컴팡일러가 추론이 가능하다면 반드시 적어줄 필요는 없다.int result2 = add(1, 2); // => 3이렇게 C++ 컴파일러는 타입 추론(type ..
주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다. 빌드 전에 protoc 자동 호출 시키기protoc.exe에 명령줄을 넣어 실행하면. proto →. cpp로 변환된다(cpp가 아닌 다른 언어도 된다) 그런데, 개발자도 사람인지라. proto를 수정해 놓고. protoc를 실행하지 않는 실수를 범할 수 있다. 이 부분을 해결하기 위해. proto가 수정되면 자동으로 protoc가 실행되었으면 한다.. protoc가 실행되는 시점은 여럿 있겠지만, 정말로 수정된 다음 저장할 때마다 protoc를 실행시키면 실행 빈도가 잦을 것이다(Unity에서 코드 한 줄 수정할 때처럼..) 그러니 시점은 빌드 전에 protoc를 실행하는 것이 가장 적당하다.빌드 전에 배치 파일을 자동..
주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다. 포함 디렉터리(Include directory)와 라이브러리 디렉터리(Library directory)MSVC(Visual Studio)의 설루션에서는 프로젝트의 설정에서 포함 디렉터리와 라이브러리 디렉터리의 경로를 설정할 수 있다.디렉터리는 윈도에서 “폴더”를 의미한다. 즉 포함 디렉터리는 포함할 폴더, 라이브러리 디렉터리는 라이브러리 폴더가 된다. 각 디렉터리의 경로를 설정하는 이유는 다음과 같다.포함 디렉터리: 빌듯이 #include 지시문을 처리할 때 추가적으로 참조하는 경로를 설정한다. 설정 시 포함 디렉터리 경로에 존재하는 **“헤더 파일(. h)”**을 컴파일러가 참조할 수 있게 된다.라이브러리 디렉터리: 빌..
주의사항: 해당 글은 일기와 같은 기록용으로, 다듬지 않은 날것 그대로인 글입니다. C++의 접근제어 규칙 - “설계에 의한 계약” (Design by Contract)”(virtual 키워드 관련)C++에서 사용하는 대표적인 접근 제어 키워드는 public, protected, private이 있다. 이때 각 접근 제어에 포함된 멤버 함수들은 virtual 키워드를 통해 가상 함수로 지정할 수 있다.가상 함수는 상속받은 클래스가 재정의 하였을 때, 해당 함수를 상위 클래스에서 호출해도 상속받은 클래스에서 정의한 내용이 호출되도록 하는 기능이다. 그렇다면 상속받은 클래스에서 가상 함수를 재정의할 때 더 느슨한 접근 권한으로 지정할 수 있을까?가능하다. 왜냐하면 상속을 통해 함수의 접근 제어 수준을 높여 ..