[UE5] 이득우 Part 1. 2강 언리얼 C++ 코딩 표준

공부 스파이럴·2023년 12월 6일
0

언리얼 코딩 표준

https://docs.unrealengine.com/5.3/ko/epic-cplusplus-coding-standard-for-unreal-engine/

코딩 표준

  • 프로그래밍을 하는데 지켜야 하는 이름 규칙, 작성 방법 등을 지정한 가이드라인
  • 코딩 스타일, 코딩 컨벤션이라고도 함

  • 절대적으로 좋은 코딩 표준은 없음
    • 가장 중요한 것은 프로젝트의 코딩 표준을 잘 따르는 것

언리얼 코딩 표준

  • 클래스 체계
    • public, private 순으로 작성

  • 명명 규칙
    • 파스칼 케이싱
      • 합성어의 첫 글자를 대문자를 사용
      • 언리얼에서는 파스칼만을 사용
      • UnrealEngine
    • 카멜 케이싱
      • 첫 합성어는 소문자 나머지는 대문를 사용
      • unrealEngine
    • 스네이크 케이싱
      • 합성어 사이에 언더바 사용
      • 보통 C++에선 이 방식이 많음
      • unreal_engine

    • 템플릿 클래스는 접두사 T를 포함
    • UObject 상속받는 클래스는 접두사 U
    • AActor 상속받는 클래스는 접두사 A
    • SWidget 상속받는 클래스는 접두사 S
    • 추상 인터페이스 클래스는 접두사 I
    • 열거형은 접두사 E
    • 부울 변수 접두사 b
      • 예외적으로 소문자
    • 언리얼 상속이 아닌 일반적인 C++ 클래스나 구조체는 접두사 F

    • 부울을 반환하는 모든 함수질의형으로 작성
      • IsVisible(), ShouldClearBuffer()
      • 단순 명사면 의도를 알기 힘듦

    • 파라미터의 경우 In/Out을 통해 명시 권장
      • 함수가 끝난 이후에 사용 Out
      • 입력으로만 사용 In
      • 둘다 InOut

    • 글로벌적으로는 문제의 단어를 피해라

  • 포터블 C++ 코드
    • int의 경우에도 uint8, int32와 같이 명시
    • 문자는 TCHAR
    • int의 크기를 보장해주진 않지만 32비트 이상임은 보장

  • C++ 표준 라이브러리 사용 X
    • 표준 라이브러리가 안정적이고 완성도가 높기 전에 언리얼 자체에서 만들어뒀음
    • 사용해도 되는데 무거워질 수 있음
    • 언리얼의 지원이 더 필요없다면 표준 라이브러리로 갈 수도 있다는데 현재로선 희박한 듯

  • Const 정확도
    • const가능하면 최대한 사용해달라
    • 예시는 문서에

  • 최신 C++ 언어 문법
    • 언리얼 엔진 빌드 시 요구되는 최소 언어 버전은 C++17
    • override, final 강력히 권장
    • nullptr 사용, NULL 금지
    • auto 지양
      • 람다, 반복자 등을 사용할 때는 auto 가능
    • 범위 기반 for문 사용 추천
    • 람다 함수 사용 가능
    • 열거형은 enum class 권장
    • std::move 대신 **MoveTemp 사용
    • 언리얼은 생성자 구문에서 초기화하는 것이 좋음
      • 초기화 구문 사용은 가능하긴 함
    • 서드 파티 코드는 명시
    • 중괄호는 새 줄에 중괄호를 작성
      • if - else의 경우에도 항상 중괄호
    • 탭은 4자로 스페이스
    • switch 문
      • 다음 케이스로 넘기는 것을 명시적으로
      • break, return 등 꼭 달아주거나
      • // falls through 코멘트 달아주기
    • 물리적 종속성
      • 파일은 접두사를 뺌
      • 헤더에 #pragma once 필수
      • include는 세밀하고 최대한 적게
        • include 대신 전방선언이 가능하면 그렇게 함
    • 캡슐화
    • 족송성 문제
      • 다른 클래스에 영향을 주지 않게
    • 스트링 리터럴은 항상 TEXT()
    • 타입을 쓰고 바로 오른쪽에 포인터나 레퍼런스 쓰고 한 칸 스페이스
      • FInd In Files 활용에 중요

0개의 댓글