C++ 41

[C++]동적할당과 깊은/얕은 복사

순서동적할당이란?동적할당시 주의할 점동적할당을 안전하게 하는 법깊은 복사얕은 복사깊은 복사와 얕은 복사의 차이동적할당이란?런타임에 필요한 크기의 메모리를 동적 메모리 영역인 힙에 요청하여 사용하고, 반환하는 방식new로 할당하고 delete로 반환하는 형태지역 변수는 스택에 할당되어 호출이 끝나면 자동 소멸하지만, 동적할당은 직업 해제해줘야 하여 스택과 대비됨동적할당시 주의할 점메모리 누수(Leak): 할당한 메모리를 해제하지 않아 누적되어 프로그램 메모리 사용량 증가더블 프리: 같은 포인터를 두 번 delete댕글링 포인터: 해제된 메모리를 참조혼용 사용: new와 free 또는 malloc과 delete와 같이 맞지 않는 요청예외 안전성 미고려: 중간에 예외가 나면 반환이 누락될 수 있음동적할당을 안..

C++ 2025.09.03

[C++]포인터와 레퍼런스

순서포인터란?댕글링 포인터void 포인터레퍼런스란?포인터와 레퍼런스의 차이포인터란?메모리 주소를 값으로 저장하는 변수를 포인터라고 함.int* a 형식으로 선언하는데 int* a = &b 라고 작성하면 a는 b의 주소를 가리키고 있는 형태이다.포인터는 다른 주소로 재지정 가능하며 없음을 표현할 때 nullptr로 사용함.포인터는 선택적 객체 참조를 표현할 때 유용함.댕글링 포인터포인터가 여전히 해제되어 유효하지 않은 메모리 영역을 가리키고 있을 때 해당 포인터를 댕글링 포인터라고 한다.댕글링 포인터의 문제메모리 접근 시 예측 불가능한 동작메모리 접근 불가 시 Segmentation fault 발생잠재적인 보안 위험예방/대처법스마트 포인터 사용(RAII 원칙)delete/free 이후 즉시 nullptr을..

C++ 2025.09.02

[C++]클래스와 구조체

순서클래스구조체클래스와 구조체클래스객체 지향 프로그래밍의 핵심 단위이며, 데이터와 행동을 하나의 단위로 묶어 추상화한 타입임.객체를 생성할 수 있는 설계도 역할을 함.멤버의 기본 접근 지정자는 private으로 객체지향 설계를 통해 정보 은닉을 강조하기 위함임.클래스 설계 원칙캡슐화 원칙: 데이터 은닉과 내부 상태 안전성을 보장단일 책임 원칙: 클래스는 하나의 역할만 수행상속과 다형성 설계: is-a 관계만 상속RAII와 자원 관리: 생성자에서 자원 획득, 소멸자에서 해제, 스마트 포인터, lock_guard 등 표준 RAII 활용인터페이스와 구현 분리값/참조 타입 구분자원관리 Rule of Three/Five/ZeroRule of Three클래스가 동적 자원을 직접 관리할 때, 컴파일러가 자동으로 생성..

C++ 2025.09.01

[C++]C와 C++ 언어의 차이점

순서C언어C++ 언어C와 C++언어의 차이점C언어시스템 프로그래밍을 위한 절차지향적인 언어이다.특징운영체제인 유닉스 개발을 위해 만들어졌으며, 하드웨어 제어가 필요하여 고수준 언어임에도 저수준 언어의 특성을 갖게됨.메모리 주소에 직접 접근하여 데이터를 조작하고, 프로세서를 제어하는 기능을 제공함.하드웨어를 효율적으로 제어하여 프로그램의 실행 성능을 높일 수 있음.특정 하드웨어에 종속되지 않고 다양한 컴퓨터 시스템에서 실행될 수 있어 이식성이 뛰어나며 예측 가능한 성능을 중시한다.간결한 언어가 핵심으로 문법과 표준 라이브러리가 비교적 작아 학습 비용이 낮고, 빌드 체인도 단순함.간결하다는 의미는 문법 요소가 적고, 추상화 도구가 단순하며 표준 라이브러리 규모가 작은편을 의미함언어는 간단하지만, 문제 해결의..

C++ 2025.09.01

[UE] 언리얼의 클래스들

순서GameMode 클래스GameInstance 클래스GameState 클래스PlayerState 클래스GameMode 클래스역할: 게임 규칙과 규칙 실행자특징GameMode는 서버 전용 클래스로 서버에서만 존재하며 클라이언트에서는 존재하지 않음 > 클라이언트에서는 GameState로 동기화만 받도록 함GameMode는 레벨마다 1개만 존재함클라이언트만 있는 싱글 플레이의 경우 클라이언트 프로세스 안에 서버 역할도 함께 실행을 시킴 => 로컬 서버 + 로컬 클라이언트가 같은 프로세스 안에 동시에 존재하는 구조로 로컬 서버 부분에서 GameMode가 생성됨.로컬 클라이언트는 내부적으로 서버가 가진 GameMode의 규칙을 그대로 따름.어떤 플레이어 캐릭터를 사용할지, 플레이어가 어떻게 스폰되지, 점수 규칙..

Unreal Engine 2025.08.28

[CS] 컨텍스트 스위칭

순서컨텍스트란?컨텍스트 스위칭이란?컨텍스트 스위칭의 과정컨텍스트 스위칭 주의점컨텍스트 스위칭의 비용프로세스 vs 스레드에서의 컨텍스트 스위칭 차이C++/UE 관점레이스 컨디션컨텍스트란?프로세스나 스레드가 실행되던 상태를 말함레지스터 값프로세스 메모리 상태CPU 상태커널에서 관리하는 PCB 정보위 정보들을 저장해뒀다가 나중에 다시 불러오면 마치 중단된 지점에서 다시 이어서 실행되는 것 처럼 보이게 됨.컨텍스트 스위칭이란?CPU가 실행 중인 프로세스나 스레드의 상태를 저장하고, 다른 프로세스나 스레드의 상태로 교체하는 과정운영체제가 멀티태스킹을 지원하기 위해 필수적으로 수행하는 작업즉, 하나의 CPU에서 여러 프로그램 또는 스레드가 동시에 실행되는 것처럼 보이게 하는 핵심 기술컨텍스트 스위칭 과정실행 중인 ..

CS 2025.08.28

[CS] 프로세스와 스레드

순서프로세스란?스레드란?프로세스와 스레드의 차이점요약프로세스란?프로세스란 운영체제가 제공하는 실행 단위로 독립적인가상 주소 공간과 자원을 갖음프로세스마다 코드, 데이터, 스택, 힙이 별도로 관리됨.스레드란?프로세스 내부에서 실행 단위로 하나의 프로세스 안에서 여러 스레드가 메모리를 공유함코드, 힙, 전역 변수를 공유하고 스택만 스레드별로 독립됨CPU가 스케줄링하여 병렬/동시 실행 가능함.프로세스와 스레드의 차이점구분프로세스스레드메모리독립적(각자 가상 주소 공간)공유(같은 프로세스 힙/글로벌)자원독립적 자원(파일, 햄들 등)공유 자원생성비용높음낮음통신IPC 필요메모리 공유로 직접 가능함C++/언리얼 활용CreateProcess/FPlatformProcess::CreateProcstd::thread, FRu..

CS 2025.08.28

[CS]메모리 단편화

순서메모리 단편화란?메모리 단편화의 종류메모리 단편화가 생기는 원인메모리 단편화의 측정과 영향메모리 단편화를 해결하기 위한 방법정리메모리 단편화란?메모리 할당.해제 과정에서 사용 가능한 메모리 블록이 조각나서 요구하는 메모리의 크기의 연속된 공간을 확보하기 어려운 현상.메모리 단편화의 종류내부 단편화(Internal fragmentation)메모리 정렬이나 최소 블록 단위 때문에 실제 필요한 크기보다 더 많이 할당되는 현상예를 들어 3바이트가 필요해도 8바이트 단위로 맞춰서 할당되는 것외부 단편화(External fragmentation)동적 메모리 할당과 해제가 반복되면서 힙 메모리가 잘게 조각나 큰 연속적인 공간을 할당하기 어려워지는 문제작은 객체를 반복적으로 생성/삭제하다가 큰 객체를 생성하려고 하..

CS 2025.08.28

[트러블 슈팅] UnrealEngine에서 ObjectPool을 제작했을 때

문제 기능 : ObjectPoolManager문제개요오류 상황: ObjectPool로 관리중인 오브젝트 사용시 오브젝트의 Mesh가 렌더링되지 않는 현상 및 Hit Event 물리기능 미작동발생 배경: 무기를 사용하여 ProjectileObject를 Get하여 사용할 때 발생원인 분석오류 원인: Object를 관리하는 ObjectPoolManager를 Actor 또는 ActorComponent를 상속시켜 사용하면 Level 이동시 파괴되는 이유로 SubSystem을 상속시켜 사용함.구조적 이해:렌더링 문제: 렌더링은 UPrimitiveComponent가 Scene에 등록되어야 동작함 => SubSystem 내부에서 RegisterComponent()가 호출되지 않아 렌더 파이프라인에 연결되지 않음Phys..

C++/트러블슈팅 2025.08.21