#cpp
노트 11개
Computer Science
프로그래밍 언어와 객체 지향 설계언어 일반(계보·패러다임·실행 방식·의미론·타입 시스템), C++의 문법·템플릿·STL·예외·가상 함수·스마트 포인터·메모리 풀, Java·Kotlin·Python·Go의 언어 동작과 관용구, 추상 클래스·인터페이스·위임·DTO/VO·클린 코드·GoF 패턴·책임 주도 설계와 객체 지향 설계 사례 모음.
Computer Science › Programming Languages
메모리 풀같은 크기의 객체를 자주 할당·해제할 때 큰 블록을 미리 잡아 두고 한 칸씩 나눠 주는 메모리 풀을 정리한다. 고정 크기 풀은 빈 칸 인덱스 스택 하나로 할당과 해제를 O(1)에 끝내고, 가변 풀은 고정 풀을 청크로 이어 붙인다. 클래스의 operator new/delete를 오버로딩하면 호출 코드를 바꾸지 않고 풀을 쓸 수 있다.
Computer Science › Programming Languages
싱글턴 패턴인스턴스를 하나만 두는 싱글턴 패턴의 목적과 Java 구현 방식(이른 초기화, synchronized, DCL과 volatile, 홀더 클래스, enum)을 스레드 안전성과 비용으로 비교하고, C++의 함수 안 static(Meyers 싱글턴)과 복사 금지, 전역 상태가 되는 단점과 DI 컨테이너·모듈로 대신하는 방법을 정리한다.
Computer Science › Programming Languages
프로그래밍 언어의 계보와 선택기계어·어셈블리에서 고급 언어까지 세대 구분, 1950년대 Fortran·LISP부터 2010년대 Rust·Go·Kotlin·Swift·TypeScript까지 언어가 어떤 문제를 풀려고 이어져 왔는지, C++가 여전히 쓰이는 분야, 언어별 에너지 효율 연구의 결론을 정리한다.
Computer Science › Programming Languages
C++ 기초: 문법, 참조자, 클래스, 복사와 이동, 오버로딩C++ 프로그램의 구조, 초기화 문법과 L·R-value, 입출력 스트림, 헤더와 네임스페이스, 저장 지정자(static·extern·mutable), switch의 fallthrough, 포인터와 참조자의 차이, 그리고 클래스의 접근 지정·friend·this·생성자 종류·초기화 리스트·static 멤버·소멸자와 RAII·private 생성자와 소멸자, 복사 생성자와 복사 대입·얕은 복사와 깊은 복사·이동·3·5·0의 규칙, 함수 오버로딩과 연산자 오버로딩, explicit 형 변환을 정리한다. 참조자는 null이 없는 별명이고, 자원은 소멸자에 묶으며, 인자 하나짜리 생성자에는 기본으로 explicit을 붙인다.
Computer Science › Programming Languages
C++ 상속과 가상 함수: 접근 지정, 생성·소멸 순서, vtable, 슬라이싱, 다중 상속C++ 상속의 다섯 가지 형태(단일·다중·다단계·계층·혼합), protected와 상속 방식(public·protected·private)이 접근 수준을 어떻게 바꾸는지, 기반에서 파생으로 생성되고 역순으로 소멸되는 순서, 가상 함수가 vtable과 vptr로 호출 대상을 고르는 원리와 비가상 함수의 이름 가림, 가상 생성자와 static 가상 함수가 없는 이유, 생성자·소멸자 안의 가상 호출과 pure virtual call, 가상 소멸자, 순수 가상 함수와 추상 클래스, 객체 슬라이싱, 다중 상속의 생성 순서와 다이아몬드 문제·가상 상속을 정리한다.
Computer Science › Programming Languages
C++ 스마트 포인터: unique_ptr, shared_ptr, weak_ptr힙 객체의 소유권을 RAII 객체로 표현하는 C++ 스마트 포인터를 정리한다. 단독 소유인 unique_ptr(이동만 가능, 원시 포인터와 같은 크기), 참조 카운트로 공유하는 shared_ptr(제어 블록, make_shared, 원자적 카운트), 순환 참조를 끊는 비소유 weak_ptr(lock), C++17에서 제거된 auto_ptr의 문제, 함수 인자로 넘기는 규칙을 다룬다. 기본은 unique_ptr이고 소유가 정말 여럿일 때만 shared_ptr을 쓴다.
Computer Science › Programming Languages
C++ 예외 처리의 내부 동작C++의 throw가 실제로 하는 일을 정리한다. 예외 객체는 힙에 할당되어 참조 카운트로 해제되고, 스택 되감기는 컴파일러가 만든 테이블(.eh_frame, LSDA)을 보고 함수와 call site를 찾아 소멸자를 부른다. 현대 컴파일러의 zero-cost 방식은 try 자체에는 비용이 없지만 throw가 매우 비싸므로, 예외는 진짜 예외 상황에만 쓰고 일상적인 실패는 오류 코드나 std::expected로 돌려준다.
Computer Science › Programming Languages
C++ 코딩 표준과 clang-formatC++ 프로젝트의 코딩 표준이 무엇을 정하는지(사전·사후 조건, 유지보수, 서식, 이름, 클래스 배치, 문서화, 최적화 힌트)를 한 프로젝트 표준을 예로 정리하고, 서식은 사람이 지키지 말고 clang-format으로 자동화하는 방법을 다룬다.
Computer Science › Programming Languages
C++ 템플릿타입을 매개변수로 받아 함수와 클래스를 찍어 내는 C++ 템플릿을 정리한다. 함수·클래스 템플릿, 기본 템플릿 인자와 비타입 인자, 특수화, 템플릿 재귀와 가변 인자 템플릿까지 다루며, 템플릿은 컴파일 시점에 타입별 코드를 생성하는 정적 다형성이라는 점이 핵심이다.
Computer Science › Programming Languages
C++ STL 컨테이너와 시간 복잡도C++ 표준 라이브러리의 vector·deque·list·set·map·unordered 컨테이너가 내부적으로 어떤 자료구조인지, 그래서 연산별 시간 복잡도가 어떻게 되는지 정리한다. vector 끝 삽입은 용량을 배수로 늘리기 때문에 분할 상환 O(1)이고, set·map은 레드-블랙 트리라 O(log n)이다.