320x100

전체 글 435

virtual, override, final 관련 정리

virtual 키워드는 상속 받는 자식 클래스에서 override해서 구현하라는 의미로 부모클래스에서 사용된다. 보통의 가상 함수는 override를 강제하지 않고 옵션으로 두지만, 순수 가상 함수로 선언해 자식 클래스에서 무조건 구현해야 하도록 만들 수 있다. override 키워드는 부모의 가상함수를 재정의 했다는 의미로 사용된다. 재정의 하는 경우는 다음과 같은 성질을 만족해야 한다. 부모 클래스 함수가 반드시 가상 함수 이어야한다. 부모의 함수와 자식의 함수 이름이 반드시 동일해야한다. (소멸자 예외) 부모의 함수와 자식의 함수 매개변수 형식들이 반드시 동일해야한다. 부모의 함수와 자식의 함수 const 성이 반드시 동일해야한다. 부모의 함수와 자식의 함수 반환형식과 예외 명세가 호환되어야한다. ..

<memory> std::allocator<T> 클래스

기본적으로 STL에 제공되는 할당자 클래스다. 하지만 이는 사용자가 임의로 커스텀해서 사용할 수 있다. 커스텀을 위해선 특정 인터페이스를 만족해야 한다. 주의 사항으로는 1. 템플릿으로 만들어야 하며, 템플릿 매개 변수에는 실제로 사용할 객체의 타입 T를 사용한다. 2. 비정적 데이터 멤버를 가질 수 없다. 3. allocate / deallocate 함수를 가져야 하며, allocate의 인자로 객체 T가 필요한 갯수를 넘겨야 한다. 4. 반환하는 포인터는 void*가 아닌 실제 타입의 포인터(T*) 이여야 한다. cAlloc() = default; ~cAlloc() = default; allocator도 결국엔 template class 이기 때문에, 생성자와 소멸자를 작성해야하는데, allocato..

C/C++ 프로그래머가 몰랐던 프로그램의 동작 원리

1장 I/O 1.1 I/O 처리는 누가 담당하는가 1.2 디스크 1.3 표준 입출력 1.4 네트워크 1.5 동기적 I/O vs 비동기적 I/O 1.6 정리 2장 Cache와 Prefetch 2.1 반복문의 비밀 for (int i=0; i0; --i) a[i] = i; 는 다를 게 없다. 메모리에 값을 저장하기 때문이다. 이를 캐싱이라고 한다. 2.2 반복문과 Cache CPU는 먼저 캐시를 살펴보고, 캐시에 필요한 데이터가 없으면 메모리에서 그 값을 가져온다. 캐시를 순차적으로 넣고, 빈 공간이 없을 경우 가장 오래된 데이터 부터 갱신하는 캐시 관리하는 기법을 LRU(Least Recently Used)라고 한다. 캐시 적중률 = cache hit / (cache hit + cache miss) 캐시 ..

도서/IT 2021.10.30

Macro 확장을 이용한 factory 만들기

특정 인터페이스 class를 상속하는 class가 있을 때,factory를 이용해서 이름으로 각각의 class instance를 생성해보자! 가 목표입니다. #define DO_REGISTER(e) \ registry_[#e] = &templated_creator::create; #define FACTORY_IMPL(factoryname, producttype, products) \ class factoryname \ { \ typedef producttype* (*creator)(); \ template \ class templated_creator \ { \ public: \ static Base_* create() { return new Derived_(); }\ }; \ public: \ fact..

set_new_handler

동적할당이 실패했을 때 처리될 내용에 대해 정리한다. new 연산자 후 if (memory == nullptr) 로 체크하는건 할당 실패의 처리를 하는거지 할당 실패에 대한 처리를 하는게 아니다... 라고 쓰지만 텍스트로 뭐라 구분지어야할지 모르겠다. std::set_new_handler 라는 함수를 통해 메모리 할당에 실패할 때마다 실행되는 함수를 정의할 수 있다. 함수의 사용은 간단하다. void FailAlloc() { // 처리될 내용 } int main() { std::set_new_handler(FailAlloc); return 0; } https://en.cppreference.com/w/cpp/memory/new/set_new_handler 이하 펌 연산자 new를 이용하여 Heap 메모리..

Jenkins

Jenkins로 빌드 뿐만 아니라 배포와 데몬의 실행까지 가능하다. 이번 팀에서 적용하는 방법이라 관련 내용만 URL로 정리해둔다. 파워쉘을 같이 알아두자. https://major-guide.paas-ta.kr/guide-5.0-ravioli/use-guide/tools/paas-ta_jenkins_service_user_guide https://www.nextree.co.kr/ciwa-execute-shelleul-iyonghan-jadongbaepo-buteo-seobeo-silhaengggaji/ CI와 Execute Shell을 이용한 자동배포 부터 서버 실행까지….. 프로젝트 초반에 CI를 도입하기 전, 배포를 했었을 때 매우 불편한 점이 많았다. 로컬에서 개발한 소스코드를 개발계 서버에서 테..

서버/기타 2021.10.26
320x100