한글 identifier 를 지원 하는 언어에서 한글로 프로그램 짜기.
By SeukWon Kang
요즘 나오는 언어들은 프로그램 내의 identifier이름으로 unicode 를 지원 하는 경우가 많습니다. http://rosettacode.org/wiki/Unicode_variable_names
애초에 새로 언어를 디자인 하면서 이를 지원하지 않게 디자인 하는게 이상한것이겠지요.
아마 제가 처음으로 한글 변수 명 한글 함수명이 사용 가능한것을 보게 된것은 java 였던 것 같습니다. 뭐 그전에 “씨앗"이라고 하는 한글 프로그래밍 언어도 있었습니다만..
그래서 이제는 unicode를 지원하니 이제는 맘껏 한글 이름 변수명과 함수명 클래스 이름을 사용해도 좋을까 하는것이 주제 입니다.
그 전에 잠시 집고 넘어갈것이 있는데, 회사에서 프로그램을 작성할때 한글 이름 파일명을 사용하는지 궁금합니다. 일단 저는 한글 파일명과 폴더 명을 전혀 사용하지 않는데 이는 사용할 경우에 문제가 생기는 경우를 당했기 때문입니다.
이상하게 작동에 문제가 생겨서 원인을 찾아보면 폴더이름이 한글인게 원인인 경우가 있는 거지요. 한글의 잘못이 아니고 비 영어 이름일때 문제를 일으키는 프로그램의 버그인 경우지만 아무튼 불필요한 문제로 시간을 잡아먹게 되니 이를 예방하기 위해 애초에 한글 파일/폴더 이름을 안쓰게 된겁니다.
그래서 한글 identifier를 쓰기위한 조건을 적어 보겠습니다.
당연한 이야기 지만 개발에 관여하는 모든 사람들의 source code 를 작성하는 환경과 compile/translate 하는 환경, 실행하는 환경의 encoding이 일치 해야 합니다 .. 작성하는 환경이라고 하면 에디터/ide 의 encoding 뿐만이 아니고 version control system 역시 고민 해야 하는데 이는 log history를 보는 것도 필요하고 diff/patch를 보는 것도 필요하기 때문입니다.
conpile/translation환경은 컴파일 하는 기계 ( 당연히 프로그래머 기계일것이라고 생각하지 마시길 , daily build/night bulid도 존재 합니다. ) 그리고 그 컴파일결과를 보게 되는 기계및 사람 도 포함입니다. 실행 결과가 아니고 컴파일러가 내보내는 결과입니다. 이곳에도 프로그램의 identifier 가 표시 되니 encoding이 문제가 됩니다.
실행 하는 환경은 만들어진 프로그램이 사용자에게 전달되어 사용되는 환경도 있지만 그전에 QA/tester같은 지원 조직에서 사용하게 될 환경도 있습니다. 이것도 프로그램이 사용자에게 보여주기 위해 만드는 결과가 아닌 문제상황에서 출력하는 모든 결과물들이 있습니다. 일반적으로는 stack trace 나 error log , test coverage 들이 있겠군요. 지원 조직이 이를 읽고 해석해서 개발 조직으로 전달하게 되니 이역시 고민해야 합니다. ( 즉 이 시점에서 지원 조직의 해외 아웃 소싱가능 성이 없어 집니다. )
이분분에서 해외 진출 가능성은 전혀 없어진다고 생각 하면 될듯 합니다. 프로그램의 결과물은 외국어를 지원 하도록 개발 되었더라도 이런식으로 내부 코드의 일부가 외부로 표출되는 경우는 그냥 괴문자가 표시될테니까요. ( 한글 OS는 커녕 한글폰트가 설치 되어 있을지도 모르는 상황이지요. )
여기 까지가 프로그램이 내보내는 여러 출력에 한글이 들어 가는 경우의 문제 입니다.
이와 별도로 한글을 표시 할수 없는 비상상황에서( 영문 OS 나 , gui 환경이 아닌 상황에서 ) 프로그램 코드나 그 결과물(에러메시지, 로그)을 확인 하는 것이 불가능해진다는 문제도 있습니다.
애초에 unicode의 여러 encoding에서 (+ 비 unicode 한글 encoding) 오는 혼란은 이것과는 또 별도의 문제 입니다. 한글 윈도의 cmd창과 OS의 한글 메시지 리소스는 euckr(cp949) 입니다. 리눅스의 gui terminal 은 대부분 utf8을 사용하지요 . 게다가 최근 windows들의 unicode 셋은 utf-16le를 사용합니다. ( 한글 윈도의 cmd창과 다릅니다. ) 맥은 풀어쓰기 한글 unicode를 사용하더군요. ;;; ( 한글 한자를 3개의 unicode로 구성 - 이것도 유니코드 표준입니다. ) 그나마 이런여러 encoding의문제는 python같으면 # -*- coding: utf-8 -*- 를 사용해서 강제/통일 하고 go 언어 같은 경우는 애초에 언어 spec에 utf-8로 강제하고 있으니 문제가 조금 덜합니다. 그래도 맥의 풀어쓰기 한글은 답이 없을듯 하군요. ( 같은 한글 한글자를 표시하는 두가지 방법이 존재 합니다. 함수 변수 이름으로 사용할때 보기에 같은 두 identifier 가 전혀 다른 것일 가능성이 존재 하지요. )