제프리 릭터의 Programming Applications for Microsoft Windows에 담긴 내용입니다.

**주의 사항**
실행 쓰래드는 비선점이라고 가정함. (허나..대부분의 고 정밀도의 실행 시간을 원하는 코드는 수명이 짧도록 작성된다.)

class CStopwatch {
private:
LARGE_INTEGER
m_liPerfFreq;
LARGE_INTEGER m_liPerfStart;
public:
    CStopwatch() {
        QueryPerformanceFrequency(&m_liPerfFreq);
        Start();
    }
    void Start() {
        QueryPerformanceCounter(&m_liPerfStart);
    }
    __int64 Now() const {
        LARGE_INTEGER liPerfNow;
        QueryPerformanceCounter(&liPerfNow);
        return (
            ((liPerfNow.QuadPart - m_liPerfStart.QuadPart)
            * 1000) / m_liPerfFreq.QuadPart);
    }
};

**사용법**

//스탑워치 타이머를 생성한다.(기본값으로 현재 시간이 맞추어짐)
CStopwatch  stopwatch;

/////////////////////////
//시간 잴 코드는 이곳에
/////////////////////////

//현재까지 얼마만큼의 시간이 흘렀는지를 얻는다.
//qwElapsedTime은 코드가 실행에 소비한 시간. 단위는 milliseconds.
__int64 qwElapsedTime = stopwatch.Now();

Posted by 어쨌건간에
세상에 내 이름을 걸고 내는 첫 번째 작품.

사용자 삽입 이미지

C 기초 플러스 개정 4판
(강컴 링크)

당연히, 아니..그리 당연스러울 것도 없지만, 이 글은 모종의 광고성이 담겨있다고 이 글을 읽으시는 여러분은 감안하셔야겠습니다.

6개월에 걸쳐 딴짓거리 안하고 요것에만 매달려 일구어낸 책입니다. 물론 완전한 '나의' 책이 아닌, 번역에 불과하지만, 그 누가 그랬던가요? "번역은 제 2의 창작이다"라는 말도 있잖습니까! 그 말 만큼이나 "내 것이다."고 생각하며 저의 열정을 담은 책입니다.

번역을 맡기 전까지 수도없이 잘못된 번역물에 대해 성토를 보고, 듣고, 또한 그 성토를 토해냈던 저였던지라..상당한 긴장..아니 두려움..겁먹음 안에서 작업이 이뤄졌습니다. 하지만, 끝내고 난 이후, 검토를 하면서 나름대로의 자신감을 갖고 내놓을 수 있었습니다. 하지만, 그 업된 자신감은 오로지 주관적인 상태에서만 이루어진 것이라, 객관적인 상태가 되었을 때는 우짜 변화될런지는 알 수 없죠. 그 자신감이 계속되길 바랄 뿐입니다.

원 제목은 C Primer Plus이고, 저자는 Stephen Prata입니다. 이미 유명해질대로 유명해진 책이죠. 성안당에서 3판이 이전에 나왔으며, 이 4판도 피어슨 에듀케이션 코리아에서 다른 분의 번역을 통해 2002년에 나왔었죠. 저의 책은 4판의 개정판입니다.

옮긴이 서문

본 역자가 처음 컴퓨터를 다뤘던 때는 SPC, APPLE, MSX등의 8비트 컴퓨터가 (적어도 개인용 컴퓨터 시장에서는) 주로 사용될 무렵입니다. 어린 나이에 프로그래밍을 한답시고 BASIC을 한창 컴퓨터 학원에서 배울 당시, 어느새 고급반 쪽에서는 16비트 컴퓨터에 DOS를 가르친다는 말과 동시에, 코볼, 알골, 그리고 C라는 것도 함께 가르친다는 광고를 본 기억이 있는데, 이 때에는 이들 용어가 운영체제와 컴퓨터 언어를 나타낸다는 사실조차 몰랐었습니다. 그 뒤 세월이 흘러 직업으로 프로그래밍을 하게 된 지금은 DOS조차 그 외의 것들과 함께 잊혀져가는 존재가 되고 있지만, 그 당시 처음 대면했던 C는 저의 주변을 수시로 맴돌며 항시 마주치고 살아야할 무엇이 되고 있습니다.

전설적인 C?

탄 생한지가 30년이 넘으며 이미 C를 대체할 더 상위 수준의 언어들이 나온 지 한참이나 지났음에도 불구하고, C를 대하는 상당수 프로그래머들의 자세는 여전히 심상치가 않습니다. 저 개인적으로는 C가 ‘현존하는 전설’처럼 느껴지기까지 합니다. C를 할줄 모른다고 하면, 진정한 프로그래머가 아닌 양 무시당하는 느낌을 받는 것은 예사이고, 더 나아가 (C 보다) 상위 수준 언어의 강력함을 충분히 맛본 프로그래머마저도 C를 좋아하다 못해 “사랑한다.”라고 표현하며, 이것저것 따질 것 없이 “C가 무조건 최고다.”라고 막무가내로 찬양하는 프로그래머마저 있을 지경이니까요.

사실 이러한 반응을 맞닥뜨릴 만도 한 것이, 위와 같은 감정적 호불호를 재껴두고라도 C 언어는 프로그래머로서 조금이라도 깊게 파고들어가기 시작하면, 반드시 알아야하기 때문입니다. 현재 주류를 이루고 있는 운영체제인 MS 윈도우와 (리눅스를 포함한) 유닉스 모두 그 기반을 C 언어에 두고 있으므로, 이들 운영체제 위에서 동작할 프로그램을 작성하는 모든 개발자는 C 언어를 바탕으로 만들어진 API(Application Programming Interface)를 필연적으로 사용할 수밖에 없으며, 이 언어에 담긴 프로그래밍 스타일을 따르지는 않더라도, 적어도 ‘숙지’정도는 반드시 해두어야 하는 것이 현 프로그래밍 계의 실정입니다.
이러 한 C 언어의 현실적 중요성 이외에, C는 현재 가장 각광받고 있는 언어인 C++, C#, JAVA가 모두 이 C 언어를 기본으로 하여 만들어졌다는 사실만으로도 이 언어를 알아야 될 필요성은 더 이상 설명이 필요 없을 듯싶습니다.

C 기초 플러스

이 책 C 기초 플러스는 C 언어에 대한 최고의 자습서라고 격찬 받는 서적 중 하나입니다. 기초 플러스 시리즈 자체가 자습서로서 유명하기도 하거니와, 그 중에도 가장 대표적이라고 할 수 있는 이 책은, 1984년 초판 발행을 시작으로 무려 20여년에 걸쳐 수차례의 개정과 함께 C 언어에 대한 최고의 자습서로 인정받아 왔으며, the C Programming Language(K&R C)와 더불어 C 언어를 대표하는 서적으로 백과사전에 오르기까지 하였습니다.

이 책은 C 언어에 전반적으로 펼쳐있는 여러 주요 개념을 명확하게 정의하고 있으며, 기초 플러스 시리즈 특유의 스타일로 정착되기도 한 꼼꼼하고도 이해하기 쉬운 설명과 그 설명 뒤에 바로 이어지는 수많은 예제로 인해, 독자로 하여금 친절하고도 유머러스하면서도 때론 포근함마저 느끼게 만들기도 합니다.

헌데...............................

이 렇게 한껏 C와 이 책에 대하여 자랑을 늘어놓다보니, 갑자기 제가 무슨 ‘돌팔이 약장수’가 되어 버린 듯한 기분입니다. (하지만, 요만한 글이 나오기까지 무려 한달이 지나가는 것을 보면, 돌팔이 약장수가 되는 것도 만만찮은 일인 듯싶습니다.) 그러므로, 이 책이 저로 인하여 ‘돌팔이가 파는 약’이 되지 않기 위해서라도 단점을 잠시 설명해야겠습니다.

때로는 세심한 배려가 상대에게는 오히려 ‘피곤함, 거추장스러움’으로 다가올 경우가 있습니다. 바로 이 책이 그렇습니다. 저자 프라타만의 독특한 친절함으로 인하여, 이 책은 본 역서 기준으로 무려 1000여 쪽에 이르는 거대한 책이 되었습니다. 이렇게 거대한 책은 그 내용 좋고 나쁨에 상관없이 거부감부터 주기 쉽습니다. 일단 무겁기 때문에 들고 다니면서 보기가 힘듭니다. 또한, 한참을 보고나서도 여전히 제자리에 머물러있는 듯한 기분, 즉 진도가 나갔다는 일종의 포만감을 얻기 힘들기도 합니다. 물론 힘들게 한 권을 다 땐 후의 그 만족감은 거대할수록 더하겠지만, (역자 본인처럼) 진드막한 성격을 갖지 못한 사람에게는 중도에 포기하기가 십상입니다. (사실, 제가 이 책 전체를 번역했다는 것 자체가 저에게는 좀처럼 일어나기 힘든 ‘기적’에 가깝습니다.)

그러나 이러한 단점에도 불구하고 독자 여러분, 특히 프로그래밍, C 언어를 처음 배우려고 하는 초보자에게는 알고자 하는 부분에 대한 ‘진지한’ 자세만 갖춘다면 여전히 최고의 선택이 되리라 믿습니다.
저 는 이런 프로그래밍 초보자가 있을 것이라 예상해봅니다. 어떤 책을 보다가 중간에 (어떤 이유로던 간에) 그만두고, 다른 책을 집어 들어 보다가 또다시 그만두고, 또다시 다른 책을...... 그러다가 결국에는 그 알고자 하는 부분에 대해 겉만 핥고 중도 포기한 사람들 말입니다. 사실 이 정도만 되도 다행입니다. 자신의 앎이 적어도 ‘부족하다’라는 것만은 알고 있으므로 나중을 기약할 수 있기 때문입니다. 하지만 더욱 심각한 사람은 ‘산 책’만 많아졌음에도 불구하고 자신은 “이제 나도 알만큼 알았어.”라고 생각하는 사람입니다. (사실 이 모델은 저 자신을 두고 그려본 것이었습니다. 하지만, 그 ‘저’와 같은 사람도 만만찮게 많더군요.)
혹시라도 이 같은 부류에 자신이 속해있다고 판단되는 독자분이 계시다면, 적어도 이 책만큼은 ‘먼저’ 맛 본 선배로서 감히 한마디 드리고 싶습니다.

“크게 한숨을 돌린 다음, 끝까지 파보세요! 마지막 장까지 아무생각하지 말고 그냥 내지르는 것입니다!”

자신하건데 이 같은, 어찌 보면 일종의 ‘모험’을 걸어볼만한 충분한 가치가 있는 책이 바로 이 C 기초 플러스입니다. 그 이후에 이 책은 ‘끝마치고 났을 때의 성취감’ 이상의 자습서만으로는 좀처럼 얻기 힘든 C에 대한 상당한 통찰력을 얻게 되리라 확신합니다.

그 외, 초보자가 아닌 분들에게도, C의 새로운 표준 C99를 설명한 책은 거의 전무하다싶은 현 실정과 주요 C 라이브러리에 대한 요점 정리, 부록에 이어지는 C 언어와 그 주변 배경에 대한 레퍼런스적 설명 등으로 인해 오랜 시간 함께할 수 있는 책이 되리라 예상합니다.

용어에 대해서

번역 작업을 하면서 가장 신경을 많이 쓰게 되는 부분은 역시 용어 선택입니다. 이미 시중에는 많은 용어 사전이 나와 있으며, ‘표준’이라는 딱지가 붙은 용어도 상당수가 있지만, 여전히 상당수의 용어는 일률적으로 합의가 이루어지지 않은 상태에서 여러 형태로 쓰이고 있습니다. 대표적인 예로, ‘statement’는 ‘문, 문장’으로 번역됨으로서 표준에서조차 하나의 단어로 쓰이지 않고 있으며, 상당수의 서적에서는 ‘구문’으로 지칭함과 동시에 많은 사람들이 이 용어로 사용하고 있습니다. 여기에 한층 더욱이 혼란스럽게 만드는 것은 ‘syntax’을 지칭하는 표준 한글 용어가 ‘구문’이라는 사실입니다.

이 책에서는 한국정보통신기술협회의 ‘정보통신용어사전’, ‘두산 엔사이버 정보통신용어사전’, Whatis.com의 한국어 사이트인 ‘텀즈’, 대한 수학회의 ‘수학 용어집’을 기초로 하여, 가장 보편적으로 쓰이는 용어를 선정하였습니다. 또한 주요 어휘는 반드시 옆에 원어를 병기하는 원칙을 적용하여, 한글 어휘가 원어로는 무엇을 뜻하는지를 명확히 하였습니다.

오역, 탈역 등과 그 외의 것들

적지 않은 시간 프로그래밍 계에 몸담고 있다보면, 잘못 번역된 사례를 다수 접하게 됩니다. 실제로 저는 근래에 와서야 나 자신의 이해도가 부족해서가 아닌, 오역으로 인하여 이해 못했던 경우가 적지 않았음을 알게 되었습니다. 가끔가다가는 번역서를 아예 사보지 않는 프로그래머를 보기도 합니다. 물론 그 잘못된 번역물에 대한 성토는 수시로 보고 듣고 있습니다.
이러한 상황을 잘 알고 몸으로 느끼기까지 한 이 마당에, 또한, 위에서 자신만만하게 이 책을 추천하기까지 한 저의 행동에 비추어볼 때에, 저의 번역이 어떠했는가를 평가받는 것에 대해 설레기도 하고, 한편으로는 두렵기도 합니다. 물론 저 자신은 “이만하면 되었다.”라는 결론에 도달해서 이 책을 내어놓지만, 그 객관적인 평가는 여전히 독자 여러분에게 달려 있습니다.

독자 여러분의 어떠한 평가라도 좋습니다. 비판적 평가는 ‘이 책과 저를 위한 건설적 비판’이라는 생각을 갖고 더욱 매진해나갈 것입니다. 나름대로 꼼꼼하게 오자, 오역, 탈역 등을 점검했지만, ‘완전’하다고는 감히 말씀드릴 수가 없습니다. 언제든지 지적해주시기 바랍니다. 독자 여러분의 피드백을 통한 더욱더 완전한 책으로 거듭나게 될 것입니다. (아래에 저의 메일 주소가 있습니다.)

감사의 말.

오 랜 시간, 메시지를 전달하는 쪽이 아닌 메시지를 받아보기만 하는 입장에 서있기만 했던 저로서는 이러한 감사의 말을 보면 단순히 ‘관용적인’ 문구로만 보였었습니다. 좀더 솔직하게 말하자면 일종의 ‘인맥관리 차원의 멘트’라는 냉소적 시각으로만 보아왔던 것도 사실입니다. 하지만, 이 글을 쓰는 시점을 기준으로 감사의 마음을 전하지 않고서는 작업을 마칠 수 없다는 깨달음을 얻음과 동시에 감사를 드리고 싶은 욕구가 넘칩니다.

본 역서를 무사히 마치기까지 많은 도움을 주셨던 많은 분이 계십니다.

가 장 먼저, 감사드려야할 분은 저의 부모님이십니다. 물론 이 책에 관계되지 않은 부분만으로도 그 은혜는 단지 말로써 표현할 수 없지만, 번역기간 내내 작업으로 인해 파생되는 생활사적 부정적 부수물을 모두 감내해주셨습니다. 아직까지는 철없고도 불효한 자식임을 아주 잘 알고 있습니다. 부모님, 조금만 더 참아주세요!

그 다음, 지선이형. 형이 작년에 Petzold의 Programming Microsoft Windows with Microsoft Visual Basic .NET을 번역하면서 보여주었던 자신의 ‘작품’에 대한 열정은 저의 귀감이 되었습니다. 또한 제가 이 번역을 할 수 있었던 결정적 계기를 마련해주었습니다. 형이 지금까지 보여준 행보는 제겐 일종의 놀라움입니다. 그 ‘놀라움’이 지속되길 바랍니다.

최성원 피어슨 에듀케이션 편집자님. 이 책을 번역하는 영광을 맛보도록 저를 선택하시고, 번역 내내 저와 함께 고생하신 분입니다. 작업 내내 수많았던 어려움과 서로간의 문제에도 불구하고 감사드리지 않을 수 없습니다. 용어 선택 등 여러 면에서 편집자님이 아닌 다른 분이었다면, 제가 한껏 믿고 기대며 조언을 구하지 못하였을 것입니다.

그리고, 익천이형과 순영이형을 비롯한 KNUG(한국 .NET 사용자 그룹) 식구 여러분. 번역 초기에 절실했던 피드백을 날카로운 지적과 함께 남겨주심으로써 이 역서가 한층 더 정확하고 매끄러운 번역물이 될 수 있었습니다.

그 외에도 후반 작업을 도와주셨던 피어슨의 이송준님을 비롯한 이 책에 관계된 많은 분들, 또한 번역으로 인해 만나기 힘들었던 여러 친구, 선배, 후배 여러분, 언제나 마음 한편에 그리움으로 남아있는 수서 성당 셀라 멤버들……. 정말 그립습니다. 마지막으로 천지신명에게 감사드리면서 이만 장황하고도, 어찌 보면 너무나도 “뻔”해보일지도 모르는 서문을 마칠까 합니다.

아, 이제야 작업을 완전히 마치게 되는군요. 이 홀가분함, 얼마만인지 모르겠습니다.

우하하하~~~~~ 만세!!!

2004년 8월 마지막 날에, 박현정(jeoffy@empal.com)

Posted by 어쨌건간에