안드로이드 코드 스타일(네이밍 컨벤션)

안드로이드 클린코드

안드로이드 개발시에 파일 종류가 많고 lint 같은 코드 스타일 가이드가 없어서

정리하고 개발하려고 합니다

네이밍 컨벤션 (코드)

패키지 이름

모두 소문자로 표시합니다

1
2
3
4
5
6
// Okay
package com.skyksit.dosgame
// WRONG
package com.skyksit.dosGame
// WRONG
package com.skyksit.dos_game

클래스 인터페이스 이름

PascalCase 로 작성합니다.
명사 또는 명사구 로 시작합니다

  • Ex. MyClass, MyInterface

함수 이름

camelCase 로 작성합니다
동사 또는 동사구로 시작합니다

  • fun downloadGameFile

상수 이름

UPPER_SNAKE_CASE 로 작성합니다
숫자 값인 상수는 const 를 사용합니다

1
2
3
4
5
const val NUMBER = 5
val NAMES = listOf("Alice", "Bob")
val AGES = mapOf("Alice" to 35, "Bob" to 32)
val COMMA_JOINER = Joiner.on(',') // Joiner is immutable
val EMPTY_ARRAY = arrayOf()

상수가 아닌 이름

camelCase 로 작성합니다
명사 또는 명사구 입니다

1
2
3
4
5
6
7
val variable = "var"
val nonConstScalar = "non-const"
val mutableCollection: MutableSet = HashSet()
val mutableElements = listOf(mutableInstance)
val mutableValues = mapOf("Alice" to mutableInstance, "Bob" to mutableInstance2)
val logger = Logger.getLogger(MyClass::class.java.name)
val nonEmptyArray = arrayOf("these", "can", "change")

지원 속성

실제 속성 앞에 _ 를 붙입니다

1
2
3
4
5
6
7
8
9
private var _table: Map? = null

val table: Map
get() {
if (_table == null) {
_table = HashMap()
}
return _table ?: throw AssertionError()
}

축약어는 단어처럼

원래 단어의 대소문자는 무시

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

네이밍 컨벤션 (XML)

레이아웃

WHAT_WHERE.xml

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
  • activity_login.xml
  • activity_main.xml
  • fragment_articledetail
  • view_menu
  • item_article
  • layout_actionbar_backbutton

어댑터

리스트뷰, 리사이클러뷰, 그리드뷰에서 사용하는 layout 은 item_ 으로 시작한다

  • item_gameinfo.xml

IDs

WHAT_WHERE_DESCRIPTION
객체타입_레이아웃명_설명

  • tablayout_main
  • imageview_menu_profile
  • webview_dosplay_browser

Drawables

WHERE_DESCRIPTION_SIZE
장소_설명_사이즈

  • login_signup
  • all_infoicon
  • all_infoicon_large
  • all_infoicon_24dp

리소스

res 폴더 내 자산관리 규칙

문자 정보

res/values/string.xml

WHERE_DESCRIPTION 장소_설명
전체에서 다 사용되면 all_

  • articledetail_title
  • feedback_explanation
  • feedback_namehint
  • all_done

색상 정보

res/values/colors.xml

배열 정보

res/values/arrays.xml

Dimensions

res/values/dimens.xml
WHAT_WHERE_DESCRIPTION_SIZE

Prefix Usage
width width in dp
height height in dp
size if width == height
margin margin in dp
padding padding in dp
elevation elevation in dp
keyline absolute keyline measured from view edge in dp
textsize size of text in sp

스타일 정보

res/values/styles.xml

error

단점
리팩토링이 어렵습니다
클래스명 바뀌면 리소스명도 다 일일이 바꿔줘야 합니다

참고포스트

  • Kotlin 스타일 가이드
  • A successful XML naming convention