[UE] 언리얼 C++ 코딩 표준
public에서 private로 이어지는 클래스 체계를 준수
명명 규칙
- 파스칼 케이싱(Pascal Casing)을 사용한다.
- 소문자를 가급적 사용하지 않고 공백 및 언더스코어(_)가 없음
- 모든 클래스와구조체에는고유한 접두사가 있음
코드의 명확성
- 파라미터에 가급적 In과 Out 접두사를 사용해 명시
- const 지시자의 적극적인 활용
- 레퍼런스를 통한 복사 방지
- auto 키워드는 가급적 자제
Find In Files의 활용 (int* a (O), int *a(X))
헤더 파일및 #include 구문은 의존성을 최소화시켜주의 깊게 다룰 것
언리얼 C++ 코딩 표준
인프런 이득우님의 '언리얼 프로그래밍 Part1 - 언리얼 C++의 이해' 강의를 참고하였습니다.
😎 [이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해] 강의 들으러 가기!
목차
언리얼 C++ 코딩 표준
명명 규칙
파스칼 케이싱(Pascal Casing) | 합성어의 첫 글자를 대문자를 사용해 명명. 언리얼 엔진에서 사용 ex. UnrealEngine |
카멜 케이싱(Camel Casing) | 첫 합성어는 소문자로 나머지는 대문자를 사용해 명명 ex. unrealEngine |
스네이크 케이싱(Snake Casing) | 합성어 사이에 언더바를 사용해 명명 ex. unreal_engine |
https://docs.unrealengine.com/5.0/ko/recommended-asset-naming-conventions-in-unreal-engine-projects/
코딩 표준
Const
// const 포인터에서 const 이외 오브젝트 - 포인터로의 재할당은 불가하나, T는 여전히 수정 가능합니다.
T* const Ptr = ...;
// 틀림
T& const Ref = ...;
반환 타입에는 const를 사용하지 않는다.
복잡한 타입에 대한 이동 시맨틱이 제한되며, 기본 타입에는 컴파일 경고가 발생한다.
이 규칙은 반환 타입 자체에만 적용되며, 포인터의 타깃 타입 또는 반환되는 레퍼런스에는 적용되지 않는다.
// 나쁜 예 - const 배열 반환
const TArray<FString> GetSomeArray();
// 좋은 예 - const 배열로의 레퍼런스 반환
const TArray<FString>& GetSomeArray();
// 좋은 예- const 배열로의 포인터 반환
const TArray<FString>* GetSomeArray();
// 나쁜 예 - const 배열로의 const 포인터 반환
const TArray<FString>* const GetSomeArray();
이동 시맨틱
TArray , TMap , TSet , FString과 같은 모든 주요 컨테이너 타입에는 move 컨스트럭터와 move 할당 연산자가 있다.
이러한 타입을 값으로 전달 또는 반환할 때 종종 자동으로 사용되지만, std::move 의 UE 해당 버전인 MoveTemp를 통해 명시적으로 호출할 수도 있다
값으로 컨테이너나 스트링을 반환하는 것은 보통 임시로 복사하는 비용이 없어 표현성에 유용하게 작용할 수 있다. 값 전달 관련 규칙 및 MoveTemp 사용법은 아직도 확립 중이지만, 최적화된 코드베이스 영역 일부에서는 이미 찾아볼 수 있다.
https://docs.unrealengine.com/5.3/ko/epic-cplusplus-coding-standard-for-unreal-engine/
헤더 vs 전방 선언
물리적 결합을 최소화하려고 시도하라. 특히, 다른 헤더의 표준 라이브러리 헤더를 include하지 마라.
헤더 include 대신 전방 선언(forward declaration)이 가능한 경우 그렇게 하라.
헤더를 include할 때는 가능한 한 세밀하게 하라.
다른 모듈이 필요로 하는 정의는 Public 디렉터리의 헤더에 있어야 한다. 그 외 모든 것은 Private 디렉터리에 있어야 한다. 기존 언리얼 모듈의 경우 이 디렉터리는 'Src' 및 'Inc'라고 불리기도 한다. 그러나 이는 동일한 방식으로 private 코드와 public 코드를 구분하기 위함일 뿐이지, 헤더 파일을 소스 파일과 구분하기 위함은 아니다.
인터페이스
인터페이스 클래스는 항상 추상형이어야 한다.
- 인터페이스 클래스는 접두사 'I'를 포함하며, 멤버 변수가 있어서는 안 된다.
- 인터페이스는 순수 가상(pure virtual)이 아닌 메서드를 포함할 수 있으며, 인라인 구현되는 한 가상이 아니거나 정적인 메서드도 포함할 수 있다.
'⭐ Unreal Engine > UE 개념정리 - 언리얼의 이해' 카테고리의 다른 글
[UE] 언리얼 리플렉션 Unreal Reflection II (0) | 2024.03.21 |
---|---|
[UE] 언리얼 리플렉션 Unreal Reflection I (0) | 2024.03.18 |
[UE] 언리얼 오브젝트 시스템 (0) | 2024.03.18 |
[UE] 문자타입, 문자열 FString, FText, FString (0) | 2024.03.13 |
[UE] Hello Unreal (0) | 2024.03.06 |
댓글
이 글 공유하기
다른 글
-
[UE] 언리얼 리플렉션 Unreal Reflection I
[UE] 언리얼 리플렉션 Unreal Reflection I
2024.03.18 -
[UE] 언리얼 오브젝트 시스템
[UE] 언리얼 오브젝트 시스템
2024.03.18 -
[UE] 문자타입, 문자열 FString, FText, FString
[UE] 문자타입, 문자열 FString, FText, FString
2024.03.13 -
[UE] Hello Unreal
[UE] Hello Unreal
2024.03.06