이유는 개발자들이 주로 다루는 글들은 일반 글과는 달리 한글자 한글자 신중하게 읽거나 쓰여져야 하므로 글자모양으로 인한가독성 저하나 헷갈리는 한두 글자들이 섞여 있는 코드는 개발에 많은 지장을 주며 개발자의 피로감을 높이게 됩니다.
이러한 이유로 개발자들은 의식적이든 의식적이지 않던 간에 코딩시 사용하는 폰트에 신경을 쓰게 되는데 일반적으로 다음과 같은 특징을 갖기를 원합니다.
1. 코드가 가독성이 높도록 글씨체가 깔끔하고 또렷해야 한다.
2. Indent나 Space, Tab 등이 특별한 의미를 갖는 경우가 많기 때문에 글자 폭은 고정되어 있어야 한다.
3. 한 글자라도 틀리면 버그나 기타 문제가 발생할 수 있으므로 글자들끼리는 명확하게 구별되어야 한다.
예로 'l(소문자 L)', 'I(대문자i)', 'i', 'j', '1'의 구별이 쉬워야 하며 'o', 'O', '0'의 구별이 쉬워야 한다.
이 밖에도 DOS나 터미널 개발자들의 경우 선문자들을 사용하기 위해 "확장 문자 세트"를 지원할 것을 원하는 경우도 있으나 요즘의 추세는 아닌 것 같군요.
위의 첫번째 이슈의 해결책으로 많은 분들이 "Clear Type"을 많이들 제시하더군요.
Visual Studio 2005부터는 Clear Type Font를 기본으로 사용하고 있으며
다음의 URL에서 Visual Studio 2005 또는 2008용 Clear Type 폰트팩을 다운 받을 수 있습니다.
위 그림에서 "Tbk"와 "Jil"은 모두 세글자로 구성된 글이지만 두 글이 차지하는 길이가 다릅니다. 이는 글자마다 폭(가로)의 길이가 달라서 생기는 현상입니다. 이런 폰트를 가변길이 폭 폰트라고 합니다.
반면 위 그림은 두 글의 길이가 같습니다. 이는 글자마다 폭(가로)의 길이가 정해져 있어서 나타나는 현상입니다. 이를 고정 길이 폭 폰트라고 합니다.
윈도우즈용 한글폰트인 경우 폰트 이름 뒤에 "체"라는 글자가 붙어 있으면 고정길이 "체"라는 글자가 없으면 가변길이 폰트입니다. (영문폰트는 이름만 가지고는 구별이 안되는듯 합니다.)
자주 사용되는 고정길이 영문 폰트로는 다음과 같은 것들이 있습니다. (참고로 한글의 경우 대부분 폰트가 고정길이 폰트입니다.)
- Bitmap Font: Fixedsys, Terminal, Courier
- True Type Font: MS Gothic, MS Mincho
주의할 것은 가변길이 폭 폰트가 나쁘다는게 아닙니다. 오히려 일반적인 글에서는 가변길이 폭 폰트가 훨씬 예뻐보입니다.
세번째 이슈에 대한 해결책은 윈도우즈에서 기본 제공하는 폰트에서는 이러한 배려가 거의 없습니다.
그나마 'j', '1'에 대한 구별은 어느 정도 가능하지만 대문자i와 소문자 L간의 구별과 'o', 'O', '0'의 구별은 쉽지가 않습니다.
그래서 웹을 좀 뒤져보니 알파벳 문화권의 개발자들의 이야기이지만 개발자용으로 각종 폰트들을 비교분석하여 순위화를 해놓은 곳이 있었습니다.
여기서 1위를 차지한 폰트만을 좀 살펴보도록 하죠.
폰트명은 "Bitstream Vera Sans Mono"이고 폰트의 공식 URL은 http://www.gnome.org/fonts/ 입니다.
GNOME쪽 폰트라서 라이센스 상 사용, 배포, 수정이 모두 가능한 폰트입니다.
다음의 사용예제에서 볼 수 있는 것 처럼 'l'의 위 아래를 약간 구부려서 다른 글자들과 구분하였으며 숫자 '0' 글자의 한 가운데 점을 찍어 숫자임을 쉽게 확인 할 수 있게 하였네요.
지금은 "맑은 고딕"폰트의 라이센스 문제로 폰트의 첨부는 제거되었더군요. 하지만 인터넷을 잘 뒤져보면 쉽게 구할수 있을 것입니다. 주의할 것은 돌아다니는 폰트 중에는 특수 기호 문자 출력에 문제가 있는 폰트가 같이 돌아다닌다는 것입니다.파일 사이즈가 2.34MB(2,457,600 바이트)인 것이 정상 파일입니다.
라이센스가 마음에 걸려서 이 폰트를 사용하시고 싶지 않다면 네이버에서 배포하고 있는 개발자용 폰트인 "나눔고딕 코딩글꼴"을 다운 받아서 사용하세요.
이 역시 한글, 영문 모두 포함되어 있으며 꾸준히 업글도 되고 또한 위에서 이야기한 문제점들을 해결하고 있습니다.
- 나눔고딕 코딩글꼴 http://dev.naver.com/projects/nanumfont
[본문 참조]
Dependency Walker is a free utility that scans any 32-bit or 64-bit
Windows module (exe, dll, ocx, sys, etc.) and builds a hierarchical
tree diagram of all dependent modules. For each module found, it lists
all the functions that are exported by that module, and which of those
functions are actually being called by other modules. Another view
displays the minimum set of required files, along with detailed
information about each file including a full path to the file, base
address, version numbers, machine type, debug information, and more. (생략)
Dependency
Walker 는 해당 프로그램의 각종 모듈 참조를 가르켜 줍니다. 또한 참조한 모듈의 사용하는 함수 이름까지 알 수 있는
유틸로써, 프로그램 배포시에 한 번 쯤은 확인해볼 필요가 있는 유용한 유틸입니다. (프로그래머 입장에서는 오히려 너무 강력한
기능덕에 자신의 프로그램이 쉽게 노출되는 허무함을 맞볼 수 있습니다.) 간혹 사용하는 DLL 을 빼놓고 배포하는 경우가
있다보니, 이러한 유틸로 빠지는 DLL 이 없도록 꼭 확인하는 것이 좋겠습니다.
위의 공식 사이트에서 해당 프로그램을 무료로 다운로드 받을 수 있습니다.
※
추가로 가끔 상용 프로그램이나 배포되는 프로그램에서 디버그용 DLL 파일들을 요구하거나 함께 배포하는 일이 있는데, MS 에서
공식적으로 불허 하고 있다는 사실을 아시고 계셨으면 좋겠습니다. (요새는 조금 나아진 편이지만, 예전에는 제법 비일비재
했습니다.) 주로 MFC 나 DX 관련 프로젝트에 Debug 용으로 배포할 시 많이 발생하는 실수 입니다. 관련 참고 사이트는 http://msdn.microsoft.com/ko-kr/library/8kche8ah(VS.80).aspx 이며, 일반적으로 명칭 뒤에 'd' 가 붙는 파일들이 디버그용 DLL 입니다. 이러한 파일들은 재배포될 수 없으며, 위의 링크에서도 확인이 가능합니다.
쉽게 이야기해서 프로그래밍이 사용한 DLL 정보와 DLL에 들어있는 함수 중 사용한 함수를 보여주는 툴 (오~)
<?xml:namespace
prefix = v ns = "urn:schemas-microsoft-com:vml" /><?xml:namespace
prefix = v /><?xml:namespace prefix = v /><?xml:namespace
prefix = v />
1- 프로그램위치 (VS 2005기준) – 편하게 아래쪽 그림 참고
2- 그럼 실행해보자 ^0^
(1) 연결된 DLL정보를 볼 프로그래밍을 선택하기 위해아래 아이콘을 클릭한다.
(2) 연결된 DLL 정보를 볼 프로그래밍을 선택한다
< 참고로 난 안사람은 안다는 저 흐뭇한 게임의 속을 보려고 한다 *ㅡ_ ㅡ*(개인적취향에 존중을)>
자! 프로그래밍을 선택하고 열기를 누르자!
(3) 나온 화면
잠시 아래 Warning은 무시하자.. 그냥 대충 보니 뭔가 미확인 DLL때문에 빠진 함수가 있다는
말인 것 같다.. 참고로 난 영어 못한다. 그래서 틀린 해석일 수도 있다는 점 밝힌다. ㅡㅡㅋ;
(4) 자 사용된 DLL과 그 DLL에서 사용된 함수를 봐보자!
딱 보니 이 흐뭇한 게임에 사용된 DX9 버전은 9_32 버전이라는 점과 함께 D3DXCreateEffect 사용된것 봐서 쉐이더 HLSL를 사용했다는 것이 보이군요 후후후
(5) 자 그럼 내 프로그래밍에서 사용된DLL는 어디에?
파란색 네모에 있는 아이콘을 누르면 바로 DLL 있는 FullPaths 가 표시 된다.
(6) 기타
* 이외에도 여러 기능들이 있는 것 같으니 직접 한번 해보시길
* 이 Dependency Walker에 아쉬운점은 바로 아까 무시한 워닝을 출력하게 한 것처럼
MS나 공식적인 DLL가 아닌 사용자가 만든 DLL (ex, 게임엔진의 DLL)는 표씨 하지 않는다는 점이다. (어떻게 생각해보면 당연한 것 일수도 있다.)
(7) 끝으로 프로그램을 배포할 때 무슨 DLL이 사용되었고 어떤 DLL를 포함해야 할지 이 프로그램으로 먼저 파악하고