전체 글 124

정규 표현식

1. 개요오늘은 정규 표현식에 대해 알아보도록 하겠습니다.2. 정규 표현식란?C++ 11부터 표준 라이브러리로 정규 표현식이 도입되면서, 복잡한 문자열 처리가 훨씬 가편하고 강력하다.3. 왜 사용하는가?과거 C++에서 문자열을 다룰 때는 find, substr, strtok 등을 사용하여 수동으로 파싱해야 했습니다. 이는 코드가 길어지고 가독성이 떨어지며 버그가 발생하기 쉬웠습니다.정규 표현식을 사용하면 다음과 같은 이점이 있습니다.생산성 향상: 수십 줄의 문자열 처리 코드를 단 몇 줄의 패턴으로 대체할 수 있습니다.강력한 검증: 이메일, 전화번호, 주민등록번호 등 복잡한 형식을 쉽게 검증할 수 있습니다.유연한 검색 및 치환: 텍스트 내에서 특정 패턴을 찾아 추출하거나 다른 형태로 바꾸는 작업이 매우 효..

언리얼 UAT, UBT, UHT, UnrealPak 이해

1. 개요오늘은 언리얼 엔진의 빌드 과정 중 UAT, UBT, UHT, UnrealPak에 대해 알아보겠습니다.2. 얘네들은 왜 나눠놨을까?언리얼 엔진이 UAT, UBT, UHT, UnrealPak으로 도구를 쪼개놓은 가장 큰 이유는 역활 분담 및 효율성 때문 게임 엔진은 단순히 코드를 실행 파일로 만드는 것 뿐만이 아니라, C++의 한계를 넘고, 복잡한 빌드 과정을 관리, 수만 개의 파일을 압축, 이 모등 과정을 자동화 하기 때문입니다. 아래는 각 UAT, UBT, UHT, UnrealPak에 대한 설명입니다.3. UAT언리얼 엔진의 총감독 역할을 하는 도구입니다.UBT(컴파일), UHT(헤더 분석), UnrealPak(압축) 같은 전문가들을 지휘해서, 게임 제작의 시작부터 끝까지(배포)를 자동으로 처..

언리얼 엔진 (FString, FText, FName) 비교

1. 개요오늘은 언리얼 엔진의 문자 FString, FText, FName에 대해 알아보겠습니다.2. 아니 왜 나눠놨을까?나눈 이유는 매우 단순합니다.각 사용에 맞게 쓰게 할려고 나눴습니다.다만, 셋 다 TCHAR 배열을 사용하며 TCHAR는 2바이트 유니코드 문자입니다.그럼 아래에서 각각에 역할을 알아보겠습니다.3. FString세 가지 문자열 타입 중 유일하게 수정이 가능하다는게 핵심1. FString의 주요 역할 (Role)문자열 조립 및 포맷팅:여러 변수(숫자, 이름 등)를 섞어서 문장을 만들 때 사용합니다.예: "Player HP: " + FString::FromInt(Health)파일 경로 및 URL 처리:디렉토리 경로를 합치거나, 확장자를 떼어내는 등의 작업에 쓰입니다.예: FPaths::C..

언리얼 엔진의 스마트 포인터

1. 개요오늘은 언리얼 엔진의 스마트 포인터를 알아보겠습니다.2. 스마트 포인터?보통 스마트 포인터 라고 하면 C++이 명시적으로 할당받은 메모리를 해제하기 위해 사용자가 Delete를 해줘야하지만 만약 놓치게 되면, 메모리 누수라는 큰 결함이 생깁니다.그래서 C++에서 스마트 포인터가 나왔고, 스코프 종료가 되면 자동으로 해제하는 친구입니다.https://chogyujin-study.tistory.com/27 C++ 스마트 포인터(Unique, Shared, Weak)오늘은 스마트 포인터에 대해 공부해보겠습니다. 스마트 포인터 란? 자바, C# 등은 가비지 컬렉터(Garbage Collector) 라는 기능을 통해 메모리를 관리합니다. 하지만 C++는 사용자가 스스로 메모리를chogyujin-study..

C++ Placement New에 대한 공부

1. 개요오늘은 C++에 기법인 Placement New에 대해 공부해보도록 하겠습니다.2. Placement New?C++에서 placement new는 "이미 할당된 메모리 공간"에 객체를 생성(초기화)하는 문법입니다.보통의 new 연산자가 [메모리 할당 + 객체 생성]을 동시에 수행한다면, placement new는 할당 단계는 건너뛰고 생성자만 호출하여 객체를 만들어 냅니다.3. 왜 쓰는가?주로 성능 최적화와 정밀한 메모리 제어가 필요한 시스템에서 사용합니다.메모리 할당 비용 제거: 힙(Heap)에서 메모리를 할당(malloc 등)하는 과정은 운영체제의 시스템 콜을 거치며 시간이 걸립니다. 이를 피하고 싶을 때 사용합니다.메모리 파편화 방지: 작은 객체를 수없이 생성/삭제하면 메모리가 조각나는데,..

언리얼 엔진 Actor, Pawn, Character 차이

1. 개요오늘은 Actor, Pawn, Character 에 차이를 알아보겠습니다.2. Actor 월드에 배치할 수 있는 가장 기본적인 깡통입니다.핵심: Transform (위치, 회전, 크기)이 있습니다.능력: 그냥 그 자리에 있거나, 블루프린트로 움직이게 할 수는 있지만 '플레이어의 영혼(Controller)'이 들어갈 수 없습니다.구조: 텅 비어 있습니다. (필요하면 Static Mesh 등을 직접 추가해야 함)용도: 무기, 아이템, 문, 배경 건물, 탄환.3. Pawn 액터에 '조종 기능'이 추가된 형태입니다.진화: Actor를 상속받았습니다.핵심: Possess (빙의) 기능이 생깁니다. 플레이어(키보드/마우스)나 AI가 접속해서 명령을 내릴 수 있습니다.움직임: "움직일 수 있는 권한"은 있지..

정적 링킹 vs 동적 링킹

1. 개요오늘은 정적 링킹 vs 동적 링킹에 대해 알아보겠습니다.1. 정직 링킹정적 링킹이란 실행 가능한 목적 파일을 만들 때 프로그램에서 사용하는 모든 라이브러리 모듈을 복사하는 방식을 말하며 링커에 의해 이루어집니다.즉, 자신이 작성한 프로그램에서 A라는 외부 함수를 사용했다면, A라는 외부 함수에 대한 정보를 자신이 작성한 프로그램의 실행파일을 만들 때 복사해옵니다.5개의 프로그램에서 A라는 외부 함수를 이용하는데 이때 정적 링킹 방식을 사용하면 5개의 프로그램의 실행 가능한 목적파일 각각에 A의 정보가 담긴다.즉, 중복이 발생한다.따라서 정적 링킹으로 만들어진 프로그램은 크기가 크고 메모리 효율이 좋지않습니다.또한, 정적 링킹을 이용하면, A라는 함수에 변화가 생길 경우 그 변화를 적용하기 위해서..

템플릿(Template)

1. 개요오늘은 C++에 템플릿(template)에 대해 알아보도록 하겠습니다.2. 설명템플릿은 어린시절에 한번쯤 사용했을 모양자와 같습니다. 모양자에는 다양한 종류의 도형들이 틀로 만들어져 있습니다. 이 틀을 활용하면 누구나 정말 반듯한 네모를 그릴수도 있고 별도 그릴수 있습니다. 템플릿의 생산성이 뛰어난 이유도 이와 같습니다. 정말 완성도 높은 코드를 모양자로 찍어내듯 생성할 수 있기 때문입니다. 특히 소스코드의 완성도를 높인 상태에서 STL처럼 확실하게 검증된 라이브러리를 사용한다면 완성도와 생산성, 두마리 토끼를 한꺼번에 잡을 수 있습니다. 템플릿을 많이쓰면 컴파일 속도가 느려지지만 최신 C++ 개발 트렌드를 따르려면 템플릿은 선택이 아니라 필수입니다. 생산성이 높고 유지보수성이 뛰어난 코드가 당..

C++ 11 범위기반 for문 (for each)

1. 개요오늘은 for each에 대해 알아보겠습니다.2. for each?기존 for문은 조건을 입력을 하여 돌리는 형식입니다.vector arr = {1,2,3,4,5,6};for(int i=0;i하지만 for each문을 사용하면 쉽게 조건문을 안넣고 사용이 가능합니다.vector arr = {1,2,3,4,5,6};for(int i : arr){ cout여기서 int i 는 arr에 인덱스 별로 값을 복사받아 출력을 하는 문장입니다.하지만 이것을 참조변수로도 가능합니다.vector arr = {1,2,3,4,5,6};for(int& i : arr){ i = 60; cout이러면 arr에 있는 내용 전부가 60으로 변경이 될겁니다.또한 auto문을 사용하여 for each를 사용할수 있습니다. 물론..

extern 쓰는법

1. 개요오늘은 extern을 쓰는 방법에 대해 알아보겠습니다.2. extern 사용법C++ 로 코딩을 하다보면 다른 파일에서 선언한 전역변수를 호출하여 사용을 하고 싶을 때가 있을겁니다.그럴 때를 위해 extern 으로 선언을 하여 사용을 할수가 있는데 다음과 같습니다.test.cpp에 int n = 10 이라고 선언된 전역변수를main.cpp에 호출해서 사용하고 싶으면main.cpp 젤 위쪽에 extern int n; 을 선언하고 사용을 하면 됩니다. ex)test#includeint n=10;main#includeextern int n;using namespace std;int main(){ cout 그럼 static이 붙혀져있는 경우는 어떨까요?아쉽게도 static은 현재 파일에서만 사용할수있는 ..