엄범


구글의 스타일 가이드 모음https://github.com/google/styleguide

Helper class / Utility class

helper class는 특정 클래스의 작업을 도와주는 유틸리티 클래스라고 생각하면 된다. 
어떤 기능을 제공하기는 하는데, 그 자체로 그 어플리케이션의 핵심 로직은 아닌 클래스를 의미한다. 예를 들면 DB를 다룬다거나, 안드로이드에서 CustomTabs를 띄워주는 기능을 한다거나.

utility class와 하는 일은 비슷하지만, utility class는 모든 메서드가 static이라는 차이점이 있다. 즉, helper class가 더 큰 개념이라고 보면 된다.

파일 이름은 클래스 이름과 동일하게

대문자로 시작하도록 한다.
utils, main 이런건 예외. 

패키지 이름은 그냥 붙여서 다 소문자로. `` apigateway``

Parameter vs Argument

Parameter 는 함수를 선언할 때의 변수의 이름

Argument 는 함수를 호출하면서 전달하는/받는 값

  - Parameter 는 '파라미터' 또는 '매개변수', '인수'로,

  - Argument 는 '아규먼트', '인자', 또는 '전달인자'로


DATE FORMAT 상수 네이밍? 애초에 DATE FORMAT 상수가 필요할까?

https://stackoverflow.com/questions/52818450/java-constant-names-conventions-for-date-formats

`` DateTimeFormatter`` 클래스에서도 제공하고 있는건 `` ISO_DATE_TIME`` 같은 의미론적 상수이지, `` YYYY_MM_DD`` 같은 value를 그대로 옮긴 이름이 아니다.


Naming convention

  • Suffixes are sometimes useful:
    ``max`` - to mean the maximum value something can have.
    ``foo_cnt`` - 어떤 항목 foo의 개수를 의미하는 변수. len(foo)
    num_of_xxx 보다는 xxxCount 같은걸 사용한다.
    ``key`` - key value.
    ``idx`` - 요것도 자주 씀.
    For example: retry_max to mean the maximum number of retries, retry_cnt to mean the current retry count.
  • Boolean variable은 lombok을 쓰고 있다면 is 자동으로 처리해주므로 변수에는 붙이지 않고, 그렇지 않은 경우 변수 자체에 is prefix를 붙여준다.

    Kotlin ( Java )

    ```kt
    class DeclarationProcessor { val x: Int }        // :는 변수 이름에 붙인다.
    object EmptyDeclarationProcessor : DeclarationProcessor() { ... }

    fun processDeclarations() { ... }    // except : factory function
    var declarationCount = ...           // local이든 property든. except : reference to singleton
    private val _backingProperty = "a"
    근데 변수는 C++처럼 언더바로 가도 될 것 같은데?

    const val MAX_COUNT = 8
    val USER_NAME_FIELD = "UserName"
    enum class Color { RED, GREEN }     // 아무거나 써도 되긴 한다만 보통 UPPERCASE
    ```
    상수는 `` UPPERCASE_WITH_UNDERSCORE``
    이 때 상수란 ``kt const``가 아니어도 쓰임이 상수이면 상수로 간주한다. (즉 top-level 프로퍼티거나, custom ``kt get()``을 정의하지 않는 object class의 ``kt val`` 프로퍼티이면서 불변 데이터를 가지고 있는 경우)
    mName같이, 멤버 변수 임을 나타내기 위한 prefix같은건 붙이지 않는다.

    Java
    구글 스타일이 좋긴 한데, 너무 복잡하고 양이 많아서 짧은 시간에 협업할 때는 부적절한 듯.

    그래서 자주 쓰는건,

    네이밍 규칙은 http://www.oracle.com/technetwork/java/codeconventions-135099.html


    파일 이름은 클래스 명과 동일하게 한다.

    각각의 자바 소스 파일은 하나의 public (class | interface)를 포함.

    private (class | interface)가 public 클래스와 연결되어 있을 경우는 하나의 소스파일에 둘 수 있음.

    이 경우 public (class | interfcae)는 파일 내에서 첫 번째 클래스 또는 인터페이스여야 함.


    indent는 스페이스바 4개

    중괄호는 K&R style


    https://source.android.com/setup/code-style#follow-field-naming-conventions

    android 개발 시 따라야 하는 컨벤션은 아니고, android open source project에 참여 시 따라야 하는 컨벤션.


    python

    https://www.python.org/dev/peps/pep-0008/#naming-conventions

    함수, 메소드, 변수에 `` lowercase_with_underscore``

    non-public methods and instance variables에는 `` _single_leading_underscore``를 사용한다.

    근데 이거 빼고는 다 함수는 lowerCamelCase라... 함수같은 경우 개인적으로 짤 때는 PEP8을 따르지 않는 것이 좋겠다.

    https://github.com/google/styleguide/blob/gh-pages/pyguide.md


    C++ ( C )

    리눅스 커널과 파이썬 같은 경우 `` _``를 쓰도록 되어 있는데, 요즘 나오는 언어들은 대체로 camelCase를 쓰는 것 같다.
    리눅스 커널이나 파이썬은 레거시 코드와 통일성을 유지하기 위해 그대로 언더바로 가는게 아닐까 싶기도 하다.
    file name은 ClassName.cpp 로. 
    ```cpp
    #define FLAG       // Google이 C++이면 꼭 필요한거 아님 절대 macro쓰지 말란다.
    namespace lowercasenounderscore {          // namespace 안쪽 indent 하지 않는다!
    class UrlTable { ...
    typedef struct  { } UrlTableProperties;

    void trackingOrderProcess()     // 함수는 camelCase
    int num_dns_connections;        // 변수는 lowercase_with_underscore

    TrackingOrder *foo;             // 포인터는 중간만 아니면 어디다 붙이든 상관없음.

    const int kDaysInAWeek = 7; 
    const int DAYS_IN_A_WEEK = 7;    // 나는 UPPER_CASE로 함.
    // enum도 const와 똑같이 UPPER_CASE.

    _refrobnicate_data_tables(), _destroy_cache()
    // Functions that are there, but shouldn't be called directly, or have obscure uses, or whatever: one or more underscores at the beginning
    ```

    C#

    https://msdn.microsoft.com/en-us/library/ms229002(v=vs.110).aspx


    if와 중괄호 Style

    ``if``와 ``()``는 꼭 공백을 두고, 중괄호 없는 ``if``는 한 줄로 작성하며 웬만하면 중괄호를 쓴다.
    ``{``는 개행하지 말고 선행 문장과 같은 라인에 둔다. ( K&R style ) 
    함수형 프로그래밍에서 객체를 리턴할 경우( ``js return { ...``  ) 개행한 다음 ``{``를 쓰면 문법에러가 발생하기 때문에 일관성이 없어진다.

    ```c

    if (a) {

        b( );

    }

    ```


    HTML naming convention - id, class

    https://google.github.io/styleguide/htmlcssguide.html#ID_and_Class_Name_Delimiters


    단어 abbr convention

    authentication -> authn

    authorization -> authz

    authority -> auth

    state -> state

    status -> stat