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/

     

    권장하는 에셋 명명 규칙

    에셋 구성에 참고하기를 권장하는 명명 규칙입니다.

    docs.unrealengine.com


     

     

    코딩 표준

     

    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/

     

    코딩 표준

    기존에 확립된 표준 및 모범 사례를 준수하여 유지보수 가능한 코드를 작성합니다.

    docs.unrealengine.com


     

     

    헤더 vs 전방 선언

     

    물리적 결합을 최소화하려고 시도하라. 특히, 다른 헤더의 표준 라이브러리 헤더를 include하지 마라.

    헤더 include 대신 전방 선언(forward declaration)이 가능한 경우 그렇게 하라.

    헤더를 include할 때는 가능한 한 세밀하게 하라.

    다른 모듈이 필요로 하는 정의는 Public 디렉터리의 헤더에 있어야 한다. 그 외 모든 것은 Private 디렉터리에 있어야 한다. 기존 언리얼 모듈의 경우 이 디렉터리는 'Src' 및 'Inc'라고 불리기도 한다. 그러나 이는 동일한 방식으로 private 코드와 public 코드를 구분하기 위함일 뿐이지, 헤더 파일을 소스 파일과 구분하기 위함은 아니다.


     

    인터페이스

     

    인터페이스 클래스는 항상 추상형이어야 한다.

    • 인터페이스 클래스는 접두사 'I'를 포함하며, 멤버 변수가 있어서는 안 된다. 
    • 인터페이스는 순수 가상(pure virtual)이 아닌 메서드를 포함할 수 있으며, 인라인 구현되는 한 가상이 아니거나 정적인 메서드도 포함할 수 있다.