-
안드로이드(자바) 코딩 컨벤션(Convention)Programming/JAVA 2020. 2. 16. 18:07728x90
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>
- 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