[UE5 TIL] Day 33 - Chpt 3. 언리얼 내부

JungHoon Eum·2026년 4월 10일
  • 헤더파일에서 함수들 드래그하고 Alt + Enter 하면 .cpp 파일에서 정의 걍 다 만들어준다!!! ㄴㅇㄱ

[코드카타] 전화번호 가리기

문제 링크

문제 요약

  • 전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.

내가 제출한 코드

#include <string>
#include <vector>

using namespace std;

string solution(string phone_number) {
    string answer = "";
    string stars(phone_number.size() -4 , '*');
    answer = stars + phone_number.substr(phone_number.size()-4,4);
    return answer;
}

피드백

  • 속도 면에선 상관없지만...for문으로 * 넣을 필요는 없었다. string 생성 방법 string s(size, '*');

배운 점

  • string을 다루는 다양한 방법. substr(제거 시작할 index, 제거할 문자수)
  • string의 각각 문자는 문자로 다룬다. 즉 '' 를 쓴다. 문자열 전체를 지칭할 때만 ""
  • begin(), end()iterator 반환. string::iterator 같은 형태라 숫자 자료형을 원할 땐 size()로 쓰자. +, - 같은 건 되지만 숫자형태랑 캐스팅은 안됨.

마스터 라이브 세션

어떤 코드가 좋은 코드인가

기이한 이름

  • 코드를 명료하게 표현하는데 가장 크게 기여하는 게 이름.
  • 함수, 변수, 클래스, 모듈 이름만 보고도 무슨 일을 하는지 알아야 한다.
void DoIt(int x);
float AAA;
int WTF; // Window XP 핀볼에 들어가있던 변수명

//이렇게 하지 말고
void AttackEnemy(int DamageAmount)

중복 코드

  • DRY 원칙 - Don't Repeat Yourself
  • 복사-붙여넣기 개발은 결국 더 많은 시간을 소비하게 만들 뿐.
  • 중복된 코드는 하나만 수정해도 되도록 모아놓아야 한다.
  • 비슷하지만 조금씩 다른 코드는 공통 부분을 먼저 정리하고 나서 분리하자.

긴 함수 (Long Function)

  • 짧은 함수는 무엇을 하는지를 명확히 보여주어 코드를 쉽게 파악하게 해줌.
  • 짧은 함수는 공유하기도 편하다.
  • 주석이 필요하다고 느껴지는 부분은 따로 함수로 빼고, 의도가 드러나는 이름을 붙이자.

메타데이터란

  • UPROPERTY() 등등 할 때 () 안에 들어가는 것들. 속성 이라고 보면 된다.
  • C++ 코드를 블루프린트에 연결하는 핵심 다리. UCLASS UPROPERTY UFUNCTION

리플렉션이란?

  • 실행 중인 프로그램이 자기 자신의 구조를 인지하고 조작할 수 있는 능력. 런타임 타입 정보, 에디터 연동, 가비지 컬렉션...이런 거 못한다.
  • 런타임 타입 정보 - IsA() 함수. 객체 타입 실시간 확인
  • 에디터 연동 - UPROPERTY 변수가 디테일 창에 자동 표시, 조작 가능.
  • 가비지 컬렉션(GC) - UObject 상속한 애들은 메모리 관리를 전부 엔진이 해준다.
    • TSharedPtr은 UObject 미상속 외부 라이브러리용

UBT(언리얼 빌더 툴)

  • 가장 먼저 실행되는 빌드 도구. MyProject.Build.cs 파일
  • 전체 프로젝트 구조 파악/플랫폼별 환경 설정.
  • 플러그인/모듈, 목표 플랫폼 등등 파악하고 환경 설정 해주는 프로그램

UHT (언리얼 헤더 툴)

  • 컴파일 전 마법사 -> 코드를 에디터가 이해할 수 있게 번역

  • UCLASS, UPROPERTY, UFUNCTION 메타데이터 수집. 에디터 디테일 창 연동 정보 생성. 블루프린트 노드 연결 정보 준비. -> 결과물로MyObject.generated.h 자동 생성

  • UBT-UHT - 비쥬얼 스튜디오 컴파일 - 리플렉션 완성 이 흐름을 따라가기에

  • 헤더 파일 변경 시 전체 리빌드, cpp만 변경 시 라이브코딩(UHT, 비쥬얼스튜디오 컴파일 생략) 할 수 있음

CDO(Class Default Object)

  • 우리가 작성하는 클래스들은 CDO, 실제 맵에 배치되는 액터들 - 붕어빵 틀에서 나온 붕어빵들 - 은 Instance Objects.
  • CDO 생성 시점: 모듈 로딩 단계. 그래서 C++ 클래스 "생성자" 자체는 엔진 켜질 때 한번만 켜진다.
    • 언리얼에선 변수 선언만 헤더에. 초기화는 생성자에서. 라이브코딩으로 초기값 변경시키기 편하다.
profile
개발지망생

0개의 댓글