관련 논문
개요
얼마 전 Kotlin에 대해 이것저것 건드려보다가 Java와 Kotlin을 비롯한 대다수의 언어가 상당히 오래전부터 유니코드 문자를 식별자의 이름으로 지원한다는 사실을 알게되었다. 처음 프로그래밍 언어를 배우기 시작할 당시에만 해도 식별자로는 오직 알파벳과 숫자, 언더스코어(_), 달러표시($)만 사용할 수 있다고 배웠다. 그런데 위 논문에 따르면 이미 2000년 경 전후에 대부분의 프로그래밍 언어가 알파벳 뿐만 아니라 한글, 한자, 일본어 등 다국어 식별자 사용을 지원하였다고 한다. 즉, 내가 처음 프로그래밍 언어를 배우던 그 당시에도 이미 많은 언어가 한글 식별자 사용을 지원했다는 것이다.
C, C++, Java, Python, Kotlin 등의 유력한 프로그래밍 언어들은 모두 영어를 기반으로 설계되어 있다. 이러한 유력한 프로그래밍 언어들 중 C++과 Python, Kotlin 등은 영미권에서 개발된 언어가 아닌데도 불구하고 영어를 기반으로 설계되었다는 점은 굉장히 특이한 점이다. 물론 C++은 C에서 확장되어 개발된 언어이다 보니 영어 기반인 것이 당연할 수도 있겠지만, C를 기반으로 하지 않았고 영미권에서 개발된것도 아닌 언어들도 대부분 영어 기반으로 설계된 것은 조금 특이하다고 생각되었다.
대부분 영어 식별자를 사용하는 이유?
① 대부분의 SW개발업체에서 영어 식별자를 사용하고 있으며, 외국 프로그래머와 협업할 때를 대비해 야 한다.
② 많은 소스코드들이 영어로 이미 생산되어 있어, 영어를 안 쓰다보면 기존 소스코드들을 대할 때 낯설고 어려울 것 같다.
③ Java의 키워드가 모두 영어이고, 한글 식별자를 사용하기 위해 타자할 때 한영 전환 과정이 번거롭다.
논문에서 조사한 영어 식별자 사용을 선호하는 이유는 위와 같다. 그 외에도 대부분의 개발자들이 식별자를 영어로 작성하는 이유로는 아마 다음과 같은 이유가 많을 것이다.
- 프로그래밍 교재에서 한글을 식별자로 사용할 수 있다는 사실을 언급하지 않음
- 예시 코드가 모두 영어 식별자를 사용함
- 한글 식별자가 가능하다는 사실을 언급하더라도 권장되지 않는다고 서술함
특히 2의 경우가 굉장히 많을 것이라고 생각한다. 프로그래밍 언어가 영어 기반으로 되어있을 뿐 아니라 언어를 처음 접하게 되는 교재나 강의에서 영어 식별자만 사용하고 있으니 당연히 영어로만 식별자를 작성해야 한다고 여겨진게 아닐까 생각된다.
한글 식별자를 사용하면 문제가 발생하지 않을까?
위 사진을 보면 IntelliJ에서는 한글 식별자를 사용하면 ASCII 문자가 아니라는 경고를 띄운다. 프로그램 자체에는 문제가 없지만 아스키 문자가 아닌 식별자는 권장하지 않는다는 것이다.
설명에 따르면 따로 문제가 발생하는 것은 아닌데 그저 ASCII가 아닌 기호를 사용하고 있어서 경고를 보내는 것이다. 논문의 저자는 한글 식별자의 기술적인 호환성 문제는 유니코드가 국제 표준으로 자리잡기 전의 과도기에 발생한 문제일 뿐이고 현재는 문제가 없다는 입장을 취하고 있다. 실제로 eclipse나 Visual Studio와 같은 다른 IDE에서는 한글 식별자에 대한 경고를 보내지 않는다.
본인이 편한대로 사용하면 된다!
개인적으로는 업무에 지장이 가지 않는다면 한글 식별자를 사용해도 괜찮을 것 같다고 생각한다. 확실히 한글 식별자를 사용하게 되면 해당 식별자가 무엇을 의미하는지, 어떤 기능을 가지고 있는지에 대해 한눈에 알 수 있다는 장점이 있을 것이다. 실제로 일부 기업의 코드는 한글 식별자를 적극적으로 사용하고 있다고 한다.
논문의 저자는 적극적으로 한글 식별자 사용을 권장하고 그러기 위한 환경이 만들어져야 한다고 이야기한다. 현재는 영어 식별자에 익숙하고, 또 대부분의 환경이 영어 식별자 사용을 권장하지만 저자가 말하는 것 처럼 한글 식별자 사용을 권장하는 환경이 대중적으로 갖춰진다면 한글 식별자를 거리낌 없이 사용할 수 있을 것이다.
'Programming Language > Common' 카테고리의 다른 글
[OOP] 일급 컬렉션(First Class Collection)으로 컬렉션을 다뤄보자 (0) | 2024.04.15 |
---|---|
[OOP] 원시 타입을 Wrapper Class로 포장해보자(Value Object) (0) | 2024.03.18 |
[OOP] Getter와 Setter는 지양하는게 좋다 (14) | 2023.06.07 |
[Kotlin/Java] 개인적인 Enum 활용기 (1) | 2023.02.04 |
오버로딩(Overloading) vs 오버라이딩(Overriding) (0) | 2022.12.13 |
댓글