C++ 41

[자료구조] map/unordered_map

순서map이란?map의 특unordered_map이란?map과 unordered_map의차이점해싱해시충돌map이란?레드 블랙 트리 또는 이진 탐색 트리 기반으로 데이터를 저장하는 컨테이너 자료구조pair로 이루어진 컨테이너로 key를 기준으로 오름차순 정렬된 상태임map의 특징key와 value 쌍으로 이루어진 트리로 중복을 허용하지 않음.first, second가 pair 객체로 저장되며 first는 key second는 value로 저장됨시간 복잡도는 O(log n)이다.unordered_map이란?해시 테이블을 기반으로 데이터를 저장하는 컨테이너 자료구조정렬되지 않은 상태로 데이터를 저장하며, 데이터를 삽입한 순서와 다를 수 있음.중복된 키를 허용하지 않음시간 복잡도는 O(1)이다.map과 unor..

CS/자료구조 2025.09.12

[CS] RVO

순서RVO란?RVO의 작동방식RVO의 이점NRVORVO란?C++같은 프로그래밍 언어에서 함수가 객체를 반환할 때 발생하는 불필요한 복사 생성자 또는 이동 생성자 호출 작업을 제거하는 컴파일러 최적화 기법임.리턴할 객체를 호출자의 메모리 공간에 직접 생성해버리는 방식.RVO의 작동방식임시 객체 생성 및 복사/이동 생략컴파일러 최적화RVO의 이점성능 향상: 객체 복사 및 이동은 비용이 많이 드는 작업일 수 있는데, RVO는 이러한 작업을 생략하여 프로그램 실행 속도를 높임코드의 투명성: 개발자는 RVO를 직접 구현할 필요 없이 컴파일러에게 맡길 수 있어, 효율적인 코드를 작성하는데 집중할 수 있NRVONamed Return Value Optimization으로 함수 내에서 이름을 가진 지역 객체를 반환할 때..

CS 2025.09.05

[C++] 매크로 함수와 inline키워드

순서매크로 함수란?매크로 함수의 장단점inline 키워드란?inline 키워드의 장단점매크로 함수와 inline 키워드의 차이매크로 함수란?전처리기 지시문 #define을 사용해 정의함컴파일 전에 코드가 단순 치환됨.특징텍스트 치환이므로 타입 체크가 없음컴파일러가 관여하지 않음함수 호출이 없으므로 호출 오버헤드가 없음매크로 함수의 장단점장점호출 오버헤드가 전혀 없음조건부 컴파일이나 플랫폼별 코드 분기 등 전처리기 기능과 결합 가능단점타입 안전성 없음 > 실수로 잘못된 타입을 넣어도 컴파일 오류가 안 날 수 있음디버깅 어려움 > 에러가 치환된 코드에서 발생다중 평가 문제스코프 제한 없음 > 이름 충돌 가능inline 키워드란?함수 호출 시 발생하는 오버헤드를 줄이기 위해, 해당 함수를 호출하는 지점에 함수..

C++ 2025.09.03

[C++] 오버로딩과 오버라이딩

순서오버로딩이란?오버라이딩이란?오버로딩이란?같은 이름의 함수를 매개변수 시그니처만 다르게 여러개 정의하는 것.정적 바인딩을 통해서 바인딩 됨.오버로딩목적: 다양한 입력 값에 따라 같은 이름의 함수가 다른 동작을 하도록 하여 코드의 가독성과 재사용성을 높임오버로딩의 조건함수 이름은 동일해야함매개변수의 타입이나 개수가 달라야함반환 타입만 다른 것으로는 오버로딩이 허용되지 않음.같은 클래스 내에서 발생함오버라이딩이란?상속 관계에서 부모 클래스의 가상 함수를 자식 클래스가 완전히 동일한 원형으로 재정의하여 부모의 기능을 변경하는 것.동적 바인딩을 통해서 바인딩 됨.오버라이딩의 조건함수 이름, 매개변수의 타입 및 개수가 부모 클래스의 함수와 완벽히 동일해야 함.주로 상속 관계에서 발생함부모 클래스에서 가상 함수로..

C++ 2025.09.03

[C++] 바인딩

순서바인딩이란?정적 바인딩동적 바인딩구조적 바인딩바인딩이란?함수 호출이나 변수 참조를 실제 메모리 상의 대상과 연결하는 과정실제 대상을 연결하는 시점에 따라 정적 바인딩과 동적 바인딩으로 나뉨정적 바인딩컴파일 시점에 어떤 함수/변수를 호출할지 결정일반함수 호출, 오버로딩된 함수 선택, 템플릿 인스턴스화, inline 함수오버로딩에 사용특징빠르고 최적화 가능(컴파일러가 대상 함수의 주소를 미리 알고 있기 때문)다형성 지원 불가동적 바인딩런타임 시점에 어떤 함수가 호출될지 결정C++에서 virtual 함수로 구현됨오버라이딩에 사특징실행 속도는 정적 바인딩보다 조금 느림(vtable lookup 필요)다형성 구현 가능 > 실제 객체 타입에 맞는 동작 수행객체지향적 설계에서 핵심구조적 바인딩C++17부터 지원되..

C++ 2025.09.03

[C++] 가상 함수

순서가상 함수virtual 키워드란?virtual 키워드 특징순수 가상 함수란?순수 가상 함수의 특징순수 가상 함수 사용 목소멸자에 virtual 키워드를 붙이는 경우가상 함수가상 함수는 런타임 다형성을 가능하게 하는 매커니즘으로, virtual 키워드를 사용하여 선언함컴파일 타임이 아닌 런타임에 어떤 함수가 호출될지 결정해야 할 때 사용함.가상 함수로 인해 자식 클래스에서 함수 오버라이딩으로 새로운 기능을 추가하거나 기능을 변경할 수 있음.추가 키워드 override: virtual 키워드로 선언한 함수를 상속받아 사용할 때 상속받은 class에서 override를 붙여 재정의함final: 더이상 virtual로 선언된 함수가 재정의되지 않도록 제한함virtual inheritance: 다이아몬드 상속..

C++ 2025.09.03

[C++]const 키워드

순서const 키워드란?const 키워드의 주요 역할상수표현식const 키워드 장단점const 키워드란?변수나 객체의 값이 초기화된 이후 변경되지 않도록 하는 상수임을 나타내며, 컴파일러가 해당 값의 수정을 막아 코드의 안정성을 높임변수를 선언할 때 자료형 앞에 붙여 해당 변수가 상수임을 명시함다른 const 문법과 함께 사용될 때는 위치에 따라 포인터가 가리키는 대상의 값을 변경하지 못하게 하거나, 포인터 자체의 주소 변경을 막는 등의 적용 범위가 달라짐.const를 선언할 때 동시에 반드시 초기화가 필요함const 키워드의 주요 역할값 불변성 보장: const로 선언된 변수는 초기화된 후에는 값을 변경할 수 없음 => 이는 코드의 일관성을 유지하고 의도하지 않은 값 변경을 방지하여 안정성을 높여줌컴파..

C++ 2025.09.03

[C++]static 키워드

순서static 키워드란?함수에서의 static 키워드클래스에서의 static 키워드변수에서의 static 키워드static 키워드를 사용하는 이유static 키워드란?static 키워드는 사용되는 위치에 따라 의미가 달라지며 크게 함수, 클래스, 변수 3가지정도 존재함함수에서의 static 키워드함수 내부의 static 지역 변수: 함수 호출이 끝난 후에도 값이 소멸되지 않고 다음 호출 시까지 유지됨전역 static 함수: 해당 함수가 정의된 소스 파일 내에서만 접근 가능하게 하여, 다른 파일에서 동일한 이름의 함수와 충돌하는 것을 방지함.클래스에서의 static 키워드정적 멤버 변수: 클래스의 모든 객체가 공유하는 변수로, 클래스 인스턴스 생성과 무관하게 메모리를 차지하며 클래스 이름으로 직접 접근할..

C++ 2025.09.03

[C++] 캐스트 연산자/RTTI

순서캐스트 연산자란?캐스트 연산자의 종류RTTI란?RTTI의 동작 조건RTTI의 장점과 단점캐스트 연산자란?데이터 타입을 다른 데이터 타입으로 명시적으로 변환하는 데 사용되는 특수 연산자.런타임 시 변수의 타입을 강제로 바꾸거나, 컴파일러게 명확한 의도를 전달하여 타입 변환을 수행하는 역할타입을 바꾸는 것 이상으로 타입 안전성과 목적에 맞는 변환을 명시적으로 제어할 수 있게 설계된 연산자.캐스트 연산자의 종류static_cast정적 타입 변환 연산자로 컴파일 타임에 타임 검사를 수행함.타입 변환이 명확하고 안전할 때 사용함.기본형 변환, 상속 관계에서 업캐스트/다운캐스트, 포인터 > 정수 변환 등에 상용됨안전성이 비교적 높지만 다운캐스트 시 런타임 체크는 없음dynamic_cast런타임 타입을 안전한 다..

C++ 2025.09.03

[C++] malloc/free와 new/delete

순서malloc/freenew/delete차이점malloc/freeC와 C++언어에서 메모리 할당 및 해제를 위해 사용되는 함수임. 하지만 C스타일로 C에서 주로 이용됨malloc()은 프로그램 실행 중에 필요한 만큼의 메모리 공간을 힙영역에서 할당함malloc()은 void*을 반환함. C에서 다른 포인터로의 암묵적 변환이 허용되어 캐스트가 불필요free()함수는 malloc()으로 할당 받았던 메모리 공간을 운영체제로 반환함.생성자와 소멸자를 호출하지 않으며 실패 시 NULL을 반환함new/deleteC++에서 동적 메모리 할당 및 해제를 위해 사용되는 연산자new는 프로그램 실행 중에 필요할 때 힙 영역에 메모리를 할당하고 객체를 생성함new 동작시 내부에서 operator new로 void*를 반..

C++ 2025.09.03