StringTools.Hanja2Hangul 컴포넌트

등록일시: 2002-03-15 이전,  수정일시: 2018-04-07 12:12
조회수: 13,137
본문은 최초 작성 이후, 약 22년 이상 지난 문서입니다. 일부 내용은 최근의 현실과 맞지 않거나 동떨어져 있을 수 있으며 문서 내용에 오류가 존재할 수도 있습니다. 또한 본문을 작성하던 당시 필자의 의견과 현재의 의견에 많은 차이가 존재할 수도 있습니다. 이 점, 참고하시기 바랍니다.

본문에서 살펴볼 StringTools.Hanja2Hangul 컴포넌트(이하 Hanja2Hangul 컴포넌트)는 인자를 통해서 넘겨 받은 문자열 내부에 존재하는 모든 한자를 찾아서 한글로 변환하고 지정한 옵션에 따라 다양한 형식으로 그 결과를 리턴해주는 COM 컴포넌트다.

본래 Hanja2Hangul 컴포넌트는 비혼님이 PHP로 제작한 『한자를 한글로』 모듈을 비혼님께 허락을 구하고 Microsoft Visual Basic 6.0을 사용해서 COM 컴포넌트로 변환한 것임을 미리 밝혀둔다. 따라서, Hanja2Hangul 컴포넌트에 대한 기본 구성과 그 아이디어에 자체에 대한 권리는 기본적으로 비혼님께 있으며, 필자는 단지 변환된 COM 컴포넌트의 DLL 파일 자체와 Microsoft Visual Basic 6.0으로 작성된 소스 파일에 대한 권한만 갖고 있다. 『한자를 한글로』의 PHP 버전에 관심을 갖고 계신 분들은 비혼님의 홈페이지를 방문해보기 바란다.

다음 링크들은 Microsoft Visual Basic 6.0 SP5로 작성한 Hanja2Hangul 컴포넌트의 소스 코드와 설치 파일, 그리고 ASP 프로그래밍에 사용하기 위한 Include 파일이다. 비록, ASP 프로그래밍용 Include 파일을 제공하기는 하지만 Hanja2Hangul 컴포넌트와 ASP용 Include 파일은 코드의 내용이나 기능상 거의 차이가 없으므로 편의상 이 글에서 모든 설명은 Hanja2Hangul 컴포넌트를 기준으로 하겠다.

Hanja2Hangul_Src.zip (14.2k)
Hanja2Hangul_Setup.zip (1,433k)
Hanja2Hangul_ASP.zip (3.61k)

Hanja2Hangul 컴포넌트는 컴포넌트 자체와 동일한 이름을 가진 Hanja2Hangul()이라는 단 한 개의 메서드만 갖고 있으며 그 사용법 또한 매우 간단하다. Hanja2Hangul() 메서드는 다음과 같은 시그니처(Signature)를 갖고 있다.

Object.Hanja2Hangul(sHanja [, sOption [, fStart [, fEnd [, bStart [, bEnd ] ] ] ] ])

이 코드에서 Object 객체는 Microsoft Visual Basic 6.0이나 ASP 등으로 작성된 프로그램 코드에서 New 연산자나 CreateObject() 함수 또는 Server.CreateObject() 메서드로 생성한 Hanja2Hangul 컴포넌트의 인스턴스로, ASP에서 Hanja2Hangul.asp 파일을 Include해서 사용하는 경우에는 필요 없는 부분이다.

첫 번째 인자인 sHanja 인자는 필수 인자로 변환할 한자가 포함된 문자열이다. 두 번째 인자인 sOption 인자는 변환된 결과가 출력될 때 적용할 출력 형식을 결정하는 문자열 형식의 인자로, 그 설정값에 따라 몇 가지 종류의 형식으로 출력 내용을 제어할 수 있다. sOption 인자에 지정 가능한 값은 k, c, kc, 그리고 ck 이렇게 모두 네 가지인데, 부언하자면 여기서 k는 Korean, 즉 한글의 약자이고 c는 Chinese, 즉 한자의 약자이다.

이 값들의 구체적인 의미는 각각 다음의 표와 같다.

k (Default) sHanja 인자에 설정된 문자열 내의 모든 한자를 한글로 변환한다.
c sHanja 인자에 설정된 문자열 내의 모든 한자를 한자로 변환한다.
kc sHanja 인자에 설정된 문자열 내의 모든 한자를 한글+한자 조합으로 변환한다.
ck sHanja 인자에 설정된 문자열 내의 모든 한자를 한자+한글 조합으로 변환한다.

나머지 네 개의 인자, 즉 fStart 인자와 fEnd 인자, 그리고 bStart 인자와 bEnd 인자는 각각 한 쌍씩을 이루는 문자열 형식의 인자로, 이 인자들의 값에 각종 HTML 태그나 괄호 등등을 지정하여 sOption 인자와 조합하여 사용함으로서 보다 다채로운 형식으로 결과를 출력할 수 있다. 즉, fStart 인자와 fEnd 인자쌍은 변환된 한자+한글 또는 한글+한자 조합에서 앞쪽에 위치한 언어의 단어를 앞뒤로 감싸고, 이와 반대로 bStart 인자와 bEnd 인자쌍은 변환된 한자+한글 또는 한글+한자 조합에서 뒤쪽에 위치한 언어의 단어를 앞뒤로 감싼다.

조금 더 명확한 이해를 위해서 간단한 ASP 예제 코드를 살펴보기로 한다. 이 코드에서 인자에 색깔로 강조를 한 것은 단지 쉽게 알아볼 수 있도록 하기 위한 것으로 코드 내용 그 자체와는 상관없으니 착오 없기 바란다.

<%

    Dim COMObj
    Dim HanjaStr

    
    '** 한자→한글 변환을 하기 위한 대상 문자열
    HanjaStr = "東海물과 白頭山이 마르고 닳도록"

            
    Set COMObj = Server.CreateObject("StringTools.Hanja2Hangul")
    
    '** Case ①
    Response.Write COMObj.Hanja2Hangul(CStr(HanjaStr), "kc", "", "", "(", ")")
    Response.Write "<br>"
    
    '** Case ②
    Response.Write COMObj.Hanja2Hangul(CStr(HanjaStr), "k", "", "", "", "")
    Response.Write "<br>"
    
    '** Case ③
    Response.Write COMObj.Hanja2Hangul(CStr(HanjaStr), "ck", _
                          "<u>", "</u>", "<span style=""color:#00F;"">(", ")</span>")
    Response.Write "<br>"
    
    '** Case ④
    Response.Write COMObj.Hanja2Hangul(CStr(HanjaStr), "k", _
                          "<span style=""color:#00F;"">", "</span>", "", "")
    Response.Write "<br>"
    
    Set COMObj = Nothing

%>

이 코드에 따른 Case ①에서 Case ④까지 각각의 출력 결과는 다음의 표와 같다. Hanja2Hangul() 메서드의 인자값 변화에 따른 출력의 변화를 주의해서 보기 바란다.

Case ① 동해(東海)물과 백두산(白頭山)이 마르고 닳도록
Case ② 동해물과 백두산이 마르고 닳도록
Case ③ 東海(동해)물과 白頭山(백두산)이 마르고 닳도록
Case ④ 동해물과 백두산이 마르고 닳도록

이처럼 Hanja2Hangul() 메서드의 인자값을 응용하기에 따라 매우 다양한 형식으로 출력이 가능하다.

개인적으로 비혼님의 이 『한자를 한글로』의 아이디어는 매우 멋진 것이라고 생각한다. 한 가지 아쉬운 점은 비혼님도 얘기했지만, '不' 자 같이 상황에 따라 발음이 변하는 한자에 대한 처리를 전혀 하지 못했다는 것인데, 이 문제점은 필자도 해결해보려고 노력해봤으나 워낙 한자에 대한 지식이 부족한 관계로 결국 포기하고 말았다. 혹시 이 문제점에 대한 아이디어를 갖고 계신 분이 계시다면 필자에게 연락주시면 감사하겠다.