빌드(Build)란
소스 코드 파일을 컴퓨터에서 실행할 수 있는 독립적인 형태로 변환하는 과정과 그 결과
1단계:전처리기preprocessor
.h(선언)
.cpp(정의)
파일을 전처리과정을 통해 덮어씌우기
이때 pragma once란 전처리 과정에서 .h에 선언된 내용을 정의할 때 중복 정의가 일어나지 않도록 보호하는 헤더가드이다.
이때 전처리가 완료된 소스코드의 확장자는
.i
.ii
가 있다.
2단계
컴파일러(Compiler)
각 운영체제에서 사용할 수 있는 컴파일러로 전처리가 완료된 C++ 코드를 컴파일한다.
이때 컴파일이 완료된 파일은 어셈블리어 코드로 나오며 확장자는
.s
.S
이다.
3단계
어셈블리
어셈블리어 코드를 기계가 알아들을 수 있는 기계어로 번역한다.
기계어 코드
4단계
링킹
언리얼엔진 빌드툴
각 모듈에는
모듈 종속성
-모듈:기능을 하나로 묶어 캡슐화한것
-종속성:데이터의 상호 의존관계
implementation:B를 리빌드한다 할때 간접 의존중인 A는 리빌드하지 않고 해당 모듈 B만을 리빌드
api:직접 혹은 간접 의존하고있는 A와 B 전부 수정
추가 라이브러리
포함 경로
등을 정의하기 위한 옵션을 포함하여 빌드 방법을 제어하는 파일이 있다.
DLL로 컴파일되고 단일 실행 파일exe에 의해 로드
언리얼엔진의 빌드툴은 visual studio의 빌드와는 별개로 실행되며 visual studio의 빌드를 무시한다.
UObject(Unreal Object)
언리얼 오브젝트는 언리얼 엔진에 관리를 받는 객체를 뜻한다
언리얼엔진의 모든 클래스가 언리얼 오브젝트가 아닌 관리를 받는 객체만을 언리얼 오브젝트라고 부른다
UObject엔 9가지 기능이 있다
쓰레기수집(Garbage Collection)
참조 업데이트(Reference update)
투영(Reflection)
직렬화(Serialization)
default property changes auto update
auto property reset
auto editer integrated
실행시간에 유형정보 사용가능
network replication
해당 클래스가 언리얼 오브젝트임을 선언하기 위해선 우선 언리얼 오브젝트의 매크로(UClass(),GENERATE_BODY())를 사용해 매크로를 선언해야 한다.
쓰레기수집(Garbage Collection)
필요없는 메모리는 자동으로 삭제해주어 메모리 사용량을 절약하는 기능
즉 메모리를 관리하는 기능이다
Reflection
프로그램이 실행시간에 자기 자신을 조사하는 기능
UObject는 3단계를 거쳐 우리가 사용할 수 있는 형태로 생성된다.
1.컴파일 이전단계
2.컴파일 단계
3.런타임 단계
컴파일 이전단계에선 메타데이터 존재X 컴파일 시작시 언리얼 헤더툴(Unreal Header Too (UHT))이 언리얼 오브젝트를 분석해 메타데이터를 생성해낸다 이 메타데이터는 소스코드형태로 존재한다.
*메타데이터가 소스코드형태로 생성되는 이유는 바이너리 동기화 보장과 멀티플랫폼 대응떄문이다.
#include "Components/ActorComponent.h"
#include "~~.generated.h"(이 파일은 메타데이터를 생성하기 전에 존재하지 않음 컴파일 이전 단계에서 UHT를 이용해 생성)
/*
메타데이터란
메타데이터는 시간이 지남에 따라 많은 양의 데이터를 수집, 저장 및 분석할 수 있도록 일관된 방식으로 구조화된, 다른 데이터를 설명하는 데이터입니다.
소스코드란
컴퓨터 프로그램을 사람이 읽을 수 있는 프로그래밍 언어로 기술한 텍스트 파일
Unreal Header Tool(UHT)
언리얼 오브젝트는 C++ 표준이 아닌 언리얼 엔진이 지원하는 자체적 프레임워크이다.
따라서 제공되는 기능을 활용하기 위해서는, 해당 유형에 대해 헤더파일에서 전처리 단계를 거쳐줘야 필요한 정보를 수집할 수 있다.(컴파일 전 단계에 실행된다.)
해당 전처리 단계를 실행하는것이 Unreal Header Tool이다.
*/
이 헤더파일들의 순서가 바뀌면 프로그램이 제대로 동작하지 않는 이유는 위의 단계에서 메타데이터를 생성해내기 전에 아래 헤더파일부터 작동시키면 메타데이터가 없기때문에 오류가 생기는것이다.
컴파일 단계
컴파일 단계에서는 각각의 언리얼 오브젝트마다 UClass를 생성한다.
UClass와 UClass 매크로는 다른개념
*UClass란 UHT에 의해 생성된 메타데이터를 수집 저장하는 킬래스이다. 이곳에 저장된 데이터 덕분에 Reflection이 가능해진다.
런타임단계
UClass인스턴스, CDO인스턴스가 생성
직렬화(serialization)
어떤 환경의 데이터 구조를 다른 환경에 전송/저장하기 위하여 바이트(Byte) 포맷으로 변환하는 과정
역직렬화
직렬화된 데이터를 사용 가능한 데이터 구조로 변환하는것
직렬화가 필요한 이유:기기마다 서로 다른 가상 메모리 주소공간을 갖기때문에 참조형 타입의 데이터는 전달할 수 없다. 따라서 주소값을 Byte형태로 저장한 뒤 역 직렬화를 통해 다른 기기에서도 호환 가능하도록 하는 것