[UE] 언리얼 엔진 코딩 컨벤션(Coding Convention)
코딩 컨벤션(Coding Convention)
유지보수하기 쉬운 코드를 작성하기 위한 일종의 코딩 스타일 규약
실제로 프로젝트를 진행할 때, 코드 작성은 항상 다른 사람과의 협업을 베이스로 생각해서 작성해야 한다. 특히 이번에 소규모 팀프로젝트를 진행하는 과정에서 코딩 컨벤션을 정하지 않으면 발생할 수 있는 문제나 에로사항들을 겪고 보니 기업에서 대규모의 팀단위로 이루어지는 프로젝트에서는 문제가 정말 크겠다는 생각이 들었다. 이런 협업이라는 특성 때문에 우리는 코딩 컨벤션이라는 표준 및 모범 사례를 준수할 수 있도록 프로젝트나 산업 내에서 정해진 코딩 스타일 규약을 따르는 것이 좋다. 이러한 코딩 컨벤션의 필요성 때문에 언리얼 엔진 공식 문서에서 제공하는 코딩 표준에 대해 알아봤다.
코딩 컨벤션의 필요성
- 소프트웨어의 총 수명 비용 중 80%가 유지보수에 소모
- 최초 작성자가 해당 소프트웨어를 끝까지 유지보수하는 경우는 거의 없음
- 코딩 컨벤션을 사용하면 코드의 가독성 향상 → 코드를 이해하는 시간 감소 및 이해도 상승
- 대다수의 코딩 컨벤션이 크로스 컴파일러 호환성에 필요
1. 저작권 고지
에픽게임즈에서 제공한 모든 소스 파일은 파일 첫 번째 줄에 저작권을 고지해 줘야 한다. 언리얼 엔진에서 제공한 소스 파일에는 좌측 사진과 같이 고지가 되어 있고, 언리얼 엔진 프로젝트에서 만든 클래스의 소스코드에는 우측 사진처럼 주석으로 저작권 고지를 해달라는 주석이 있다.
2. 클래스 작성 시 유의 사항
작성자보다 읽는 사람을 염두에 두고 작성해야 하니 보통 인터페이스가 위치하게 되는 public 부분을 private 부분보다 먼저 작성하는 것이 좋다.
3. 네이밍 컨벤션 (명명 규칙)
- 파스칼 케이스 사용 → 단어의 첫 글자를 대문자로 표시
ex) TestWord - 언더바('_') 사용 금지
- 타입 이름에는 추가적으로 대문자로 접두사를 포함
- 템플릿 클래스 접두사 T → class TAttribute
- UObject 상속하는 클래스 접두사 U → class UActorComponent
- AActor 상속하는 클래스 접두사 A → class AActor
- Swidget 상속하는 클래스 접두사 S → class SCompoundWidget
- 추상적 인터페이스 클래스 접두사 I → class IAnlyticsProvider
- 열거형 접두사 E → enum class EColorBits
- 부울 변수 접두사 b → bHasFadedIn
- 그 외 대부분 접두사 F
- 부울을 반환하는 모든 함수는 IsVisible()과 같이 의문문 형태로 작성
- 함수 파라미터가 레퍼런스로 전달되어 파라미터 변경 사항이 함수가 종료되어도 사용되면 접두사 Out 권장
- 입력으로만 사용되면 접두사 In
- In, Out 둘다 해당한다면 InOut
4. 포터블 C++ 코드
- int 플랫폼마다 크기 상이할 수 있음 → 최소 너비는 32비트 보장
- char(문자) → TCHAR 사용 (크기 추정 금지)
- string(문자열) → FString 사용 (TCHAR 배열을 포함하는 헬퍼 클래스)
- int* (정수 포인터) → int가 플랫폼마다 크기가 상이할 수 있으니 PTRINT 사용 (크기 추정 금지)
5. 표준 라이브러리 사용 지양
- 자체 라이브러리로 대체해 메모리 할당에 대한 제어력 강화
- 표준 라이브러리가 쓸만하기 이전에 이미 자체 라이브러리를 갖추었음
6. Const 사용 권장
const를 정확하게 사용하여 코드의 가독성 향상을 추구할 것
7. C++ 언어 문법
기본 : C++20 언어 버전
최소 : C++17 언어 버전
8. 기타
- static_assert → 컴파일 시간 어서트가 필요한 경우 사용
- override, final → 사용을 적극 권장
- nullptr 가능, NULL 불가능
- auto 사용 지양 → 코드 가독성에 악영향을 미침
But, 코드로 표현할 수 없는 람다나 가독성에 악영향을 줄 수 있는 반복자의 경우 사용 - 서드 파티 코드 → 엔진의 라이브러리 코드를 수정하면 변경 이유를 설명하는 태그 작성(라이브러리 버전 업데이트할 때 병합이 쉽게 이루어짐)
- 중괄호는 새 줄에 작성 + 단일 구문에도 중괄호 필히 표시
- 탭은 스페이스 4번
- switch문 사용 시, 다음 케이스로 넘어간다는 것을 break나 주석으로 'falls through'라고 달아 명시할 것
- 파일 이름에는 접두사 붙이지 않음
- 모든 헤더 '#pragma once' 지시어 작성
[UE5] 언리얼 엔진 C++ 코딩 표준 (Coding Standard)
언리얼 엔진 C++ 코드를 학습하면서 공개된 소스코드와 엔진 코드를 보면서 언리얼 엔진만의 코딩 컨벤션이 꽤 강하게 자리 잡고 있다는 느낌이 들었다. 인공지능 개발 직군으로 서비스를 개발
dlaiml.tistory.com
[UE5] 이득우 Part 1. 2강 언리얼 C++ 코딩 표준
언리얼 코딩 표준
velog.io
https://ccomccomhan.tistory.com/185
[Java] - 카멜케이스와 파스칼케이스란? (프로그래밍 명명 규칙) 간단하고 쉽게 이해하기
🧹 간단 정리 카멜케이스, 파스칼케이스 모두 프로그래밍에서 주로 사용하는 명명 규칙. 카멜케이스는 첫 글자 소문자 이후, 각 단어의 첫 글자를 대문자로 표시. ex) myVariableName) 주로 변수나 함
ccomccomhan.tistory.com