본문 바로가기
프로그래밍/Unreal Engine4

***언리얼 사용시 코딩 규칙!!!***

by 눈야옹 2016. 3. 28.


*포인트

1. 클래스 체계

 - 대부분 공용 인터페이스를 사용하기 때문에 public을 먼저 선언한후 private를 선언한다.


2. 저작권 공지

 - 에픽이 배포용으로 제공한 파일에는 소스파일 첫줄에 반드시 

// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.

 위 주석이 공지로 있어야한다.

이 줄이 없거나 다르면 CIS오류를 내고 중단시킨다.


3. 작명규칙 



4. 기본 C++ 유형에 이식가능한 alias

* int 대신에 int32를 사용하자



5. 코멘트 (주석)

 100년뒤 내가 봐도 알수 있게 누가 봐도 알수 있게 적자.



6. 예제

 예제는 주옥같은 말이 많아 그대로 가져왔다.


예제 포맷

저희는 JavaDoc 기반 시스템을 사용하여 코드에서 코멘트를 자동으로 추출한 뒤 문서를 만들기 때문에, 코멘트에는 따라야 하는 특수한 포맷 규칙이 몇 가지 있습니다.

다음 예제는 클래스, 스테이트, 메소드, 변수 코멘트의 포맷을 선보입니다. 기억하실 것은, 코멘트는 코드를 증강시켜야 합니다. 코드는 구현을 설명하고, 코멘트는 그 의도를 설명합니다. 코드 한 줄의 의도를 바꾸더라도 반드시 코멘트를 업데이트하시기 바랍니다.

참고로 지원되는 파라미터 코멘트 스타일은 두 가지로, Steep 와 Sweeten 메소드로 구체화되어 있습니다. Steep 이 사용하는 @param 스타일은 전형적인 스타일이지만, 단순 함수의 경우 파라미터 문서를 함수에 대한 설명 코멘트로 통합시키는 것이, Sweeten 예제에서 보듯이 더욱 깔끔할 수 있습니다.

UE3 코딩 표준과는 달리, 메소드 코멘트는 딱 한번, 메소드가 공개적으로 선언되는 곳에 include 시켜야 합니다. 메소드 코멘트는 다른 호출자에게 관련이 있을 메소드 오버라이드 관련 정보를 포함해서, 메소드 호출자에 관련된 정보만을 담아야 합니다. 메소드 구현에 대한 세부사항이나 호출자에 관련이 없는 오버라이드는 메소드 구현 안에 코멘트를 달아야 할 것입니다.

    class IDrinkable
    {
    public:

         * 플레이어가  오브젝트를 마실  호출.
         * @param OutFocusMultiplier - 반환되면 마신 사람의 포커스에 적용할 배수가 들어갑니다.
         * @param OutThirstQuenchingFraction - 반환되면 마신 사람의 갈증 해소 정도가 들어갑니다 (0-1).
         */
        virtual void Drink(float& OutFocusMultiplier,float& OutThirstQuenchingFraction) = 0;
    };

    class FTea : public IDrinkable
    {
    public:

         * 우려내는  사용한 물의 용량과 온도가 주어진 경우 차에 대한 델타-테이스트 값을 계산합니다.
         * @param VolumeOfWater - 우려내는  사용할 물의  mL 입니다.
         * @param TemperatureOfWater - 물의 온도 켈빈입니다.
         * @param OutNewPotency - 담그기 시작한 이후의 차의 효능으로, 0.97 에서 1.04 까지입니다.
         * @return  강도의 변화를 분당   단위(TTU)  반환합니다.
         */
        float Steep(
            float VolumeOfWater,
            float TemperatureOfWater,
            float& OutNewPotency
            );

        void Sweeten(float EquivalentGramsOfSucrose);

        float GetPrice() const
        {
            return Price;
        }

        virtual void Drink(float& OutFocusMultiplier,float& OutThirstQuenchingFraction);

    private:

        float Price;

        float Sweetness;
    };

    float FTea::Steep(float VolumeOfWater,float TemperatureOfWater,float& OutNewPotency)
    {
        ...
    }

    void FTea::Sweeten(float EquivalentGramsOfSucrose)
    {
        ...
    }

    void FTea::Drink(float& OutFocusMultiplier,float& OutThirstQuenchingFraction)
    {
        ...
    }


7. enum문의 사용

네임스페이스로 감싸주고, 혹 클래스 안 로컬스페이스에서 사용할경우 구조체로 감싸준다.


8. 전체적인 스타일

 - 메소드 구현시 세부적인 메소드로 짜잘짜잘하게 쪼개어 구현한다. 메소드의 연속적인 향연!!

 - float -> int32로 변환할때 암묵적으로 하지 않는다(느리다!) 그러므로 appTrunc() 을 사용하여 변환한다.

 - 가급적 const를 자주 사용해 주자.

 - gcc에서 제대로 돌아가게 하려면 .h와 .cpp 의 마지막 줄에는 한줄의 여백을 두자. 




** 맨위 링크에서 전체적으로 읽어보는걸 추천한다.**


출처 : http://blog.dustinlee.me/220934094119