변수명, 함수명에 언더바 사용 이유

변수, 함수명 앞에 언더바가 붙는 경우가 있다. 예를들면 _Print() 이런식이다.

변수명이야 사실 짓는사람 마음이니 코드를 작성한사람에게 물어보지 않는이상 정확하게 알수는 없지만, 그래도 일반적으로 아래의 이유로 사용한다고 한다.

 

  • Scope 내부에서만 사용하는 private 변수/함수에서 사용
  • 자바스크립트의 경우 접근제한자(private, public)가 없음. 따라서 접근제한자 중 private를 표기하기 위해 사용
  • 절차지향언어인 C언어에서 객체지향언어와 유사한 구조를 구현할때 private를 표기하기 위해 사용

 

예제

CustomViewModel 클래스의 변수 data는 클래스의 외부에서 직접 값을 변경할 수 없도록 캡슐화할 필요가 있다. 그러나 클래스 내부에서는 값을 변경할 수 있어야 하기 때문에 값이 변경될 수 있는 _data를 하나 더 만든다. 그리고 data는 _data에서 값을 받아온다. 이 경우 클래스 내부에서만 사용하는 변수 _data가 있고 클래스 외부에서 사용하는 변수 data가 있다. 둘의 목적은 같기 때문에 변수명은 같고 언더바 유무로만 구분하여 직관적으로 코드를 확인할 수 있다.

CustomViewModel(): ViewModel(){
    private val customAPI = CustomAPI()

    private val _data = MutableLiveData<String>()
    val data: LiveData<String> = _data

    fun GetData(): {
        _data.value = customAPI.GetData()
    }
}