ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 안드로이드(자바) 코딩 컨벤션(Convention)
    Programming/JAVA 2020. 2. 16. 18:07
    728x90

    Android App 개발 프로젝트를 진행하게 되었는데,

    협업을 위해 안드로이드 코딩 컨벤션을 정리하고 반영하여,

    남들이 읽기 편한 클린 코드 작성 및 코드 리팩토링을 진행하려고 한다.

     

     

    1. JAVA 규칙

     

    - 예외를 무시하지 마세요.

    예외를 무시하는 것이 적절하다고 확신하는 경우에는 마지막 수단으로 이를 무시할 수도 있지만 합당한 이유를 주석으로 남겨야 합니다.

     

    - 일반 예외를 캐치하지 마세요.

    Exception 으로 모든 예외를 캐치하려고  하는 경우

     

    - 파이널라이저를 사용하지 마세요.

    파이널라이저가 언제 호출될지 또는 호출이 되기는 할지는 보장되지 않습니다.

     

    - import 규칙

     import를 정규화 하세요.

      import foo.*;		// X
      import foo.bar; 	// O

    Android, 타사(com, junit, net, org), java 및 javax 순서로 import

    각 그룹 내에서 알파벳 순서여야 하며, 소문자 앞에 대문자가 오도록 함

    각 주요 그룹 간에는 빈 행으로 구분 (android, com, junit, net, org, java, javax)

     

    - 자바 라이브러리 규칙을 준수하세요.

     

    - Javadoc 표준 주석을 사용하세요.

    파일 상단 : 저작권 고지, 패키지 및 가져오기 구문

    이후 : 클래스나 인터페이스 선언

    작성하는 모든 클래스 및 사소하지 않은 public 메소드에는 클래스 또는 메소드의 역할을 설명하는 문장이 1개 이상 포함된 주석이 있어야 함. 또한 이 문장은 3인칭 서술형 동사로 시작해야 한다.

      /** Returns the correctly rounded positive square root of a double value. */
    
      static double sqrt(double a) {
          ...
      }
      /**
      * Constructs a new String by converting the specified array of
      * bytes using the platform's default character encoding.
      */
      public String(byte[] bytes) {
          ...
      }

     

    - 짧은 메소드를 작성하세요.

    메소드가 40행 정도를 초과하는 경우에는 프로그램의 구조가 손상되지 않는 선에서 이를 분할할 수 있는지 생각하기

     

    - 표준 위치에 필드 정의

    필드는 파일 상단이나 필드를 사용하는 메서드 바로 앞에 정의하기

     

    - 변수 범위를 제한하세요.

    가능한 코드블럭 안쪽에 변수 선언하여 오류 발생 확률 줄이기

     

    - 필드 이름 지정 규칙 준수

    private, non static 필드의 이름은 m으로 시작

    static 필드 이름은 s로 시작

    다른 필드는 소문자로 시작

    public static final(상수)는 ALL_CAPS_WITH_UNDERSCORES

        public class MyClass {
            public static final int SOME_CONSTANT = 42;
            public int publicField;
            private static MyClass sSingleton;
            int mPackagePrivate;
            private int mPrivate;
            protected int mProtected;
        }
        

     

    - 표준 프레이스 스타일 사용

      if (condition) {
          body();
      }
    
      if (condition) body();
    
      // bad!
      if (condition)
          body();  				
    

     

    - 표준 자바 주석 사용

    예) @Override

     

    - 약어를 단어로 취급

    좋음 / 나쁨

    XmlHttpRequest XMLHTTPRequest
    getCustomerId getCustomerID
    class Html class HTML
    String url String URL
    long id long ID

     

    - 일관성을 유지 하세요.

     

    - 변수 명명 규칙

    카멜 표기법 사용

    약어를 사용하지 않고 모든 의미를 충분히 담는다

    한 글자로 된 이름을 사용하지 않는다

    선언된 지점에서 초기화하며, 가능한 사용 범위를 최소화 (0, Null)

    반복문 index는 i,j,k 등으로 사용

    지역변수와 멤버변수(전역변수)는 변수명 앞에 밑줄을 사용하여 구분한다.

    boolean 타입의 변수는 접두사로 is를 사용 (isCheck)

     

    - 클래스 변수는 public, protected, private 순서

    - 메소드는 범위나 접근성을 기준으로 나누기 보다 기능성에 의해서 구성

     

    2. XML naming Convention

     

    - 기본 원칙

    <WHAT>_<WHERE>_<DESCRIPTION>_<SIZE>

    @MOLSJEROEN

     

    - Layouts

     

    Prefix / Usage

    activity contentview for activity
    fragment view for a fragment
    view inflated by a custom view
    item layout used in list/recycler/gridview
    layout layout reused using the include tag

    ex)

    activity_main

    fragment_articledetail

    view_menu

    item_article

    layout_actionbar_backbutton

     

    - Strings 

    ex)

    articledetail_title : title of ArticleDetailFragment

    feedback_explanation : feedback explanation in FeedbackFragment

    feedback_namehint : hint of name field in FeedbackFragment

    all_done : generic "done" string

     

    - Drawables

    ex)

    articledetail_placeholder : placeholder in ArticleDetailFragment

    all_infoicon : generic info icon

    all_infoicon_large

    all_infoicon_24dp

     

    - IDs

    ex)

    tablayout_main -> TablayoutMain

    textview_articledetail_title -> TextviewArticledetailTitle

    textview_menu_profile -> TextviewMenuProfile

     

    title_textview -> TitleTextview

     

     

    3. 개인적으로 지키고자 한 것

     

    - 자바 컨벤션 지키기(명명법, 괄호, 주석 등)

    - 객체지향 특성 극한으로 끌어올리기

    - 코드의 Indent 깊이가 2를 넘지 않도록 노력하기 (for문 안에 if문 기피)

    - 메소드의 최대 길이는 20줄 이내로 제한

    - 클래스를 정말 작은 단위로 쪼개기

    - 디자인 패턴 적용하기

     

    이후 추가로 참고할 것들

    https://m.blog.naver.com/reona7140/221306141987

    https://helloworld-88.tistory.com/22

     

    출처 : 

    안드로이드 오픈소스 기여자를 위한 AOSP 자바 코드 스타일

    https://source.android.com/setup/contribute/code-style

    A successful XML naming convention

    https://jeroenmols.com/blog/2016/03/07/resourcenaming/

     

    728x90

    댓글

Designed by Tistory.