Skip to content

안드로이드 코드 컨벤션

Mendel edited this page Oct 19, 2023 · 5 revisions
  • 패키지 이름은 가능하면 소문자로 짓는다. 언더스코어는 사용하지 않으며, 불가피하게 연결된 단어를 사용해야 하는 경우는 camelCase로 표현한다.
    package com.ddangddangddang.domain (o)
    package com.ddangddangddang.domain_module (x)
    package com.ddangddangddang.myProject (o)
  • 초기 세팅 함수 이름은 setup-()으로 네이밍을 한다.
    fun setupXXX()
  • 상태에 대한 정보를 표현할 때, 프로퍼티는 is- 로, 메소드는 check-로 네이밍을 짓는다.
    val isXXX(): Boolean
	get() = // ...

    fun checkXXX(): Boolean
  • return이 있는 데이터를 불러올 때는 get- 이라는 이름을 사용한다.
    fun getXXX(): DataType
  • 특정 객체를 찾는 함수 이름
    fun findXXX(): ObjectType
  • 복수형을 가져오는 경우 뒤에 s를 붙이며, Collection 이름을 붙이지 않는다.
       getProducts()   (o)
    getProductList()   (x)
  • 원시 값으로부터 enum을 찾을 때 함수 이름은 find()로 한다.
    enum class Color {
        RED, BLUE, GREEN;

        fun find(rawColor: String): Color = when (rawColor) {
            "red" -> RED
            "blue" -> BLUE
            "green" -> GREEN
            else -> throw IllegalArgumentException("invalid color: $rawColor")
        }
    }
  • Listener 이름
    • function 을 1개만 가지는 경우
      fun interface OnXXXListener
    • function 을 2개만 가지는 경우,
      interface XXXListener
    • on[명사][동사] () 리스너가 전적으로 이벤트를 처리할 때(즉, 이벤트를 핸들링하는 주체가 listen하고 있는 곳일 때)
      fun onClick()
      fun onFocusChange()
      fun onScrollChange()
      fun onAnimationStart()
      fun onTextChange()
    • on[명사][동사 과거형] () 무언가 한 번 처리된 결과를 listener에게 알려줄 때(즉, 어떤 동작 이루에 이 동작이 일어났음을 listener에게 알려줄 때)는 과거형의 이름과 걸맞음
      fun onScrollStateChanged()
      fun onTextChanged()
  • when 상태문
    • when 분기문은 한 줄일 경우 중괄호를 사용하지 않는다.
    • 여러 개의 조건을 동시에 사용하는 경우 조건마다 개행하며, →를 아래로 내려쓴다.
      when (myReference) {
          Comparable::class,
          Iterable::class,
          String::class, // trailing comma
              -> true
          else -> false
      }
  • 아키텍처 모듈 간 모델과 Mapper는 다음과 같은 구조로 네이밍을 한다.
    • Presentation 계층에 해당하는 현재 우리 app모듈에 위치한 모델들에만 -Model이라는 suffix를 붙인다.
    • Mapper의 이름은 아래처럼, to[이동하고자 하는 계층명] 와 같이 네이밍을 한다.
      fun User.toPresentation(): UserModel
      fun UserModel.toDomain(): User
  • Resource 명
    • layout은 <WHAT>_<WHERE>
      activity_main
      fragment_home
      item_bid_history
      
    • id는 <WHAT>_<DESCRIPTION>
      • <WHAT>
        • 뷰의 이름이 두 단어 이상이면, 카멜 케이스이면 대문자를 축약한 형태로 작성한다
        • 뷰의 이름이 한 단어라면, 모두 소문자로 바꾼 형태로 작성한다.
        • 커스텀뷰는 전체 뷰의 이름을 스네이크 케이스로 작성한다.
      activity_main
      fragment_home
      item_bid_history
      
    • drawable은 <WHAT>(<WHERE>)<DESCRIPTION>(<SIZE>)
      • 여러군데에서 사용된다면, <WHERE>는 생략 가능
      • 이미지의 크기가 1개 밖에 없는 경우, <SIZE>는 생략 가능
      • <WHAT> 은 해당 이미지가 어디에서 쓰이냐를 따름.

      What

      Prefix 설명
      btn_ 버튼으로 쓰이는 이미지
      ic_ 버튼이 아닌 화면에 보여지는 이미지
      bg_ 버튼이 아닌 화면에 보여지는 이미지
      img_ 실제사진이거나 아이콘형태가 아닌 일러스트형태의 이미지
      div_ divider로 활용되는 이미지
      ic_people_alt_24 // 버튼 용도가 아니라 화면에 보여지는 이미지로써, 경매 입찰 인원을 표현하는데 사용된다.
      bg_white_grey_radius_10dp // 배경은 흰색, 테두리의 radius가 10dp에 회색
      
    • String은 <WHERE>_<DESCRIPTION>
      • 특정화면이 아니라, 여러군데에서 공통으로 재사용될 텍스트라면 all_<DESCRIPTION>로 이름을 짓는다.
      all_price // "%,d 원"
      search_keyword_hint // "상품명 검색"
      
Clone this wiki locally