본문 바로가기
Kotlin

[Kotlin] 언더스코어(_)를 변수 이름에 붙이는 이유

by LoseyKim 2024. 9. 3.

프로그래밍을 하다 보면 변수 이름 앞에 언더스코어(_)가 붙어 있는 걸 볼 수 있을 거예요. 이게 왜 필요한지 궁금할 수 있는데, 사실 이 언더스코어는 코드의 가독성을 높이고 관리하기 쉽게 만드는 데 도움을 줘요.


1. 가시성 관리

프로그래밍에서 가시성은 어떤 코드가 어디에서 보이고 접근할 수 있는지를 뜻해요. 때로는 특정 변수들이 클래스나 함수 내부에서만 보이고, 외부에서는 접근하지 못하게 해야 할 때가 있어요. 이럴 때 언더스코어를 붙이면, "이 변수는 내부에서만 쓰이고, 외부에서는 보이지 않도록 하자"라는 신호를 주는 거예요.


2. 내부 상태 변수 표시

프로그램에는 내부적으로 처리되는 데이터와, 외부에 보여주는 데이터가 있어요. 예를 들어, 앱에서 할 일 목록을 관리한다고 해봅시다. 이 목록을 내부적으로 `_tasks`라는 변수에 저장해두고, 외부에는 `tasks`라는 읽기 전용 변수만 보여줄 수 있어요. 이렇게 하면 외부에서 데이터를 수정하지 못하게 하면서도 필요한 정보를 제공할 수 있어요.

class WellnessViewModel {
    // 내부에서만 사용하는 리스트, 직접 접근 불가
    private val _tasks = mutableListOf<String>()

    // 외부에 노출하는 읽기 전용 리스트
    val tasks: List<String>
        get() = _tasks

    // 새로운 작업을 추가하는 메서드
    fun addTask(task: String) {
        _tasks.add(task)
    }

    // 작업을 삭제하는 메서드
    fun removeTask(task: String) {
        _tasks.remove(task)
    }
}

이 코드에서 `_tasks`는 내부적으로만 사용되고, 외부에서는 `tasks`를 통해서만 읽을 수 있어요. 이렇게 중요한 정보가 무분별하게 바뀌는 것을 막을 수 있죠.


3. 캡슐화

캡슐화는 중요한 데이터를 감싸서 보호하는 개념이에요. 변수 이름 앞에 언더스코어를 붙이는 것도 이런 보호 방법 중 하나예요. 언더스코어를 붙이면, "이 변수는 이 클래스 안에서만 사용하고, 외부에서는 건드리지 마!"라고 알리는 셈이에요. 이로써, 코드의 안전성을 높일 수 있어요.


4. 네이밍 충돌 방지

프로그래밍을 하다 보면, 같은 이름을 가진 변수가 필요할 때가 있어요. 예를 들어, 클래스 내부와 함수 내부에서 `name`이라는 변수를 사용하고 싶을 수 있죠. 이럴 때 언더스코어를 붙여서 `_name`으로 만들면, 두 변수를 쉽게 구분할 수 있어요. 이렇게 하면 이름이 충돌하는 문제를 피할 수 있어요.


결론

언더스코어(_)를 변수 이름 앞에 붙이는 것은 코드의 안전성과 가독성을 높이는 방법이에요. 가시성을 관리하고, 내부 상태를 보호하며, 네이밍 충돌을 방지하는 데 큰 도움이 돼요. 이런 관습을 잘 활용하면, 코드를 작성할 때 더 명확하고 안정적으로 작업할 수 있고, 나중에 코드를 읽거나 수정할 때도 더 쉽게 이해할 수 있어요.