c++ 31

동적할당

동적 할당 (Dynamic Allocation)동적 할당이란?프로그램 실행 중에 필요한 메모리를 직접 할당하는 것을 의미한다.동적으로 할당된 메모리는 힙(Heap) 영역에 저장되며,개발자가 직접 생성하고 해제해야 한다.메모리 할당int* p = new int;*p = 10;동작 순서힙 영역에 int 크기의 메모리 할당할당된 주소를 p에 저장해당 메모리에 10 저장메모리 해제delete p;p = nullptr;동작 순서힙 메모리 반환포인터는 더 이상 유효하지 않음nullptr로 초기화하는 것이 안전함배열 동적 할당int* arr = new int[5];위 코드는 int 5개를 저장할 수 있는 배열을 힙에 생성한다.배열 메모리 해제delete[] arr;arr = nullptr;배열은 반드시 delete[..

c++/기초 2026.06.08

const

const 정리1. const 기본 개념const는 값을 변경할 수 없게 만드는 키워드이다.const int a = 10;a = 20; // 오류읽기 전용 변수(상수)선언 후 값 변경 불가능2. const를 사용하는 이유값 변경 방지실수로 데이터를 수정하는 것을 막을 수 있다.코드 의도 명확화해당 값이 변경되면 안 된다는 것을 명확하게 표현할 수 있다.최적화 가능컴파일러가 추가 최적화를 수행할 수 있다.3. 포인터에서 const(1) 값이 constconst int* p = &a;또는int const* p = &a;의미포인터가 가리키는 값 변경 불가포인터 주소 변경 가능*p = 20; // 오류p = &b; // 가능(2) 포인터 자체가 constint* const p = &a;의미포인터 주소 변경 불..

c++/기초 2026.06.08

값 타입과 참조타입

값 타입(Value Type)과 참조 타입(Reference Type)데이터를 다루는 방식은 크게 값을 직접 저장하는 방식과 어딘가에 있는 데이터를 참조하는 방식으로 나눌 수 있다.값 타입 (Value Type)데이터 자체를 직접 저장하는 타입이다.변수를 복사하면 데이터도 함께 복사된다.예시int a = 10;int b = a;메모리a = 10b = 10b는 a의 값을 복사하여 별도의 데이터를 가진다.값 변경int a = 10;int b = a;b = 100;결과a = 10b = 100원본은 변경되지 않는다.메모리 구조┌──────┐│ a=10 │└──────┘┌──────┐│ b=10 │└──────┘서로 다른 메모리를 가진다.대표적인 값 타입charshortintlonglong longfloatdou..

c++/기초 2026.06.08

extern (외부 변수)

extern (외부 변수)현재 파일이 아닌 다른 파일에 존재하는 변수나 함수를 참조하기 위한 키워드외부 변수란?현재 파일의 코드 외에다른 파일에 존재하는 변수를 의미한다. 예)// A.cppint a = 10;// B.cppextern int a;B.cpp에서는 실제 변수는 없지만extern을 통해"어딘가에 존재하는 변수 a를 사용하겠다"라고 컴파일러에게 알려주는 것이다.사용 예제변수 정의// A.cppint a = 10;변수 참조// B.cppextern int a;void Func(){ a = 20;}문법적으로 아무 문제가 없다.extern의 동작 방식컴파일 단계extern int a;컴파일러는"어딘가에 int형 변수 a가 존재한다고 가정"하고 코드를 컴파일한다.따라서 실제 변수의 존재 여부를 ..

c++/기초 2026.06.05

분할 구조 (Header / Source File)

분할 구조 (Header / Source File)하나의 코드를 .h 파일과 .cpp 파일로 나누어 관리하는 방식일반적으로.h : 선언(Declaration).cpp : 구현(Definition)을 담당한다.장점코드 관리가 편해짐기능별로 파일을 분리할 수 있다.예)Player.hPlayer.cppMonster.hMonster.cppInventory.hInventory.cpp파일 역할이 명확해져 유지보수가 쉬워진다.협업 시 충돌 감소여러 사람이 동시에 작업할 때각자 다른 파일을 수정할 수 있다.예)A : Player.cpp 수정B : Inventory.cpp 수정Git 충돌이 줄어든다.재사용 가능헤더만 include 하면다른 코드에서도 쉽게 사용할 수 있다.예)#include "Player.h"컴파일 속도..

c++/기초 2026.06.05

nullptr

nullptr포인터 전용 null 값NULL의 문제점void func(int x);void func(int* x);func(NULL);NULL은 일반적으로 다음과 같이 정의되어 있다.#define NULL 0즉, NULL은 결국 정수 0이다.따라서void func(int);void func(int*);두 함수 모두 호출 후보가 된다.0 → int 변환 가능0 → int* 변환 가능컴파일러는 어떤 함수를 호출해야 하는지 결정할 수 없기 때문에 모호성(Ambiguity) 오류가 발생한다.nullptr 사용void func(int x);void func(int* x);func(nullptr);nullptr은 std::nullptr_t 타입을 가지는 특수한 값이다.포인터 타입으로만 변환 가능정수 타입으로는 변환..

c++/기초 2026.06.05

#define 0 NULL

NULL#define으로 0을 정의한 매크로포인터가 유효한 주소를 가리키지 않는 상태를 나타내기 위해 사용한다.NULL은 포인터가 아니라 정수 0으로 정의된 매크로이며, 컴파일 시 0으로 치환된다.NULL 사용 예시int* p = NULL;0은 C/C++에서 특별하게 null pointer constant로 취급되기 때문에 포인터에 대입할 수 있다.포인터는 내부적으로 주소값을 저장하지만, 일반 정수와 달리 해당 값을 메모리 주소로 해석하여 사용한다.따라서 NULL은 값 자체는 0이지만 의미적으로는유효한 메모리를 가리키지 않는 포인터를 나타낸다.NULL의 문제점void func(int x);void func(int* x);func(NULL);NULL은 정수 0으로 정의되어 있기 때문에func(int x);..

c++/기초 2026.06.02

참조자(Reference)

레퍼런스 (Reference)레퍼런스(Reference)는 변수의 또 다른 이름(별명, Alias)이다.레퍼런스는 새로운 메모리를 생성하는 것이 아니라기존 변수의 메모리를 그대로 사용한다.즉, 같은 메모리를 다른 이름으로 접근하는 방식이다.포인터와 다르게 주소를 저장하는 변수가 아니며반드시 이미 존재하는 변수와 연결되어야 한다.그렇기 때문에 선언과 동시에 초기화가 필요하며참조할 변수가 없으면 문법 오류가 발생한다.레퍼런스 선언int a = 10;int& r = a;여기서a : 원본 변수r : a의 레퍼런스(별명)잘못된 예시int& r;컴파일 오류 발생레퍼런스는 반드시 참조할 대상이 필요하기 때문이다.메모리 관점에서 보기int a = 10;int& r = a;메모리 구조주소 변수 값100..

c++/기초 2026.05.31

포인터

포인터 (Pointer)포인터(Pointer)는 메모리의 주소(Address)를 저장하는 변수이다.일반 변수는 값을 저장하지만,int a = 10;포인터는 주소를 저장한다.int* p = &a;변수는 메모리 공간이다int a = 10;이 코드를 실행하면 메모리 어딘가에 공간이 생성되고 그 공간은메모리 내 변수의 위치정보를 알리기 위한 주소를 가진다.예시:주소 변수 값1000 a 10변수 이름 : a주소 : 1000값 : 10실제 사용될 때의 주소의 형태는 다르지만 이해를 위해 주소를 1000 이라고 가정한다.컴퓨터는 주소를 사용한다사람이 적을때a = 20;컴퓨터가 하는 동작1000번지에 저장된 값을 20으로 변경즉, 컴퓨터 입장에서는 변수 이름보다 주소가 더 중요하..

c++/기초 2026.05.31

매크로

#define 매크로#define은 전처리기(Preprocessor) 지시문이다.컴파일하기 전에 코드의 특정 문자열을 다른 값으로 치환할 수 있다.#define 이름 값예시:#define MAX_HP 100int hp = MAX_HP;컴파일 전에 다음과 같이 치환된다.int hp = 100;특징컴파일 전에 단순 텍스트 치환변수가 아님타입이 존재하지 않음메모리에 저장되지 않음세미콜론(;)을 사용하지 않음#define PI 3.14매크로 함수함수처럼 사용할 수도 있다.#define SQUARE(x) ((x) * (x))사용 예시:int a = SQUARE(3);컴파일 전에 다음과 같이 치환된다.int a = ((3) * (3));결과:a = 9괄호를 사용하는 이유매크로는 단순 치환이기 때문에 괄호가 없으면 ..

c++/기초 2026.05.31