코틀린과 자바는 한글 네이밍이 가능하다. (변수명, 클래스명 등)
하지만 우리는 주석을 제외하고는 코드에서 한글을 마주치는 경우가 거의 없다.
또 영문으로 코드를 작성하는 것에 익숙하기에, 의미가 잘 전달되더라도 한글 네이밍을 보면 눈살이 찌뿌려질 수 있다.
그렇다면 한글 변수는 나쁜가?
사람들이 한글 변수를 사용하지 않는 이유를 개인적으로 추측해보았다.
- 코드를 영어로 작성하는데 중간에 한글을 섞으려면 한/영 키를 눌러야한다. (즉 키보드를 한 번 더 눌러야한다.)
- 영어로 전부 작성되어있는 코드 사이에 한글이 박혀있으면 굉장히 생소하다.
- 카멜케이스 같은 네이밍 컨벤션을 적용하기 어렵다.
- 한번쯤 생각해 보았더라도 동료들을 설득할 수 있을지 모르겠다.
- ...
읽어보면 카멜케이스를 적용하기 어렵다 를 제외하면 그리 치명적인 이유는 없다.
그렇다면 왜 사용하지 않을까?
지금까지 영문 네이밍을 잘 사용해왔기에 굳이 한글을 사용할만한 메리트가 없었기 때문이라고 생각한다.
나 또한 한글 변수가 가능하다는 것은 알고 있었지만, 굳이 시도해볼 생각은 없었다.
치명적인 이유가 없더라도, 굳이 생소함을 감수하면서 사용할 필요가 없었기 때문이다.
그리고 이번에 나는 한글 네이밍 사용을 결정했다.
나는 ZOOC이라는 팀에서 fitapat이라는 서비스를 만들고 있다.
fitapat은 반려동물의 사진을 AI로 커스텀한 사진이 입혀진 제품을 판매하는 서비스이다.
앱 내의 많은 문장에 유저의 반려동물 이름을 삽입해야하는 요구사항이 발생했다.
이 요구사항을 처음 마주쳤을 땐 굉장히 간단하다고 생각했다. 그냥 유저의 반려동물 정보를 받아와 이름만 문장에 넣어주면 되는 것 아닌가? 그러나 생각보다 귀찮은 문제가 기다리고 있었다.
반려동물의 이름 뒤에 붙는 조사가 이름의 받침 여부에 따라 바뀐다는 것이다.
예를 들어 토리와 세바스찬이라는 강아지가 있다고 해보자.
그리고 앱에는 아래와 같은 문구가 있다고 해보자.
반려동물로 커스텀 AI 캐릭터 만들기
위 문장에 토리와 세바스찬을 넣어보자.
- 토리로 커스텀 AI 캐릭터 만들기
- 세바스찬으로 커스텀 AI 캐릭터 만들기
그럼 위처럼 조사가 달라지게 된다.
두 예시 말고도 다른 많은 경우의 수가 존재한다.
(로/으로, 이/가, 은/는, 을/를, 와/과 ...)
그래서 반려동물의 이름을 넣으면 받침 유무에 따라 조사를 붙여서 반환해주는 함수를 만들었다.
이때 어떤 조사가 필요한지를 함수에 알려줘야했다.
fun getParticle(word: String, particle: Particle): String
그래서 Particle이라는 타입을 만들어 조사 종류를 구분하기로 했다.
이늄 클래스로 Particle을 만들고 받침이 있는 경우와 없는 경우를 나타내는 두 개의 변수를 만들었다.
enum class Particle(val withLastConsonantChar: String, val withoutLastConsonantChar: String)
자 이제 조사의 종류를 구분해야한다. 여기서 문제가 발생했다. 이름을 뭐라고 짓지?
한국어에는 많은 종류의 조사가 있었다. 보격 조사, 목적격 조사, 보조사, 접속조사 ...
이들을 어떻게든 영어로 표현해보려고 했다.
SubjectiveParticle, ObjectiveParticle, ConnectParticle ...
그런데 미래에 조사의 경우의 수가 늘어나면 어떡하지? 적합한 단어를 찾을 수 있을까?
(나무위키에 받침에 따라 달라지는 조사가 무려 11개나 적혀있었다.)
무엇보다 가장 중요한 부분은 내가 해당 변수들을 사용할 때 뭐가 뭔지 모르겠다는 것이었다.
val petName = getParticle(pet.name, Particle.SubjectiveParticle)
이런식으로 코드를 작성하게 되는데, Particle에 해당하는 인자를 넣을 때 내가 만들고 내가 헷갈려하는 상황이 발생했다.
그래서 나는 한글 네이밍을 적용해보기로 결심했다.
enum class Particle(val 받침있을때: String, val 받침없을때: String) {
은는("은", "는"),
을를("을", "를"),
이가("이", "가"),
으로로("으로", "로"),
}
이왕 한글로 적는거 withLastConsonantChar와 withoutLastConsonantChar도 한글로 변경해버렸다.
다른 곳에서는 이런식으로 사용하게 된다.
val petName = getParticle(petName, Particle.이가)
어떤가 훨씬 알아보기 쉽지 않은가? 적어도 SubjectiveParticle보다는 쉽다고 생각한다.
좋을까?하는 마음 반과 괜찮을까?하는 마음 반으로 시작한 한글 네이밍 시도는 꽤 만족스러웠다.
결국 나는 영어의 한계를 맛보고 한글 네이밍을 사용하기로 결정했다.
물론 한글 네이밍을 처음 사용해보기 때문에, 내가 예상하지 못한 사이드 이펙트가 발생할 수도 있다.
그래서 한글 네이밍을 적극 추천하는 것은 아니다. 우선 내가 몇 개월간 사용해보고 다시 후기를 들고 오겠다.
+
Particle은 왜 한글로 짓지 않았는가를 궁금해 할 수도 있다.
나도 꽤 고민했다. 하지만 우선 영어로 남겨두기로 했다.
한글 네이밍을 적용하긴 했지만 아직 코드를 작성할 때 영어가 익숙할 수 밖에 없다.
코드를 작성하며 한/영 키를 누르는 것은 꽤나 생소할 것이다. (당신이 주석을 많이 작성한다면 그것은 예외다..)
그래서 Particle은 일종의 쿠션으로 사용하기로 했다.
Particle을 적고 점(.)만 찍으면 한/영 키를 누르지 않고 한글 변수를 사용할 수 있지 않은가?
우리는 영어가 익숙하므로 이 방향이 우리에게 가장 자연스러울 것이라고 생각했다.
'트러블 슈팅' 카테고리의 다른 글
식은땀 나는 개발자로서의 첫 핫픽스 (절대 미들닷을 잊지마) (3) | 2024.03.29 |
---|---|
액티비티와 프레그먼트간 데이터를 주고 받는 방법들 (3) | 2023.08.25 |