2026-04-06 TIL (30일차)
C++
프로그래머스 (콜라츠 추측)
원인 분석
- 홀수일 때의 연산 (
temp * 3 + 1) 콜라츠 추측의 규칙 중 홀수일 경우 3을 곱하고 1을 더합니다. 시작 숫자가 800만에 가까운 수이거나, 반복 과정에서 값이 계속 커지는 패턴을 만나면,int가 담을 수 있는 최대치를 넘겨버립니다. - 오버플로우(Overflow) 발생
- 무한 루프의 늪 값이 음수로 변해버렸기 때문에
temp == 1이라는 탈출 조건을 만족할 수 없게 되고, 오답을 내게 된 것입니다.
해결 방법: long long
숫자가 아무리 커지더라도 안전하게 담을 수 있도록, int보다 큰 자료형인 long long을 사용하는 것입니다.
1
2
3
4
5
// 수정 전
// int temp = num;
// 수정 후
long long temp = num;
Unreal
C++ 프로젝트 폴더 구조
핵심 폴더
Config: 프로젝트의 기본 환경 설정, 단축키(Input), 그래픽 세팅 값(.ini)들이 저장되는 폴더입니다.Content: 블루프린트, 3D 모델링, 텍스처, 사운드, 맵(레벨) 등 게임의 모든 에셋(Asset)이 들어가는 가장 중요한 폴더입니다. (언리얼 에디터의 Content Browser와 연결되어 있음)Source: 직접 작성한 C++ 소스 코드(.cpp,.h)가 저장되는 폴더입니다.[프로젝트명].uproject: 언리얼 프로젝트 실행 파일입니다. 더블 클릭하면 언리얼 에디터가 켜집니다.
임시 및 자동 생성 폴더
Binaries: C++ 코드를 컴파일해서 만들어진 실행 파일(.exe,.dll)이 들어있습니다.Intermediate: 컴파일 과정에서 생성되는 중간(임시) 파일들이 모이는 곳입니다. (엔진에 알 수 없는 에러가 꼬였을 때 이 폴더를 지우고 다시 빌드하면 해결되는 경우가 많음.)DerivedDataCache: 텍스처나 셰이더 등을 매번 계산하지 않고 빠르게 로딩하기 위해 엔진이 미리 변환해둔 캐시 파일입니다. 용량을 가장 많이 잡아먹습니다.Saved: 에디터 자동 저장 파일, 백업, 크래시 로그, 로컬 세이브 데이터 등이 저장됩니다. (에러 로그가 저장되는 파일).vs: 비주얼 스튜디오의 로컬 설정 및 임시 캐시를 보관하는 숨김 폴더입니다.
주요 설정 및 실행 파일
[프로젝트명].sln: 비주얼 스튜디오 솔루션 파일입니다. C++ 코드를 작성할 때 이 파일을 엽니다..vsconfig: 비주얼 스튜디오에서 이 프로젝트를 열기 위해 필요한 컴포넌트 설치 정보가 담긴 파일입니다.
솔루션 구조
Engine (엔진 코어)
- 역할: 언리얼 엔진 자체의 소스 코드와 리소스가 담긴 곳입니다.
- 특징: 에디터 작동 및 엔진의 핵심 코어 관련 코드가 포함되어 있습니다. 엔진 자체를 뜯어고치는 고도화된 작업이 아니라면, 일반적인 개발 단계에서는 거의 수정하거나 열어볼 일이 없습니다.
Games
- 역할: 직접 만든 프로젝트 코드가 모여 있는 가장 핵심적인 폴더입니다.
- 특징: 내부를 열어보면 윈도우 탐색기에서 봤던
Source,Config폴더와.uproject파일 등이 들어있습니다. 앞으로 C++로 작성하는 모든 게임 로직과 클래스는 무조건 이 폴더 안에서 다루게 됩니다.
Programs (유틸리티)
- 역할: 언리얼 엔진 동작과 빌드에 필요한 유틸리티 프로그램(UnrealHeaderTool 등)이나 독립적인 서버 모듈이 담겨 있습니다.
- 특징: 일반적인 게임 클라이언트 개발 단계에서는 거의 볼 일이 없습니다.
Rules (빌드 규칙)
- 역할: 엔진과 게임 등 각 모듈의 빌드 규칙(Build Rules)을 정의해 놓은 파일(
Target.cs등)들이 모여 있습니다. - 특징: 다른 모듈과의 의존성 설정, 플러그인 활성화 여부, 빌드 타겟 등을 제어할 때 사용되는 일종의 설계도 모음집입니다.
Visualizers (디버깅 보조)
- 역할: Visual Studio 디버거를 사용할 때 도움을 주는 시각화 설정 파일(
.natvis)이 들어 있습니다. - 특징: 언리얼 엔진 특유의 복잡한 자료구조(
FVector,FString,TArray등)를 디버깅 창에서 사람이 읽고 이해하기 쉽게 변환해 주는 폴더입니다.
언리얼 엔진 C++ 빌드 파이프라인
“C++ 파일 수정 ➡️ 빌드 (컴파일 + 링크) ➡️ DLL 파일 ➡️ 언리얼 에디터”
1. C++ 파일 수정 (코드 작성)
- 과정: Visual Studio 등에서 프로그래머가 게임 로직(캐릭터 이동, 스킬 구현 등)이 담긴
.cpp와.h파일을 수정하고 저장합니다. - 특징: 이 코드는 사람이 읽을 수 있는 언어(Human-readable)이므로 컴퓨터는 아직 이해하지 못합니다.
2. 빌드 (컴파일 + 링크)
- 과정: 비주얼 스튜디오에서 빌드를 실행하면, 언리얼 엔진의 전용 빌드 도구인 UBT(Unreal Build Tool)가 작동합니다.
- 컴파일(Compile): 우리가 짠 C++ 코드를 컴퓨터가 알아들을 수 있는 기계어(
0과1)로 번역하여 목적 파일(.obj)들을 만듭니다. - 링크(Link): 번역된 여러 개의 조각 파일들과 언리얼 엔진의 기본 기능(라이브러리)들을 하나의 완성된 결과물로 연결하고 묶어줍니다.
- 컴파일(Compile): 우리가 짠 C++ 코드를 컴퓨터가 알아들을 수 있는 기계어(
3. DLL 파일 생성 (중요한 차이점)
- 과정: 링크 과정이 끝나면 단독 실행 파일인
.exe가 아니라, 동적 링크 라이브러리인.dll(Dynamic Link Library) 파일이 만들어집니다. .exe가 아닌 이유: 우리가 작업하는 ‘언리얼 에디터(UnrealEditor.exe)’ 자체가 실행 파일이기 때문입니다. 우리가 작성한 게임 코드는 에디터라는 프로그램 안에 부품처럼 끼워져서 돌아가는 ‘모듈(Module)’ 형태로 만들어져야 하므로.dll로 추출됩니다.
4. 언리얼 에디터 반영 (라이브 코딩 / 핫 리로드)
- 과정: 생성된 새로운 따끈따끈한
.dll파일을 언리얼 에디터가 실시간으로 받아들여서 메모리에 올립니다. - 결과: 엔진을 껐다가 다시 켤 필요 없이, 방금 비주얼 스튜디오에서 수정한 코드가 에디터 상의 캐릭터나 시스템에 즉각적으로 반영됩니다. 이 강력한 기능을 라이브 코딩(Live Coding) 또는 핫 리로드(Hot Reload)라고 부릅니다.
요약
“우리가 작성하는 C++ 게임 프로젝트는 그 자체로 독립적인 프로그램이 아니라, 언리얼 에디터라는 거대한 공장에 납품하는 부품(
.dll)을 만드는 과정이다. 그래서 코드를 수정하고 빌드하면, 에디터가 새 부품을 실시간으로 갈아 끼워주는 것이다!”
빌드 구성 (Configuration) 종류
| 빌드 구성명 | 실행 환경 | 특징 및 주요 용도 |
|---|---|---|
DebugGame | Standalone (독립 실행) | 게임 로직만 디버그 정보를 포함하고, 엔진 자체는 최적화된 상태로 빌드합니다. 언리얼 에디터 없이 독립된 실행 파일 환경에서 내 게임 로직을 효과적으로 디버깅할 때 사용합니다. (엔진 코드는 디버깅 제한적) |
DebugGame Editor | Editor (에디터용) | 에디터 환경에서 게임 로직을 디버깅하기 가장 편한 설정입니다. 에디터 플레이(PIE) 중에 C++ 로직을 세밀하게 추적하거나 중단점(Breakpoint)을 걸고 테스트할 때 사용합니다. |
Development | Standalone (독립 실행) | 디버그 정보를 최소화해 실행 속도를 높인 개발용 빌드입니다. 에디터 없이 독립 실행 파일 환경에서 전반적인 테스트 및 개발을 진행하는 단계에서 주로 쓰입니다. |
Development Editor(⭐ 기본 모드) | Editor (에디터용) | 에디터에서 개발·테스트를 원활히 할 수 있는 기본 빌드 모드입니다. 언리얼의 핵심 기능인 라이브 코딩(Live Coding)과의 궁합이 가장 좋으며, 초·중급자를 포함해 평상시 가장 많이 사용하는 세팅입니다. |
Shipping | Standalone (독립 실행) | 최종 사용자에게 배포(Release)할 때 사용하는 릴리스 빌드입니다. 모든 디버그 정보를 완전히 제거하여, 용량을 줄이고 성능 최적화가 극대화됩니다. |
전체 솔루션 빌드 vs. 부분 빌드
전체 솔루션 빌드
엔진, 유틸리티, 게임 모듈 등 솔루션 내의 모든 프로젝트를 통째로 묶어서 빌드하는 방식입니다.
- 실행 방법
- 비주얼 스튜디오 상단 메뉴:
빌드(Build)➡️솔루션 빌드(Build Solution) - 단축키:
Ctrl + Shift + B
- 비주얼 스튜디오 상단 메뉴:
- 사용 시기
- 프로젝트를 생성하고 가장 처음 빌드할 때
- 언리얼 엔진 자체의 소스 코드를 수정했을 때
- 빌드가 꼬여서 엔진 전체 파일을 갱신해야 할 때
- 특징: 규모가 방대한 언리얼 엔진의 특성상 모든 모듈을 검사하므로 빌드 시간이 오래 걸릴 수 있습니다.
부분 빌드
무거운 엔진이나 다른 모듈은 무시하고, 우리가 작성한 게임 프로젝트 코드(내 게임 로직)만 타겟으로 지정해 빠르게 빌드하는 방식입니다.
- 실행 방법
- 비주얼 스튜디오 우측 솔루션 탐색기(Solution Explorer) 창에서
Games폴더 안에 있는 내 프로젝트 이름(루트 폴더)을 우클릭 ➡️빌드(Build)클릭
- 사용 시기
- 일반적인 개발 상황에서 C++ 게임 로직(캐릭터 이동, 스킬 등)만 수정했을 때
- 특징: 내가 수정한 게임 코드만 뽑아서 컴파일하므로 전체 솔루션 빌드에 비해 속도가 빠르고 효율적입니다.
언리얼 엔진으로 개발하다 보면 “어제까진 분명히 잘 됐는데 갑자기 코드가 안 먹히네?” 하는 이른바 ‘빌드가 꼬인’ 상황을 무조건 겪게 됩니다. 이때 꺼낼 수 있는 궁극의 해결책인 ‘클린 빌드(Clean Build)’ 과정을 블로그에 올리기 좋게 마크다운(.md) 코드로 깔끔하게 정리해 드립니다!
말씀하신 Gener뭐시기는 Generate Visual Studio project files를 의미하는데, 이 부분도 자연스럽게 연결해 두었습니다.
Markdown
언리얼 C++ 빌드가 꼬였을 때
언리얼 엔진에서 C++ 코드를 수정했는데 에디터에 적용되지 않거나, 알 수 없는 컴파일 에러가 쏟아질 때 복구하는 방법입니다.
1단계: 임시 및 캐시 폴더 삭제
프로젝트 폴더로 이동하여, 엔진이 빌드 과정에서 만들어낸 임시 찌꺼기 파일들을 직접 날려줍니다.
- 삭제해야 할 폴더 목록:
BinariesIntermediateDerivedDataCacheSaved
2단계: Visual Studio 솔루션 파일 재생성
- 프로젝트의
.uproject파일을 우클릭합니다. - 메뉴에서
Generate Visual Studio project files를 클릭하여.sln파일을 새롭게 갱신합니다.
3단계: Visual Studio 클린 빌드
폴더를 지우고 Generate를 했는데도 문제가 여전하다면, 비주얼 스튜디오 내부에서 확실하게 청소를 해줘야 합니다.
- 방금 새로 생성된
.sln솔루션 파일을 Visual Studio로 엽니다. - 상단 메뉴에서
빌드(Build)➡️솔루션 정리(Clean Solution)를 클릭하여 혹시라도 남아있을 기존 빌드 산출물을 완벽하게 정리합니다. - 정리가 완료되면, 다시
빌드(Build)➡️솔루션 빌드(Build Solution)를 클릭하여 처음부터 깨끗하게 재빌드를 수행합니다. - 에러 원인 파악: 만약 빌드가 실패한다면 하단의 출력(Output) 창과 오류 목록(Error List)을 열어 실제 코드의 어느 부분에서 문제가 터졌는지 확인하고 수정합니다.

