2026/04 13

[C++] map과 unordered_map 정리

오늘은 STL의 연관 컨테이너인 map과 unordered_map에 대해 정리해보려고 한다.둘 다 key와 value를 쌍으로 저장하는 컨테이너지만,내부적으로 데이터를 관리하는 방식이 다르기 때문에 성능 특성과 사용 기준도 다르다.map : 보통 레드-블랙 트리 기반, key 기준 정렬 유지unordered_map : 해시 테이블 기반, key 순서 보장 Xmap의 특징과 일부 주요 함수, unordered_map의 해시 구조,그리고 map의 기반이 되는 레드-블랙 트리까지 간단히 정리해보려고 한다.map이란?map은 STL의 연관 컨테이너 중 하나로 key와 value를 쌍으로 저장하는 컨테이너이다.하나의 key에 하나의 value가 대응되며 같은 key를 중복해서 저장할 수 없다.map은 보통 내부..

C++, CS 2026.04.30

[C++] vector 와 list의 차이 정리

오늘은 STL의 순차 컨테이너 중 vector와 list의 차이를 정리해보려고 한다.둘 다 여러 개의 원소를 저장하는 컨테이너지만,내부적으로 데이터를 저장하는 방식이 다르기 때문에 성능 특성도 크게 다르다.특히 메모리 배치 방식이 다르기 때문에원소 접근, 삽입과 삭제, 캐시 효율, iterator 무효화 여부에서도 차이가 발생한다.아래 두 컨테이너의 특징, 내부 구조, 원소 추가 시 동작, 그리고 컨테이너 선택 기준을 정리해보았다.vectorvector는 연속적인 메모리 공간에 데이터를 저장하는 동적 배열이다.배열처럼 원소들이 메모리상에 연속적으로 배치되기 때문에인덱스를 이용한 접근이 빠르다.std::vector v = {1, 2, 3, 4, 5};std::cout vector는 [] 연산자를 통해 특정..

C++, CS 2026.04.29

[C++] 객체 복사를 막는 방법과 이유

C++에서는 객체를 복사할 때 복사 생성자와 복사 대입 연산자가 사용된다.하지만 모든 객체가 안전하게 복사될 수 있는 것은 아니다.예를 들어 특정 객체는 복사되면 비용이 크거나,내부 자원 관리 문제로 인해 의도하지 않은 오류가 발생할 수 있다.따라서 오늘은 객체의 복사를 막는 방법과 그 이유를 정리해보려고 한다.객체 복사를 막는 방법C++11 이후에는 복사 생성자와 복사 대입 연산자에 delete를 명시해서 객체 복사를 막을 수 있다.class A {public: A() = default; A(const A&) = delete; A& operator=(const A&) = delete;};위 코드에서A(const A&) = deleteA& operator=(const A&) = delet..

C++, CS 2026.04.28

[C++] 스마트 포인터 정리

저번 글에서 RAII에 대해 간단히 정리하면서,자원의 수명을 객체의 수명에 맞춰 관리하는 방식이 중요하다는 것을 알게 되었다.스마트 포인터는 이러한 RAII 기법을 적용한 대표적인 예시이다.일반 포인터처럼 객체를 가리키고 사용할 수 있지만,객체의 소유권을 명확하게 표현하고, 해제 시점을 더 안전하게 관리할 수 있다는 점이 다르다.이번 글에서는 C++에서 자주 사용하는 스마트 포인터인unique_ptr, shared_ptr, weak_ptr에 대해 정리해보려고 한다.스마트 포인터란?스마트 포인터는 동적 할당한 객체를 자동으로 관리해주는 클래스 템플릿이다.일반 포인터를 사용하면 직접 delete를 호출해야 하지만,스마트 포인터는 자신의 수명이 끝날 때 관리하던 자원을 자동으로 해제한다.즉, 스마트 포인터는 ..

C++, CS 2026.04.27

[C++] RTTI와 RAII 정리

이전에 가상 함수 호출이 내부적으로 vtable과 vptr을 통해 이루어진다는 것을 알 수 있었다.가상 함수 호출은 런타임에 객체 내부의 vptr을 통해 vtable을 참조하고,그 안에 저장된 함수 주소를 찾아 실제로 호출할 함수를 결정하는 방식이었다.여기서 다음과 같은 궁금증이 생겼다.런타임에 이 객체가 실제로 어떤 타입인지 어떻게 알 수 있을까?이번에는 이 궁금증을 바탕으로런타임에 객체의 타입 정보를 확인하거나 안전하게 형변환할 수 있게 해주는 RTTI에 대해 정리해보려고 한다.이어서 이렇게 생성하고 사용하는 객체나 자원을어떻게 더 안전하게 관리할 수 있는지와 관련된 RAII 개념도 함께 정리해보려고 한다.RTTI(Run Time Type Information), 런타임 형식 정보란?RTTI는 프로그..

C++, CS 2026.04.24

[C++] vtable 정리

가상 함수를 사용하면 부모 클래스 포인터나 레퍼런스로 자식 객체를 다루면서실제 객체 타입에 맞는 함수를 호출할 수 있어 매우 유용하다.하지만 이런 가상 함수 호출이 내부적으로 어떻게 구현되는지는 잘 알지 못했다. 그래서 이번 글에서는 C++에서 가상 함수 호출을 구현할 때 자주 함께 언급되는 vtable과 vptr이 무엇인지,그리고 가상 함수 호출이 어떤 식으로 이루어지는지 공부한 내용을 간단히 정리해보려고 한다.vtable이란?vtable은 가상 함수 호출을 구현하기 위해 컴파일러가 내부적으로 사용하는 함수 주소 테이블이다.쉽게 말하면 가상 함수들의 주소를 정리해 둔 테이블이라고 볼 수 있다.보통은 1차원 배열과 비슷한 형태로 구현된다고 알려져 있다. vptr이란?vptr은 객체가 참조해야 하는 v..

C++, CS 2026.04.23

[C++] 객체지향 프로그래밍(OOP) 정리

C++를 공부하다 보면 클래스, 상속, virtual, override 같은 개념을 자주 만나게 된다.이런 문법들은 각각 따로 외우는 것보다객체 지향 프로그래밍이라는 큰 틀 안에서 이해하는 것이 더 중요하다고 생각했다.그래서 이번 글에서는 객체 지향 프로그래밍의 개념과 핵심 특징,장단점, 그리고 SOLID 원칙을 간단히 정리해보려고 한다.객체 지향 프로그래밍의 개념과 핵심 특징객체 지향 프로그래밍은 관련된 속성(데이터)과 동작(기능, 메서드)을 하나의 객체로 묶고,객체 간의 상호작용을 중심으로 프로그램을 구성하는 방식이다.객체 지향 프로그래밍의 핵심 특징은 보통 다음 4가지로 정리한다.1. 캡슐화캡슐화는 관련 있는 데이터와 메서드를 하나로 묶고,필요한 기능만 외부에 공개하면서 내부 구현은 감추는 것이다...

C++, CS 2026.04.22

[C++] 포인터와 레퍼런스의 차이 정리

오늘은 포인터(pointer)와 레퍼런스(reference)의 차이를 간단히 정리해보려고 한다.둘 다 어떤 대상을 간접적으로 다룬다는 점은 비슷하지만 의미와 사용 목적은 분명히 다르다.포인터와 레퍼런스의 차이포인터포인터는 다른 객체의 주소를 저장하는 변수이다.nullptr이 가능하다.선언만 해두고 나중에 초기화할 수 있다.다른 대상을 다시 가리킬 수 있다.자기 자신의 저장공간을 가진다.함수 인자로 넘길 때 없을 수도 있는 대상을 표현하기 좋다. 레퍼런스레퍼런스는 다른 객체의 또 다른 이름(별칭)이다.선언과 동시에 초기화해야 한다.참조 대상을 바꿀 수 없다.초기화 시점에 반드시 유효한 대상을 참조해야 한다.독립적인 변수라기보다 별칭에 가깝다.함수 인자로 넘길 때 반드시 존재하는 대상을 표현하기 좋다.배열..

C++, CS 2026.04.21

[C++] new와 malloc의 차이, new의 동작 방식 정리

오늘은 C++에서 메모리 할당과 관련된 malloc, new, operator new의 차이를 정리해 보려고 한다.지금은 보통 new나 스마트 포인터, vector, string 같은 RAII를 이용해 자원을 관리하지만,예전 C 스타일 코드에서는 malloc / free를 사용하는 경우가 많았다.실제로 직접 malloc을 자주 쓰지는 않더라도, new가 내부적으로 어떤 과정을 거치는지,그리고 malloc과 무엇이 다른지 정도는 알고 있는 게 중요하다고 생각했다.이번 글에서는 malloc과 new의 차이, new의 동작 방식,new 표현식과 operator new의 차이에 대해 정리해보았다.malloc과 new의 차이malloc과 new의 차이를 정리하면 다음과 같다.malloc지정한 바이트 수만큼 메모리..

C++, CS 2026.04.20

[알고리즘 / C++] 프로그래머스 - 뒤에 있는 큰 수 찾기

오늘은 프로그래머스의 뒤에 있는 큰 수 찾기 문제를 풀어보았다.이 문제를 풀면서 처음으로 단조 스택(Monotonic Stack) 과NGE(Next Greater Element) 유형을 알게 됐다.처음에는 각 원소마다 오른쪽을 직접 탐색하면 될 것 같았지만,그렇게 하면 시간 복잡도가 O(N^2)라 시간 초과로 실패하기 때문에 다른 풀이가 필요하다.이 문제의 핵심은 스택으로 필요한 후보만 관리해서 O(N)에 해결하는 것이었다.나는 이 문제를 두 가지 방식으로 풀어보았다.앞에서부터 탐색 + 인덱스 스택뒤에서부터 탐색 + 값 스택NGE란?NGE는 Next Greater Element의 줄임말로,각 위치에서 오른쪽에 있으면서 처음 만나는 더 큰 수를 의미한다.따라서, 어떤 값의 오른쪽을 확인할 때 자기보다 큰 ..

알고리즘 2026.04.18