인프런 이득우의 언리얼 프로그래밍 Part1을 수강하며 작성한 강의 노트입니다.
파란색 : 강의 외 추가 조사
빨간색 : 중요 내용
핵심
0. C++ 표준 라이브러리 사용 X
1. public에서 private로 이어지는 클래스 체계(Organization) 준수
2. 명명 규칙
- 파스칼 케이싱
- 소문자 가급적 X
- 공백 X
- 언더스코어(_) X
- 모든 클래스와 구조체에는 고유한 접두사 있음
3. 코드의 명확성
- parameter에 가급적 In, Out 접두사 명시
- const 지시자(directive) 적극 활용
- reference를 통한 복사 방지
- auto 키워드 : 예외 상황 외에는 X
4. Find In Files 활용
5. 헤더 파일 및 #include 구문 : 의존성 최소화 시키기
언리얼 C++ 코딩 표준
https://docs.unrealengine.com/5.1/ko/epic-cplusplus-coding-standard-for-unreal-engine/
코딩 표준
기존에 확립된 표준 및 모범 사례를 준수하여 유지보수 가능한 코드를 작성합니다.
docs.unrealengine.com
언리얼에서 명시한 코딩 표준의 중요성
클래스의 체계
읽는 사람은 대부분 클래스의 퍼블릭 인터페이스를 사용할 것이므로, 퍼블릭 인터페이스에서 먼저 선언한 후 클래스의 프라이빗 구현이 뒤따라야 합니다.
예시
명명 규칙
언리얼은 파스칼 케이싱을 따르고 있다
케이싱 종류
- 파스칼 케이싱(Pascal Casing) : 합성어의 첫글자를 대문자로 사용 (Ex. UnrealEngine)
- 카멜 케이싱(Camel Casing) : 첫 합성어는 소문자, 나머지는 대문자로사용 (Ex. unrealEngine)
- 스테이크 케이싱(Snake Casing) : 합성어 사이에 언더바(_)를 사용 (Ex. unreal_engine)
언리얼의 접두사 규칙
- 접두사 T : 템플릿 클래스
- 접두사 U : UObejct에서 상속받는 클래스
- 접두사 A : AActor에서 상속받는 클래스(UObject를 상속받았지만)
- 접두사 S : SWidget에서 상속받는 (UI전용)클래스
- 접두사 I : 추상적 인터페이스
- 접두사 C : 에픽의 개념이 유사한 클래스타입
- 접두사 E : enum형
- 접두사 b : bool형
- 접두사 F : 대부분의 클래스, 구조체 (일부 서브시스템 제외)
- Typedef는 해당 타입에 적합한 접두사 사용
- 구조체 : F
- UObject의 typedef : U
일반적인 코딩 규칙
필수사항
- bool형 함수 : 질의형 (ex. IsVisible())
- 프로지서(void형 함수) : 강한 동사 뒤에 오브젝트 붙이기 (명사형은 비추천)
권장사항
- In 또는 Out 접두사 : 함수 파라미터가 참조로 전달된 후 함수가 그 값을 쓸 것으로 예상되는 경우
- In 또는 Out 파라미터가 bool형일 때 : In/Out 접두사 앞에 접두사 'b' 붙이기 (ex. bOutResult)
포터블 C++ 코드
- TCHAR : char
- uint크기추정 : unsigned byte
- uint8 : 1byte
- uint16 : 2byte
- uint32 : 4byte
- uint64 : 8byte
- int크기추정 : singed byte
- int8 : 1byte
- int16 : 2byte
- int32 : 4byte
- int64 : 8byte
- float : 4byte. 단정밀도 부동 소수점
- double : 8byte. 배정밀도 부동 소수점
- PIRINT : 포인터를 가질 수 있는 정수
언리얼은 C++ 표준 라이브러리 사용 지양
이유 : C++ 표준 라이브러리는 범용적으로 설계된 만큼, 사용 시 컴파일 시간이나 복잡도 등이 증가할 수 있기 대문
Const 정확도 맞추기
주석 : 특수한 코멘트 포맷 규칙
언리얼은 JavaDoc 기반 시스템 사용 : 코드에서 주석을 자동 추출하여 문서 제작 가능
auto 키워드 : 사용 X
예외 상황 : 사용 O
- 변수에 람다 바인딩 : 람다 타입은 코드로 표현 불가하므로
- iterator 변수 : 가독성이 나쁠 때만
- 템플릿 코드에서 표현식의 타입을 쉽게 식별할 수 없는 경우. 고급 사용 사례입니다.
중괄호
if (bThing)
{
return;
}
물리적 종속성
- #pragma once : 모든 헤더에 사용. 복수의 include를 방지
- 전방 선언(forward declaration)
포인터
FShaderType* Ptr
'Unreal > 이득우의 언리얼 프로그래밍' 카테고리의 다른 글
[UE5/Part1-1강] 초기 씬 없애기 (1) | 2023.12.18 |
---|---|
[UE5/Part1-1강] 로그 출력 - UE_LOG() 함수 (0) | 2023.12.18 |
[UE5/Part1-1강] UGameInstance 클래스 재구현하기 (0) | 2023.12.18 |
[UE5/Part1-1강] 언리얼 코드 컴파일 시 주의점 (0) | 2023.12.18 |