Listener 함수 이름은 어떻게 지어야 할까? — onUserChange() vs onUserChanged()

Ted Park
PRND
Published in
6 min readFeb 27, 2023

--

- 함수 이름 규칙에 대한 정답은 없습니다.
- 하지만 함께 일하는 동료들끼리 규칙을 정하고 지키기만 하면 됩니다.
- 헤이딜러 안드로이드팀에서 정한 Listener 함수 이름 규칙을 소개 합니다.

안녕하세요.
안드로이드팀의 박상권입니다.

개발을 하면서 이름을 짓는게 어려울때가 많습니다.
(작명소에서 일하는 것도 아닌데 말이죠..)

다양한 작명에 대한 이슈가 존재하지만
오늘은 Listener 이름 짓기에 대한 이슈에 대해 이야기 해보려고 합니다.

안드로이드 개발을 하다보면 수많은 Listener들을 사용하게 되는데
이 Listener들의 함수 이름이 다 제각각 다릅니다.🤔🤔

animator.setListener(object : Animator.AnimatorListener {
override fun onAnimationStart(animator: Animator) {

}
override fun onAnimationEnd(animator: Animator) {

}
override fun onAnimationCancel(animator: Animator) {

}
override fun onAnimationRepeat(animator: Animator) {

}
})
addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {

}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {

}
override fun afterTextChanged(s: Editable?) {

}

Listener의 함수이름의 패턴을 보면 아래중 1가지로 만들어져 있습니다.

  1. on[명사][동사]
    : onFocusChange()
    : onScrollChange()
    : onAnimationStart()
    : onTextChange()
  2. on[명사][동사 과거분사]
    :
    onScrollStateChanged()
    : onTextChanged()

그럼 구글에서는 2개의 Listener 함수이름은 어떻게 다르게 구분해서 만든걸까요?

알 수 없습니다😰

  • 아무리 찾아봐도 구글의 명확한 기준이 없는것 같습니다.
  • 다른 회사들이나 공개된 문서에서도 기준을 찾기 어려웠습니다.

그래서 만들었습니다.

저희는 논의를 거쳐
헤이딜러 안드로이드팀만의 함수이름 규칙을 만들었습니다. 🎉🎉

on[명사][동사]()

  • publisher가 이벤트만 전달하고 listener가 전적인 책임을 처리할 때
  • 이벤트를 handle하는 주체가 listen하고 있는 곳일때
fun onFocusChange()
fun onScrollChange()
fun onAnimationStart()
fun onTextChange()

on[명사][동사 과거형]()

  • publisher가 무언가를 처리하고 listener에게 알려줄 때
  • 어떤 동작을 하고나서 이 동작이 일어났음을 listener에게 알려줄때
  • onEach(), doOnXXX() 개념처럼 특정 이벤트를 intercept해서 쓸때
  • 동작을 한뒤에 listener를 호출해야 과거형의 이름과 걸맞음
fun onScrollStateChanged()
fun onTextChanged()

예시1

  1. 차량번호를 입력하는 CustomView인 CarNumberEditText가 존재
  2. 차량번호 입력이 모두 완료되었을때 이 View를 사용하는 곳에게 알려야 할때

publisher가 이벤트만 전달하고 listener가 전적인 책임을 처리하므로

fun interface OnInputCompleteListener {
fun onInputComplete(carNumber: String)
}

예시2

  1. 설문조사 의견을 전달하는 SurveyDialogFragment가 존재
  2. 설문 내용을 서버에 전송하고 해당 팝업이 완료되었음을 호출한 Activity/Fragment에 알려야 할때

publisher가 무언가를 처리하고 listener에게 알려주는 것 이므로

fun interface OnSurveyCompleteListener {
fun onSurveyCompleted()
}

이렇게 정한 규칙은 헤이딜러 안드로이드팀에서 공개적으로 운영하고 있는
android-style-guide 에도 추가되어 있습니다.

Listener이름 외에도 안드로이드 개발하는데 필요한 다양한 코딩 컨벤션이 궁금하시다면 한번 살펴보세요

여러분들의 Listener 함수이름 규칙은 어떻게 되시나요?
팀에서 정한 나름대로의 규칙이 있다면 댓글로 공유해주세요

그외에 정해보면 좋을만한 애매했던 이름 규칙 주제가 있다면 알려주세요
(팀원들끼리 머리 싸매고 한번 고민해보겠습니다.)

--

--