무엇부터 공부해야 할지 모르겠슴당...

익명 사용자의 이미지

훔..시스템 프로그래머가 되구 싶습니다..
임베디드 프로그래밍에 관심이 많은데..(물론 꿈만 꾸고 있슴당..)
지금은 전산에 입문하는 단계입니다..
기본적인 언어만 알구 있슴당..저희 과에서..다루는 내용이..
웹에 대한 내용이 위주이다 보니..무엇무엇을 공부해야 될지 모르겠습니다..
컴퓨터 과학자가 되고 싶다는 말임당..
지금까지 제가 생각한건..어셈블리어..컴퓨터 구조..
운영체제 ...컴파일러..오타마타(이건 먼지도 모름당..울과에서 안갈켜줌..빌
어먹을 학부가 과를 쓸데 없이 갈라나서..) 대학원 가면..컴퓨터 과학 전반에
걸쳐 자세히 배우는거 같긴 한데..쩝..ㅡ,ㅡ
훔냐..맨날 개론적이고 개념적이라..실슴당..갈치는것들이..
실제..플밍 하면서 배우는 서적들도 드물구..
찾아도..품절이라구 나오구..
암튼 컴퓨터 과학 분야로 진출하고 싶슴당..어떤 것들을 공부해야 하는지..갈
케 주세염..
권장서적도 추천해 주심 고맙구여..

익명 사용자의 이미지

음... 저두 시스템 프로그래머가 되려고 노력중인 사람중에 하나입니다.
지금 모대학 컴퓨터공학과 3학년이고요.
우선 저희 대학 커리큘럼을 중심으로 말씀드리겠습니다.
제 생각에는 우선 공부하셔야 할 과목이 컴퓨터구조,OS정도는 기본적으로
뭔가를 질문받으면 1~2초내에 대답이 튀어나올 정도로 공부를 많이 하셔야
할겁니다.
그담에 C언어는 기본이고요. C++과 어셈블리어는 옵션입니다.
(어셈블리어는 하드웨어 속도의 발전으로 점점 사장되어가는 추세입니다.
지금은 워낙 하드웨어가 복잡해서 어셈블리어 하나로 프로그래밍하는데는
한계가 있다고 생각됩니다. 전 C와 어셈블리어의 혼합을 추천합니다.)
그리고, 오토마타는 컴파일러에서 나오는 개념입니다. 물론 당장은 알 필요는
없지만, 알아두면 도움이 될것입니다.
그리고 디지탈 로직도 잘 하시면 도움이 많이 될겁니다.
책은 저도 잘 알지 못하여 답변을 제대로 못 드리겠습니다.
OS는 Operating System Concepts라는 책이 개념 잡기는 좋다고 생각됩니다만,
사람에 따라서 느끼기에 좀 어려울수도 있습니다.
컴퓨터 구조는 전 모리스 마노가 지은 '컴퓨터 시스템 구조'라는 책으로 공부
했는데... 무난한 선택이라고 생각됩니다.

익명 사용자의 이미지

^^ 제가 권하고 싶은건...

시스템 프로그래머가 되려면... 우선 하드웨어에 대해 알아야 겠져?

제가 컴퓨터 구조학도 매우 중요하지만... 우선 마이크로 컴퓨터 혹은

마이크로 프로세서책과, OS책을 많이 보는게... 중요할듯 싶네요.

요즘 대다수 콘트롤로에는 RTOS를 많이 사용하니까 RTOS도 많이 공부해두시는
게... 좋을듯 합니다.

시스템 프로그래머라면 기본적인 하드웨어와 동작 흐름은 기본으로 알고
있어야 하므로 위책들을 권한것입니다.
마이크로 컴퓨터책에는 실제 Z80 CPU를 토대로 주변 하드웨어까지 많이 다루
고 있거든여... 뭐 시간나면 8051과 같은 원칩 프로그램도 좀 도움이 될듯...

그냥 떠들어본겁니다.
참 시스템 프로그램에서 C,C++은 기본인거 아시져?

익명 사용자의 이미지

데브피아
http//www.devpia.com/forum/search_read.asp?sid=-1&search=공부
&wtype=&Bigtype=&stype=&ref=2631&no=2631&id=iamsskim&page=1&radio=1&depth
=0&step=0&forumname=vc_Lec
글입니다.

안녕하세요.

제목과 같이 초보분들을 위해서 가이드를 작성했습니다. 기실 강좌도 많고 책
도 많은 상황에서 왜 이런 글
을 쓰냐라고 하실 분들이 계실 겁니다. 저도 동감입니다만 처음 시작하시는 분
들께는 강좌와 함께 가이드
도 있으면 좋다고 생각합니다. 저도 그랬구요. 그래서 부족하나마 가이드를 써
보려고 합니다. 초보분들에
게 도움이 되면 좋겠군요.

들어가기 전에 우선 말씀드릴 것은 이 글이 강좌가 아니라는 점입니다. 어디
까지나 가이드. 따라서 제가
소개한 방식에는 개인적인 생각이 많으므로(그렇다고 엉뚱한 것은 아닙니다
만...) 불만있는 분들이 아주 매
우 많을 수 있을 것 같습니다. ^^; 초보자들을 호도할 수 있다느니, 너무 개인
적이 아니냐느니 등등... 그
래서 미리 말씀드리지만 모두 옳은 말씀들일 겁니다. 그런 의견들은 댓글로 가
차없는 비평과 함께 올려주시
면 초보분들께 더 도움이 될 것 같네요.

(미리 밝히지만 이 글에는 자유게시판에 올렸던 것을 조금 첨가했고, 다른 분
들이 올린 글도 조금 참고했습
니다.)

****************************************************************
****************************************************************

초보자들을 위한 공부 가이드 (1) C 언어

****************************************************************
****************************************************************

0. 소개

C 언어의 중요성에 대해서는 별로 언급할 것이 없겠습니다. 이 글을 읽으시
는 분은 이미 그 중요성을 인식한 분일테니까요. 인터넷 검색 엔진에 "the c
programming language"라고 쳐 넣을 후 결과를 보면 C 언어가 왜 중요한가에
대한 글이 끝없이 나옵니다. 덤으로 C 언어 강좌도 꽤 많은 것들이 있으니 한
번 대충 훑어 보시는 것도 도움이 될 것 같네요.

어쨌거나 요즘같이 C++, C#, JAVA, Delphi(Pascal), Visual Basic... 등등의
언어가 난무하는 시대에도 여전히 C 언어는 반드시 알아두어야 할 기본 언어입
니다. 게다가 기초 문법만 따질 경우 일단 옛날의 베이직을 제외하면 가장 배
우기 쉬운(제 생각에) 언어죠. 처음 프로그래머가 되기 위해 결심을 하신 분이
라면 다른 언어를 배운다 하더라도 시간을 내어서 꼭 익혀두셔야만 하는 언어
입니다.

****************************************************************

1. 좋은 책들

1) The C Programming Language, Second Edition
Brian W.Kernighan ,Dennis M.Ritchie
Prentice Hall, 1988
2) C Primer Plus (The Waite Group's), Third Edition
Stephen Prata
Sams Publishing, 1998
3) Teach Yourself C in 21 Days, Fourth Edition
Peter Aitken and Bradley L. Jones
Sams Publishing, 1998
4) Turbo C 정복
가남사

C를 처음 하시는 분이라면 2), 3)를 권합니다. 번역본도 있으니 그것으로 공
부하셔도 전혀 문제 없습니다. 그 외에 다른 분들, 그러니까 한 번이라도 C를
접해본 적이 있는 분들(이미 아무 교재나 한 권 정도는 가지고 있으신 분들)께
는 1)을 권하겠습니다. 모든 프로그래머들이 권하는 가장 좋은 책입니다. 1)
의 경우에는 번역본을 추천하고 싶지 않습니다. 원래 원서 자체가 영어권 사람
들 특유의 문체이면서도 어렵게 작성되어있고 번역본은 그것을 한국적 문체로
살리지 못했기에 읽는 것이 그야말로 고역입니다.

4)의 경우에는 조금 첨언을 해야겠습니다. 이 책은 그야말로 방대한 내용을
담고 있습니다. Visual Studio의 MSDN에 해당한다고나 할까요. 하지만 Turbo C
의 깊은 내용을 알아야 하는 경우가 아니라면 굳이 이 책을 사용하실 필요는
없을 것 같습니다. 이 책을 필요로 하시는 분들은 하드웨어를 직접 설계하시
는 분들일 것입니다. 예를 들어서 공장 자동화 로봇의 로봇팔을 제어하는 프로
그램을 코딩하여 그 하드웨어에 이식시키기를 원하는 분들, 혹은 Turbo C에서
제공하는 여러 CPU를 위한 크로스 컴파일러들에 대한 정보를 얻기를 원하는 분
들에게는 Turbo C에 대한 정보가 필요하실 경우가 있을 겁니다. 그런 분들이
아니라면 이 책을 권하지 않겠습니다. 90년대 초라면 강력 추천 서적이었겠지
만요... 어쨌거나 이것과 관련된 정보는 다른 전문가들을 통해서 얻으시는 것
이 더 나을 것 같기에 이만 줄이겠습니다.

****************************************************************

2. 공부하는 방법에 대한 첫 조언

자유게시판을 검색해 보시면 많은 고수분들의 공부법이 나와있습니다. 자신
의 과거 경험이라든지 하는 것들도 함께요. 그것들을 살펴보면 한 가지 공통점
이 있습니다. 바로,

"실습"

입니다. 모든 학문이 그렇지만 자신이 직접 문제를 해결해보지 않는다면 아무
런 발전이 없습니다. 프로그래밍 분야도 그것이 매우 심한데 범람하는 문법들
과 주변지식들을 모두 외우는 것이 불가능한 이상 한 번이라도 실습을 해 보아
야 시간이 지난 후에 다시 보았을 때 기억이 납니다. 혹은 다른 글을 읽을 때
연관을 지을 수도 있구요. 물론 책을 통독한 후에 실습을 하겠다 하시는 것도
좋습니다. 그런 것은 개인 취향이니까요. 단지 제가 드리고 싶은 말씀은 "실습
을 통해 사용해 보기 전까지는 그 부분을 안다고 생각하지 말라"라는 것입니
다. 여러 챕터의 내용을 뭉뚱그려서 하나의 프로그램을 작성하는 방식을 취하
든, 각각의 작은 절에 나오는 사소한 예제들을 작성해 보든 그런 것은 알아서
취향에 맞게 하시기 바랍니다.

****************************************************************

3. C 언어의 전체적인 구성

Data Types and Dealing with Data
Operators, Expressions, and Statements
Control Flow Looping, Branching and Jumps
Fuctions
Arrays and Pointers
Structures
Input and Output
File Input/Output

인터넷 강좌를 참조하여 나누어 본 분야들입니다. 당연한 얘기지만 C 책들의
차례를 보면 위의 내용들은 꼭 들어가 있습니다. 사실 위의 내용이 C를 구성하
는 가장 중요한 문법들입니다. 책을 공부하시면서 자신이 어떤 부분을 공부하
고 있는지 꼭 체크하면서 공부하십시오. 전체적인 흐름 속에서 공부하셔야 합
니다. 물론 C가 완전히 처음이시라면 아무 생각없이 일단 책을 한 번 통독하
는 것도 좋은 방법입니다. ^^

****************************************************************

4. 각각의 요소를 공부하며 주의해야 하는 사항들

Data types
데이터 타입을 공부하시면서 꼭 생각해야 하는 것은 하드웨어의 메모리 혹은
레지스터 상에 저장되는 실제 모습입니다. 많은 데이터 타입들이 있지만 어쨌
거나 그것들은 모두 0 아니면 1 로 된 것일 뿐입니다. 컴파일러가 컴파일 할
때 체크를 해 줄 따름이죠. 그러니 데이터의 실제 모습이 무엇인지 손으로(즉
2진 숫자로) 쓰실 수 있다면 데이터 간의 변환을 이해하는 데에 도움이 됩니
다.
아주 개인적인 의견이지만 데이터의 타입이나 size 그 자체에는 큰 신경을 쓰
지 않으셔도 될 것 같습니다. 대부분의 경우 자신이 자주 쓰는 타입이 있게 마
련이고 컴파일러마다, CPU의 종류마다 모두 변하는 속성이기 때문이죠.

Operators, Expressions and Statements
Control Flow
Functions
그다지 어렵지 않습니다. 어떤 책을 보시든 그 책에서 언급하는 것을 잘 이해
하시기 바랍니다. 사실 이 부분들은 긴 설명이 필요하지 않은데 일부 책들은
쓸데없이 내용을 불려서 설명하고 있습니다. 핵심적인 것들만 파악하고 넘어가
셔도 크게 문제될 것은 없습니다. 단, 이 내용들이 비록 쉽기는 하여도 익숙해
지는 데에는 연습과 시간이 필요하다는 것을 유의해 주시기 바랍니다.
한 가지 사족인데 C 언어의 문법에는 goto 라는 것이 있습니다. 옛날 C 이전
의 언어들에서 필수적으로 사용하던 것인데 그 흔적이 남아있는 것이죠.(사실
은 어셈블리의 jmp 명령을 매칭시킨 겁니다만...) 이 문법은 무시하시기 바랍
니다. 공부하시는 것은 말리지 않겠습니다만 바로 잊어버리세요. goto를 사용
해야 하는 상황이 있다면 그것은 프로그램의 구조가 나쁘다는 증거이니까요.

Arrays and Pointers
모든 사람들이 누구나 동의하는 가장 중요한 부분입니다. 무슨 일이 있어도
완전 정복을 하셔야만 하는 부분입니다. 앞서 Data types에서 데이터의 실제
모습을 항상 떠올리려고 노력하라는 말씀을 드린 바 있습니다. Arrays and
Pointers는 그 데이터들이 배열된 모습과 위치를 조작하는 도구들입니다. 이것
들을 완전히 이해하여야 비로소 프로그래머가 될 수 있는 가장 기초적인 지식
을 얻었다고 하실 수 있습니다. 그러니 철저하게 이해하시기 바랍니다.
Array와 Pointer는 기본적으로 컴퓨터의 CPU와 Memory 사이의 데이터 표현형
식 및 전달에 직접적으로 관련되어 있는 부분입니다. 따라서 컴퓨터 분야 자체
가 생소하신 분들은 대부분 이 부분을 공부하시면서 어려움을 겪게 됩니다. 하
지만 끈기를 가지시기 바랍니다.
특별히 공부하시는 방법을 알려드리긴 어렵겠습니다. 책의 챕터 뒤에 나와있
는 배열 및 포인터 관련 문제들을 남김없이 풀어보시고 틀린 부분이 있으면
꼭 다시 내용을 확인하여 습득하시라는 말 밖에는... 통신상의 여러 질답란의
포인터 관련 내용들을 이해해 보려고 노력하시는 것도 도움이 될 듯... 이 부
분과 관련된 좋은 책으로 '성안당'에서 나온 'C 포인터 정복'이라는 책이 있습
니다. 사실 배열과 포인터는 일단 이해하고 나면 전혀 어렵지 않은 것이지만
설명하기는 쉽지 않기 때문에 이런 책도 나온 것 갈습니다. 단시간에 배열과
포인터를 정복하고 싶으시다면 위의 책을 구하셔서 하루나 이틀 정도 이 책에
만 매달리시면 충분히 이해하고도 남을 겁니다. 단,,, 위 책은 상당히 옛날 책
이기 때문에 절판되었을 가능성이 좀 있네요... ㅡ.ㅡa
이 부분을 완전히 이해하고 나면 함수(Function)의 인자로 포인터가 넘어갈
때와 변수값이 넘어갈 때를 구분하실 수 있으셔야 합니다. 그리
고 '&'와 '*'의 사용법에도 주의하셔야 하구요. 굳이 첨언하자면 '&'와 '*'는
선언(Declare)할 때와 사용(Expression)할 때의 의미가 각각 서로 반대입니다.
(C++에서도 마찬가지...) 무슨 말인지는 직접 공부하시면서 익히시길...

Structures
역시 아주 중요합니다. 기본적인 Data type들을 하나의 주머니에 넣어 한꺼번
에 사용하게 만드는 것이 '구조체(Structure)'인데 나중에 C++과 같은 객체지
향 언어의 클래스 개념의 기초가 되는 개념입니다. 이 것을 공부하실 때에도
Data type을 공부할 때처럼 실제로 데이터들이 어떤 식으로 배열되어 있는지,
크기는 어떻게 될 것인지를 생각하시면서 공부하시면 도움이 됩니다. 하지만
그런 것들을 생각하면서 공부하는 것이 Data types에서만큼 중요한 것은 아니
므로 단순히 사용법만 아셔도 되겠습니다.(물론 하드웨어 제어를 위해 C 언어
를 공부하시는 분이라면 무조건 아셔야만 합니다. 덤으로 bit-field 같은 것
도 아셔야겠죠.)

I/O, File I/O
이 부분은 처음부터 너무 깊게 공부하실 필요 없습니다. 초보자에게는 어려
운 내용이 별로 필요가 없거든요. 사용법들 중 간단한 것들만 실습해 보는 정
도로도 충분할 겁니다. 고수준의 I/O는 필요할 때 공부하십시오.

****************************************************************

5. 어떤 컴파일러를 사용하여 공부해야 하나?

Turbo C 1.0, 2.0, 2.1 etc...
Borland C++ 3.0, 3.1, etc...
둘 다 볼랜드 사에서 나온 도스(DOS)용 컴파일러 입니다. 인터넷에 불법으로
돌아다니는 것들이 있다고 하더군요. 구해서 공부해 보시길... 한글 번역본 중
에 부록으로 들어있다고도 하구요. 설치 후 bin 폴더 안의 TC.exe를 실행시키
면 됩니다. Borland C++에서는 파일 확장자를 .c 로 해 주어야 C 언어를 사용
했다고 생각하고 컴파일합니다.(C++의 경우에는 확장자가 .cpp여야 합니다.)

Visual C++
아주 좋습니다만 처음 사용하는 분들이 프로그램을 시작해 보면 도대체 어디
부터 손을 대야 하는지 모를 수 있습니다. 하지만 이것 밖에는 방법이 없다!라
고 하신다면 능력껏 컴파일 방법을 알아내시기 바랍니다. 별로 안 어려워요.
^^

GCC, G++
리눅스를 사용하시는 분이라면 당연히 이 컴파일러를 사용하셔야죠?
Development tools 패키지에서 관련 파일들을 설치하셔야 사용하실 수 있습니
다. Turbo C 나 Visual C++ 같은 통합환경이 아니고 명령줄에서 실행하는 것이
라는 점에 유의하세요. 이를테면, Xterm을 띄워두고
$ gcc test.c
처럼 하시면 됩니다. 확장자가 .c 이면 C 언어이고 .cpp 혹은 .cc 이면 C++입
니다.
리눅스를 사용하여 C를 공부하려면 에디터 사용법을 알아야 합니다. 옛날이라
면 VI나 Emacs를 적극 추천했을텐데 요즘 래드헷 패키지를 보면 단순하고 윈
도 기반 에디터들도 있더군요. 취향에 맞는 것을 사용하시기 바랍니다.

Borland C++ 5.5
볼랜드 사에서 다운로드 받을 수 있는 C/C++ 컴파일러입니다. 볼랜드 사의 코
어 컴파일러로서 가장 최근의 ANSI C/C++(표준)을 완벽하게 지원합니다. 단,
DOS용이면서도 Turbo C 같은 통합환경을 제공하지 않으며 gcc/g++과 같이 명령
행에서 실행해야 합니다. 사용방법은 gcc/g++과 거의 동일합니다. 개인적인 의
견입니다만 이 컴파일러가 상당히 맘에 들더군요. 실제 상용 프로그램을 작성
하는 것은 불가능하지만 숙제를 한다던가 공부를 할 때에는 아주 그만입니다.
그리고 여기에 더해서 Turbo Debugger라는 놈이 따라옵니다. 이것은 Turbo C++
과 같은 통합환경을 제공하는 디버거인데 Turbo C++에 익숙하신 분들은 전혀
사용에 지장이 없을 겁니다.

****************************************************************

6. 공부방법에 대한 두 번째 조언 전체적인 공부의 흐름

대부분의 C 책을 펼쳐보면 "Hello, World!" 를 출력하는 셈플 코드를 가지고
서 설명을 시작합니다. C를 처음 접하시는 분이라면, 그리고 아직 한번도 컴파
일을 해 본 적이 없는 분이시라면 반드시 이것을 컴파일하여 화면에 출력시켜
보시기 바랍니다. 그것이 제대로 된 시작입니다. 프로그램의 작성, 컴파일러
를 사용한 컴파일, 프로그램의 실행이라는 3단계를 무사히 마칠 때까지 실패
의 원인을 분석하셔야 합니다. 그래야 나중에 실습을 제대로 할 수 있게 될 테
니까요. 만약 지금 컴퓨터가 없다면 별 수 없지만 단지 컴파일러가 없어서 못
하겠다...라고 하시는 것은 변명이 되지 않습니다. 즉시 인터넷에서 적절한 컴
파일러를 구하여 설치하고 사용하십시오. 그런 후에 공부를 진행하세요. 컴파
일러의 사용법을 모두 아실 필요도 아직은 전혀 없습니다. 단지 위의 것을 컴
파일하고 실행하는 것만 성공시키세요.

그런 후에 주요 내용에 대한 공부와 실습을 병행하십시오. 이것은 취향에 따
라서 하실 수 있을 테지만요. 공부하실 내용은 위에 언급한 주제들입니다. 그
리고 실습을 하다보면 컴파일러 사용법에 점차 익숙해질 것입니다.

공부가 한 번 끝나셨다면 마지막 점검을 하셔야겠네요. 혹시 위에 추천된 책
들 중에서 1)을 가지고 계시지 않다면 그 책을 사셔야 할 때가 된 것 같습니
다. 그리고 그 책의 첫 장(Introduction)을 읽어보십시오. 꼼꼼하게. 이 책의
Introduction에는 C 언어에 대한 전반적인 소개와 중요 개념들이 대부분 언급
되어 있습니다. 만약 모두 이해가 가신다면 C 언어의 세계에 성공적으로 들어
오신 겁니다.

그런 후에는 간단한 프로젝트를 하나 설계해 보십시오. 윈도 프로그래밍이 아
니라 텍스트 모드에 기반한 아주 간단한 것으로요. 그렇지만 많은 분들이 이
런 것 생각하시는 것을 귀찮아 하신다거나 혹은 전혀 그 방향을 잡지 못하는
분들도 계시기에 한 가지 예를 들어보자면 이런 것이 있을 수 있겠습니다.

문) 최대 5명의 이름과 전화번호, 메일주소를 입력받아 저장하고 선택적으로
지울 수 있으며 자료의 정렬이 가능해야 한다. 데이터의 저장 공간은 구조체
의 배열을 사용하든, 저장 영역을 생성/소멸 시키든 관계없다.

간단하죠? 텍스트 기반으로 만드는 것이므로 코드는 길지 않습니다. 300-500라
인 사이면 되지 않을까 합니다. 텍스트 기반이라고 하여도 만약 사용자 인터페
이스를 멋지게 만들고 싶다면 조금 더 길어질 수도 있겠죠. 위의 문제를 나름
대로 발전시켜서 30명 정도의 정보를 저장할 수 있는 괜찮은 전화번호부를 만
들 수도 있을 겁니다. 의욕이 닿으신다면 File I/O의 기본적인 내용을 적용하
여 전화번호부를 저장하는 것도 생각할 수 있겠네요. 여기에다 적당한 인터페
이스를 더하면 헨드폰의 전화번호부를 설계하신 것이 됩니다.

어쨌거나 중요한 것은 모든 것이 프로그램 작성자의 상상력과 노력에 달려있
다는 겁니다. 반드시 간단한 프로젝트를 하나 해 보시기 바랍니다. ^^

****************************************************************

7. 그 외의 것들

어느 사이엔가 여러분은 C에 익숙해져 있을 겁니다. 이제는 좀 더 심화된 내
용들을 살펴봐야 할 것 같습니다. 이와 관련된 내용들은 많은 분들의 의견이
일치하지 않을 것으로 보입니다만 당장 생각나는 것들만 몇 개 나열해 보겠습
니다.

헤더파일의 고급 사용법
리눅스나 Borland C++ 5.5를 사용할 경우 makefile을 작성하는 방법
C를 사용하여 OOP적인(혹은 모듈화된) 프로그램을 작성하는 방법
C에서 사용되는 각종 표준 메크로들
Port I/O (Hardware interface)

앞의 네가지는 아주 밀접한 관계를 가지고 있습니다. 헤더파일의 고급 사용법
은 대규모 프로그래밍에서 필수적으로 사용하게 되는 모듈화된 프로그래밍에
서 중요한 역할을 합니다. 그다지 많지 않은 내용이지만 잘 익혀두시면 나중
에 편합니다.
그리고 헤더파일의 고급 사용법을 익히면서 꼭 만나게 되는 것들이 바로 메크
로입니다. 역시 중요한 것들을 꼭 익혀두시길 바랍니다. 쓸데없는 메크로도 많
고 중요하지만 초보에게는 그다지 쓸모없는 것들도 많습니다. 그런 것들을 굳
이 구분하실 필요는 없으며 일단 한 번 읽어보고 '이런 것이 있구나'하는 정도
로 이해하고 넘어가시면 됩니다. 나중에 필요할 때 들춰보면 되니까요.
makefile 이 뭔가 궁금하신 분들이 있을 겁니다. 이것은 프로그램 파일들이
많아질 경우 파일들 사이의 의존 관계 등을 작성해 두는 파일입니다. 그러면
make라는 유틸리티를 사용하여 자동적으로 컴파일을 할 수 있게 됩니다. 각종
의존관계를 생각하며 컴파일 할 필요가 없다는 거죠. Visual C++이나 Borland
C++ Builder, Delphi 등등은 모두 기본적으로 make라는 유틸리티와 비슷한 것
을 사용하고 있습니다. 단지 그것을 자동적으로 생성하여 사용자들이 생각할
필요가 없게 해 줄 뿐이죠. 리눅스나 볼랜드 코어 컴파일러를 사용할 때
makefile을 사용하는 방법을 익혀 두신다면 도움이 될 때가 있을 겁니다.
끝으로 Port I/O에 관련된 것인데 이것은 컴파일러마다 다릅니다. 필요한 자
료는 하드웨어 동호회 같은 곳에서 구하실 수 있을 겁니다. 여기에 관련된 내
용은 C의 하드웨어 제어와 직접적으로 연관된 부분들이기 때문에 C 문법과는
전혀 다른 새로운 부분이라고 할 수 있으며, 공부하길 원하시는 분들은 아마
도 이미 어셈블리 언어에 대한 이해 혹은 컴퓨터 구조에 대한 이해를 하고 계
신 분들이라 생각됩니다. 그러니 더 이상의 설명은 필요없겠죠? ^^;

그 외에도 많겠지만 필요할 때마다 알아서 적당히 공부하시기 바랍니다. ㅡ.
ㅡ;

****************************************************************

8. 마지막 첨언

여러분께서 영어로 에세이를 하나 작성한다고 생각해 보시기 바랍니다. 기본
적인 영문법은 익힌 상태라고 가정하죠. 그러면 이제 단어가 문제가 될 것입니
다. 표현하고 싶은 것이 있어도 영어 단어를 모른다면 아무런 소용이 없겠지
요.
이번에는 영어로 된 글을 읽는다고 생각해 보시기 바랍니다. 이제는 단어도
문제이지만 뉴앙스도 문제가 될 겁니다. 글을 쓰는 사람의 의도가 담긴 뉴앙스
를 모르면 이해가 어렵게 될 겁니다. 그리고 문법도 또 다시 문제가 됩니다.
직접 글을 쓸 때에는 아는 문법을 짬뽕해서 사용해도 어떻게 적당히 표현이 가
능하지만 글을 읽을 때에는 작성자가 사용한 문법 중 모르는 것이 있으면 이해
가 처음부터 불가능하게 됩니다. 단어야 사전을 뒤져서 이해한다고 쳐도요...
마지막으로 글을 쓰는 방법을 살펴보죠. 워드를 열고 글을 쓰시려면 계획도
세우고 뼈대를 잡은 후에 글을 쓰고 다 쓴 후에는 퇴고의 과정을 거칩니다. 프
로그램의 사용법을 잘 아셔야겠죠?

1에서 소개된 책을 공부하셨다면 여러분은 "문법"만을 공부하신 셈이 됩니다.

여러분께서 C언어로 프로그램을 작성하다고 생각해 보시기 바랍니다. 기본적
인 문법은 익힌 상태겠지요. 그러면 이제 라이브러리 함수가 문제가 될 것입니
다. 구현하고 싶은 기능이 있어도 필요한 함수를 작성 못하거나 어떤 함수가
있는지 모른다면 아무런 소용이 없을 것입니다.
이번에는 C로 작성된 프로그램을 읽는다고 생각해 보시기 바랍니다. 라이브러
리 함수도 문제지만 프로그램의 흐름과 스타일도 문제가 될 겁니다. 작성자의
흐름이나 스타일을 모르면 이해하기 어려울 것입니다. 그리고 문법도 또 다시
문제가 됩니다. 직접 프로그램을 작성할 때에는 아는 문법을 짬뽕해서 사용해
도 어떻게 적당히 작성이 가능하지만 남의 것을 읽을 때에는 작성자가 사용한
문법 중 모르는 것이 있으면 이해가 처음부터 불가능하게 됩니다. 라이브러리
함수야 메뉴얼을 뒤져서 이해한다고 쳐도요...
역시 마지막으로 프로그램 작성 방법을 살펴보죠. 프로그램을 작성하시려면
디자인을 하여야 하고 프로그래밍을 모두 쓴 후에는 디버깅과 평가의 과정을
거칩니다. 당연히 프로그래밍 툴에 대한 이해를 잘 하셔야하겠지요.

이렇게 보면 중요한 요소들이 나타나게 됩니다. 문법, 라이브러리 함수, 프로
그램의 흐름과 스타일, 작성 툴의 사용법 익히기. 여러분은 각 요소들의 가장
기초적인 부분을 끝낸 상태입니다. 이제 실제 프로그래밍을 하면서 살을 붙이
고 경험을 쌓아나가며 노하우를 축적하여야 합니다. 이것들은 영어공부를 하
는 것과 마찬가지로 노력이 없으면 불가능한 것이겠죠. 여러분의 앞길이 순탄
하길 바랍니다. 이 정도에서 첫 가이드를 마치도록 하겠습니다.

참고) 각각의 중요한 요소들에 대한 첨언입니다.

(1) 문법 "The C programming Language"를 구하셔서 Introduction이 잘 이해
가 가는지 확인하신 후에 짬이 나실 때마다 부족하다 생각되는 부분을 찾아서
읽으십시오. 책이 어렵기는 하지만 굉장히 압축적으로 써있기 때문에 몇 줄 읽
지 않고서도 생각할 것이 많습니다. 곰곰이 생각해보는 과정에서 얻는 것이 많
을 것입니다. 이 책의 주옥같은 문제들도 풀어보시면 금상첨화.

(2) 프로그램의 흐름과 스타일 스타일이란 프로그래밍 컨벤션에 대한 공부를
조금 하면 금방 이해가 가실 겁니다.(공부할 것도 별로 없지만...) 프로그램
의 흐름은 프로그램의 종류나 목적마다 많이 다르므로 많이 작성해보고 많이
읽어보면서 이해하셔야만 합니다. 물론 좋은 흐름을 창조하는 방법을 많이 연
구해야 함은 물론입니다. 이와 관련된 내용이 바로 "소프트웨어 공학"이라는
분야입니다. 관련 내용을 검색해 보시기 바랍니다.

(3) 라이브러리 함수 윈도 API나 리눅스의 glibc, winsock 혹은 여러분이 직
접 만든 함수들의 집합을 말합니다. 실제 상용 프로그램 수준의 프로그래밍을
하게 되면 이런 라이브러리들을 공부하고 사용할 수밖에 없으며 자신만의 라이
브러리를 축적하는 것도 매우 중요합니다. 하지만 윈도 API나 glibc같은 것을
사용하는 것은 따로 시간을 내셔서 차근차근 공부하셔야 합니다. 이것은 문법
과는 다른 "단어"의 문제이기 때문입니다. C 언어를 공부하였다고 해서 네트워
크 프로그래밍을 할 수 있는 것은 아니지 않겠습니까? 꾸준히 필요한 부분을
공부하시는 것이 가장 좋은 방법일 것입니다.

(4) 툴 Rational Rose(설계 툴), Visual Studio, Turbo C++, Borland C++,
GCC, Make utility, 등등... 필요한 것들을 선택하여 일단 하나를 어느 정도
숙지하세요. 특히 컴파일러의 경우에는 디버깅 툴 사용법을 잘 익혀 두시기 바
랍니다. (개인적인 생각이지만(그리고 많은 분들이 동의하시지만) 전 디버깅
의 실력이 진짜 실력이라고 봐도 무방하다고 생각하거든요.)

ps. 참고로 C 언어의 고급 사용법을 익히시고 싶다면 아래의 두 권을 우선 추
천하겠습니다. 위의 것은 리눅스나 유닉스 환경에서, 아래 것은 윈도우즈 환경
에서 쓸모있겠죠. 그치만 둘 다 공부할 만 합니다. 앞의 책은 그야말로 고전.
이 시대의 걸출한 구루 한 명이 쓴 베스트셀러구요. 윈도 API 의 경우에는 리
눅스에서도 거의 대부분의 함수를 지원하기 때문에 이걸 익혀 두면 리눅스 프
로그래밍도 가능하다고 하더군요.(들어만 봤고 아직 리눅스에서 돌려보진 않았
음. ^^; ) API 책은 아래 책 외에도 원서 좋은 것들 많습니다. 골라서 보시
길...

- Advanced Programming in the UNIX Environment
W. Richard Stevens
Addison Wesley
- Windows API 정복
김상형 저 / 1512쪽
가남사

ps2. C와 비슷한 중요도를 가지는 언어에 Pascal 이 있습니다. 기본적인 파스
칼을 익혀두면 유용할 때가 많죠. 일단 Delphi가 Pascal을 기본 언어로 사용하
고 있으며, VHDL과 같이 하드웨어 설계언어도 파스칼을 차용한 것입니다. 기회
가 닿으면 시간을 내셔서 한 번 익혀보시기 바랍니다.

****************************************************************
****************************************************************

End

****************************************************************
****************************************************************

****************************************************************
****************************************************************

초보자들을 위한 공부 가이드 (2) C++ 언어

****************************************************************
****************************************************************

0. 소개

C++ 언어의 중요성이나 왜 배워야 하는가, 다른 언어와 차이점은 무엇이며
OOP를 완벽하게 구현할 수 있는가, 등등...에 대한 얘기는 하지 않겠습니다.
그런 것은 자유게시판 뿐만 아니라 잡지, 뉴스, 책 등등에서 무수히 이야기가
나누어진 주제이니까요. C가 필수라면 C++은 여러분이 선택하기 나름입니다.
JAVA를 해도 되고 C#을 해도 되고, Delphi, Visual Basic 등등 아무 것이나 해
도 됩니다. 저는 단지 여러분이 C++을 공부하려고 한다고 가정하고 거기에만
초점을 맞추겠습니다.

C++을 하시려면 시간이 걸리시더라도 C를 먼저 공부하라고 권해드리겠습니
다. 꽤 많은 분들께서 C언어를 공부하지 않고 바로 C++을 공부해도 된다고 하
시지만 기본적으로 저는 반대입장입니다. 물론 여러분의 취향 나름이겠죠. ^^
이 글에서는 C++을 C없이 공부하시는 분들도 보실 수 있게 쓰겠습니다만 제가
앞서 작성하였던 C 언어 공부 가이드는 읽으셨다고 생각하겠습니다.

****************************************************************

1. 좋은 책들

1) The C++ Programming Language, Special Edition(or 3rd Ed.)
Bjarne Stroustrup
Addison Wesley
2) On to C++
Patrick Henry Winston
Addison Wesley
3) Ruminations on C++ A Decade of Programming Insight and Experience
Andrew Koenig, Barbara E. Moo (Editor), Barbara E.
MooEditor
Addison Wesley
4) C++ 기초 플러스 알파
성안당
5) http//www-h.eng.cam.ac.uk/help/mjg17/teach/CCsummary/
케임브리지 대학
6) http//www.icce.rug.nl/docs/cplusplus/
C++ Annotations Version 4.4.2

C++를 처음 하시는 분이라면 2)를 권합니다. 학부 때 교제였는데 많은 친구들
이 이 책에 감동을 받았습니다. ^^ 고급의 C++ 문법은 전혀 다루지 않고 있으
나 가장 핵심적인 내용들을 모두 아우르고 있으며 이 책을 때고 나면 바로 어
려운 C++ 문법 책을 보실 수 있습니다. 4)는 가장 일반적으로 보는 책인 것 같
더군요. 이 책을 보지는 않았지만 많은 분들의 의견을 읽고 소개합니다. 사실
저는 Tom swan's C++ Primer라는 책으로 처음 공부했더랬습니다. 솔직히 좀 지
루했죠. ㅡㅡa 참. On to Java라는 책도 있는데 이건 그렇게 크게 추천하지는
않겠습니다. 생각보다 내용이 적거든요.

C++을 한 번 공부하기는 했는데 조금 시간이 지났기에 기억을 되새기고 싶지
만, 전에 공부했던 책이 별로 맘에 안 든다!!라고 생각하시는 분께는 6)을 권
해드리겠습니다. HTML 문서이기 때문에 조금 불편하시겠지만 제가 아는 한
C++ 문법에 대한 설명을 가장 잘 한 책입니다. 템플릿 및 템플릿 라이브러리
관련 챕터들, 연산자 오버로딩의 고급사용에 대한 챕터들은 조금 맘에 들지 않
습니다만 나머지 핵심 기초문법에 대해서는 매우 설명을 잘 하였습니다. 생각
보다 양이 적습니다. 제가 대학에서 강의 교제 만들 때 참고한 교제입니다.

C++을 다시 공부하기에는 시간이 아깝다...하시는 분들에게는 5)를 권해 드리
겠습니다. 이건 C++문법의 중요 부분들의 체크리스트가 담긴 링크인데 pdf파일
도 있습니다. 소책자 수준의 크기에 두께도 인덱스, 차례, 제목 모두 포함해
서 60여 페이지 정도. 프린트해서 보세요. 여기 있는 내용을 아무 무리 없이
읽으실 수 있다면 일단 중요 문법은 파악하고 계신 겁니다.

C++을 어느 정도 공부하시고 실전에 사용하실 때 애매한 경우를 많이 당하시
는 분들께는 3)을 권해드립니다. 역사적인 배경때문인지는 몰라도 C++을 사용
하다 보면 요런 경우, 저런 경우에는 어떻게 해야 하나... 하면서 고민하게 되
는 때가 많습니다. 특히 C++을 사용한 지 오래되지 않았을 때 더 그렇죠. 만
약 그런 상황이라면 이 책이 제격입니다. C++의 미묘한 문제점들을 명쾌하게
해설하고 있습니다. 하지만 조금 옛날 책이기 때문에 STL에 대한 설명이 없습
니다. 그럼에도 불구하고 Template을 사용하여 자신만의 Template Library를
만들 때 고려해야 할 점 들을 역시 잘 설명하고 있습니다. C++의 기본 문법에
대한 설명은 없으므로 문법책을 한 번 이상 본 사람들만 보실 수 있습니다.

마지막으로 1)번에 대한 설명을 드리겠습니다. The C Programming Language
와 마찬가지로 책꽂이 꽂아 두면 든든한 책이죠. ^^ 리치와 커니건의 C책과 비
슷한 점이 아주 많습니다. 일단 C++의 초보자를 대상으로 하지 않고 있으며
Introduction이 아주 잘 되어 있다는 점이 가장 큰 공통점입니다. 기본적인 문
법을 한 번 보셨다면, 그리고 namespace, template, STL 등의 고급 주제를 공
부해 보고 싶다 생각하시는 분이라면 이 책의 Introductory Material(1-3장)
을 꼼꼼하게 읽으시기를 권해드립니다. 이것을 다 읽고 나시면 자신에게 필요
하거나 부족한 부분이 무엇이며 그 내용은 이 책의 어디에 있으며 어느 정도
의 응용이 가능한가에 대한 감을 잡으실 수 있습니다. 이 책은 결코 통독을 위
해서 만들어진 것은 아니라고 생각합니다만 그래도 뛰어난 프로그래머들은 모
든 챕터를 한 번 이상 읽으셨을 거라 생각됩니다.(전 필요한 부분만 읽었는데
모두 합치니 1/4 정도더군요.) 아참. 이 책의 가장 큰 장점 중 하나는 Index입
니다. 굉장히 잘 되어 있습니다.

그 외에도 C++과 관련해서는 수없이 많은 양서들이 있으니 주위에서 좋은 책
을 추천받으시길 바랍니다.

****************************************************************

2. 공부하는 방법에 대한 첫 조언

C언어에 대한 가이드를 소개하면서 말씀드린 실습은 C++도 당연히 마찬가지입
니다. 하지만 C++은 C와는 달리 하나 더 생각해야 합니다. 무엇보다도 OOP 개
념을 항상 염두에 두셔야 한다는 거죠. 실습은 기본이고 거기에 더해 종이에
끄적거리며 설계 연습을 반드시 하셔야 합니다. C 가이드에서도 고급 주제로
모듈화 프로그래밍을 공부할 필요가 있다고 말쓰드렸습니다. C에서 모듈화가
옵션이라면 C++에서는 모듈화를 하지 않는 것이 옵션입니다. 이 차이를 늘 기
억하면서 공부하십시오.

첨부하자면 C++은 금방 쉽게 익힐 수 있는 산뜻한 언어는 아니라는 겁니다.
(물론 산뜻하게 사용할 수는 있습니다.) 일단 공부할 양이 많고 익숙해지는 데
에는 더 많은 시간이 소요되기 때문입니다. 짧은 기간 동안 집중적으로 투자한
다고 해도 그 뒤를 이은 되새김질과 연습이 없이는 자신의 것으로 만들기 어렵
습니다. 그러니 공부하고 나서 금방 까먹는다고 걱정하지 마세요. 다시 공부하
면 됩니다. 필요한 것은 끈기입니다.(저처럼 끈기 없는 사람은 몇 년이 지나서
야 조금 눈이 뜨이죠. ^^;)

****************************************************************

3. C++ 언어의 전체적인 구성(기초문법만)

(1)
Data Types, Declarations and Dealing with Data
Arrays and Pointers
Operators, Expressions, and Statements
Control Flow Looping, Branching and Jumps
Fuctions

(2)
Structures and Classes
Operator overloading
Inheritance
Polymorphism

C++의 기초 문법은 두 가지가 있습니다. 하나는 흐름제어나 문장, 함수 호출
등등과 관련된 문법이고 다른 하나는 프로그램의 구조를 구성하는 것과 관련
된 문법입니다. 앞의 것은 C언어의 그것과 거의 동일하며 뒤의 것은 OOP를 적
용하는 부분으로서 모두 클래스와 관련된 것입니다. 공부하시면서 자신의 공부
가 둘 중에 어디에 속하는 것인지를 마음에 담아 두십시오.

****************************************************************

4. 각각의 요소를 공부하며 주의해야 하는 사항들

(1)의 경우에는 C언어 가이드에 있는 설명을 참조하시기 바랍니다. 여기서는
그것에 약간의 보충만 하겠습니다.

Data types
데이터와 관련하여 C++이 C와 달라진 점은 데어터 타입간의 혼용이 불가능해
졌다는 겁니다. 즉, C에서는 int형 값을 char에 집어 넣어도 아무 문제 없었지
만 C++에서는 그렇게 하기가 힘듭니다. 명시적으로 말을 해 주어야 하죠.

Arrays and Pointers
C와 별다를 바 없습니다. 헷갈리지 않게 확실히 공부해 두십시오.

Operators, Expressions and Statements
Control Flow
Functions
C와 거의 비슷합니다. 단, 함수의 경우 Function overloading이 가능해졌습니
다. 즉, 이름이 같은 함수라도 인자를 다르게 정의했으면 다른 함수가 되는 거
죠. 아주 유용하며 C++에서는 매우 일반적으로 사용되는 기능입니다.
이 부분들을 공부하시면서 반드시 헷갈리지 않고 기억하셔야 하는 것을 몇
개 뽑아보면 아래와 같습니다.
1. 함수호출 시 call by value(C의 형태)와 call by referece의 차
이점 숙지.
여기서 연산자 '&','*'의 사용법이 매우 헷갈리기 쉽습니다.
공부하기 전에 C 언어의 배열과 포인터 부분을 확실하게 이해해
두는 것이 도움이 됩니다.
2. '&'을 사용한 reference 변수(혹은 alias변수, 혹은 nickname 변
수)의 사용법.
3. 예약어 const의 굉장히 다양한 사용법 숙지.(C언어와는 사뭇 다
름)

(2)의 경우에는 모두 공부한 후에 아래의 것들을 자신이 직접 설명할 수 있는
지를 체크해 보시기를 권합니다.

- 상속(Inheritance)
- 다형성(Polymorphism)
- 클래스가 포인터형 멤버 변수를 가질 때의 메모리 관리
(생성자, 소멸자, operator overloading,
copy constructor, virtual destructor 등등 관련)
- 다중 상속시 발생하는 조상 클래스 문제 다루는 법
(실전에서 별로 마추치지 않는 문제지만 일단 알아두셔야 합니
다.)
- 추상클래스 만들기와 사용법
- dynamic casting이 필요한 상황과 사용법
- cross reference를 하는 클래스들이 있을 경우 해결하는 원리와
헤더파일 작성법
(cross reference란 서로 다른 클래스가 서로의 포인터를 멤버로
갖는 경우입니다.)
- 등등...

처음 C++을 공부하시는 분들은 위의 내용이 무엇을 말하는 것인 지 모르실 겁
니다. 그냥 넘어가십시오. 일단 아무 책이나 한 권 붙잡고 공부하신 후에 다
시 이 절을 읽어보십시오. 어쨌든 위의 것들을 별 무리없이, 그리고 개념의 혼
동없이 직접 설명하실 수 있다면 기초 문법을 이해하셨다고 보셔도 되겠습니
다. 그 외에도 몇 가지 자잘한 것들은 위에서 말씀드렸던 책 중 5)번 케임브리
지 대학의 요점 노트를 읽으시면서 체크하시기 바랍니다.

****************************************************************

5. 어떤 컴파일러를 사용하여 공부해야 하나?

Borland C++ 3.0, 3.1, etc...
Visual C++
GCC, G++
Borland C++ 5.5
설명은 C 가이드 참조.

그 외에 도스/윈도용 gcc, g++도 있습니다. 설명은 생략.

****************************************************************

6. 공부방법에 대한 두 번째 조언 전체적인 공부의 흐름

일단 아주 초보분들에게 공부하실 책의 순서를 제 나름대로 권한다면, 2) ->
4)혹은6) -> 1) 의 순서로 공부하시길 권합니다. 한 권의 책으로 C++을 끝내
고 싶으시다면 4) 혹은 6)을 보십시오. 하지만 개인적인 생각으로는 한 권만으
로 C++을 마스터하기는 쉽지 않다고 봅니다. 취향에 따라 선택하시기 바랍니
다. 그리고 공부가 한 번 끝나면 5)번 책으로 꼭 점검을 하시기 바랍니다.

C++ 역시 대부분의 책을 펼쳐보면 "Hello, World!" 를 출력하는 셈플 코드로
설명을 시작합니다. C 가이드에서 말씀드렸던 것처럼 먼저 이것을 성공적으로
컴파일하고 화면에 출력시키십시오. 그런 후에 주요 내용에 대한 공부와 실습
을 병행하십시오. 그리고 C++에서는 프로그래밍의 규모가 커지는 만큼 나중의
편의를 위해 조금 더 신경써서 컴파일러나 디버거 사용법을 익히시기 바랍니
다.

역시 이번에도 마지막에는 간단한 프로젝트를 설계해 보십시오. 예제는 C 가
이드에서 보였던 것과 같습니다. 단, 이번에는 OOP지향적으로 해야겠지요? 데
이터들을 클래스로 설계하십시오. 그리고 몇 가지 관련있는 함수들을 모아 또
클래스를 만듭니다. 이런 클래스들이 서너 개 정도 만들어질 겁니다.(설계하기
에 따라 다르겠지만)

유의하실 점은 main함수의 사용입니다. main 함수는 C++에서 큰 역할을 하지
않는 것이 좋습니다. main이 중요했던 시기는 C로 족하다고 봅니다. OOP로 바
꿔 생각할 때에는 모든 함수나 데이터들이 캡슐화되는 것이 바람직하며 main
함수의 역할은 그런 캡슐들의 동작을 시작시키고 끝내는 것으로 족합니다. 마
치 자동차의 시동을 걸고 끌 때 열쇠를 살짝 돌리는 것으로 족하듯이 말이죠.
모든 동작은 객체들이 맡아서 하게 해야합니다. 역시 자동차의 엔진이나 바
퀴, 브레이크 드럼 등등이 시동을 거는 열쇠와는 관계없이 알아서 잘 돌아가
는 것처럼요.

이러한 설계 기법은 이렇게 말로 한다고 해서 쉽게 이해되는 것은 아니므로
많은 강좌와 예제를 보면서 꾸준히 익히는 수밖에 없습니다. 가장 좋은 방법
은 윈도 API (혹은 SDK) 프로그래밍을 배우는 것인데(모든 것을 다 공부할 필
요는 없습니다. 나중에 필요한 것만 찾아서 사용하면 되니까요.) 이 시점에서
윈도 API를 사용하여 윈도우 창을 띄우는 표준적인 방법을 공부하시면, 가장
좋은 점은 프로그램에 시동을 걸고 끄는 방법(기본적으로 메세지 무한루프)을
이해하실 수 있다는 겁니다.(더 중요한 것은 win32 아키텍쳐를 이해하는 거라
고 합니다.) 그리고 윈도 API가 비록 C언어로 작성되어 있는 것이지만 여러분
께 필요한 형태의 클래스로 캡슐화하는 것을 연습하는 것은 정말 큰 도움이
될 겁니다. 이 연습을 몇 번 하신 후에 MFC를 공부하시면 머리에 쏙쏙 들어오
겠죠. ^^

****************************************************************

7. 그 외의 것들

기초문법은 잠시 접어두고 이제는 좀 더 심화된 내용들을 살펴 보겠습니다.
이 주제들은 처음 C++을 시작할 때부터 공부할 필요가 없습니다. 처음부터 공
부하면 오히려 크게 혼동될 가능성이 있으니 앞에서 언급된 기초문법들을 충분
히 숙지한 후에 공부하세요. 그리고 한꺼번에 다 할 필요도 없고 필요한 것들
을 골라서 공부하시면 됩니다.

- namespace
C를 모듈화하는 것을 연습하라고 했던 것을 기억하시는지요.
namespace는 프로그램 코드들을 그룹화시키는 데에 사용하는 겁니
다.
C에서는 파일 별로 나누어야 하지만 이것을 사용하면 나누어도 되
고 안 나누어도 됩니다.
심지어 파일을 건너뛰어 하나의 namespace안에 속하게 할 수 있습
니다.
이것의 개념이 C#에 기본적으로 사용되었습니다.
- Templates
뼈대만 있는 클래스를 만들어 두고 나중에 재활용할 수 있게 해주
는 기능입니다.
데이터 형을 미리 정의하지 않고 만들기 때문에 하나의 뼈대로 각
종 데이터 형에서 사용합니다.
하지만 문법이 상당히 까다롭습니다. 저도 아직 잘 모릅니다.
사람들이 별로 사용하지 않았죠. 그래서 나온 것이 바로 아래의
STL입니다.
- STL(표준 템플릿 라이브러리)
C++에만 있는 엄청난 기능입니다.
각종 알고리즘과 자류구조가 최적화된 상태의 template으로 제공
됩니다.
기실 STL만 잘 사용할 수 있다면 스스로 알고리즘을 짜게되는 경
우는 별로 없습니다.
그 때문에 고급 프로그래밍에서는 STL의 사용이 거의 필수적이
죠. 효율적이니까...
이에 대한 공부의 시작은 1)번 책의 Introductory Material의 2,3
장으로 하시길 추천합니다.
잘만 이해하면 template을 몰라도 사용가능합니다.(저처럼...
^^;)
- Exception Handling
C++의 표준 방식이 있고 Visual C++에는 추가적인 방법이 또 있습
니다.
하지만 어느 고수님 말씀으로는 C++ 표준 방식을 권하시더군요.
- pointer to members
자신이 속한 클래스 맴버 번수에 대한 포인터의 사용법입니다.
별로 쓰이지 않지만 다른 사람의 코드를 읽을 때 필요할 지도...
- runtime type identification
실행시간에 데이터 타입을 확인할 수 있게 해 주는 것인데 별로
쓰이지 않습니다.
하지만 역시 다른 사람의 코드를 이해하기 위해서 필요할 지도...
- 등등...

다음은 C++에서 그다지 필요없다고 생각되는 문법입니다.(개인적인 생각입니
다.) Stroustrup도 말했듯이 C++은 OOP의 역사가 고스란히 담겨있는 언어니 만
큼 쓸데없는 기능들도 상당수 포함되어 있습니다. 물론 예약어들 하나 하나가
각각 만들어진 배경과 철학을 담고는 있지만 그런 것들까지 사용할 만큼 복잡
한 프로그래밍을 하는 경우는 극히 드뭅니다. 게다가 보통의 프로그래머는 아
예 그런 것이 있다는 것도 모른 상태에서 C++ 프로그래밍을 해도 아무 문제가
없습니다. 제 생각에는 4장에서 언급한 것과 이번 장(7장)에서 언급한 정도를
익힌 후에는 필요할 때 찾아보면서 사용하는 것이 더 나을 거라 봅니다.(저도
잘 모르기 때문에 예를 들 수가 없네요. ㅡㅡ;) 물론 기초 문법 중에도 아래
와 같이 OOP에 별로 도움되지 않는 것들도 있습니다.(물론 쓰이는 곳도 있지
만...) ^^
- 예약어 friend
- nested classes(이건 사람들 마다 의견이 다를 것 같군요.)
- 등등...


****************************************************************

8. 마지막 첨언

C 가이드에서 영어로 글을 쓰는 것과 프로그래밍 하는 것에 대해 비교한 것
을 기억하시는지요. 그 얘기는 여기서는 생략하기로 하고 각각의 중요한 요소
에 대한 설명을 조금만 보충하겠습니다.

(1) 문법 앞서도 말씀드렸지만 C++의 문법은 방대합니다. 그리고 모든 문법
이 똑같은 중요도를 가지는 것도 아닙니다. 또한 개념상 순차적으로 배워야 하
는 것들도 있습니다. 따라서 중요한 것부터 익히고 차례차례 나머지 것들을 익
히는 방법을 사용하셔야 합니다. 1)번 책을 짬날 때 관심있는 분야부터 조금
씩 읽으시면 도움이 되실 겁니다. 모든 문법을 싸그리 알고 싶으시다면 1)을
첨부터 끝까지 정독하시길...

(2) 프로그램의 흐름과 스타일 역시 앞에서 말씀드렸지만 C++을 사용할 때에
는 OOP 개념을 염두에 두셔야 합니다. 참고로 UML이라는 언어가 있습니다. 언
어 자체가 그림으로 이루어져(?) 있는 것인데 OOP 프로그램 설계에 매우 적합
합니다. 기본적인 C++ 문법을 끝낸 후에는 UML을 한 번 공부해보시고 실전에
사용해 보는 것도 좋을 거라 생각됩니다.

(3) 라이브러리 함수 C++의 대표적인 라이브러리는 당연히 STL를 들 수 있습
니다. 윈도 프로그래밍에서는 MFC(Microsoft Foundation Classes)죠. 설명은
생략하겠습니다. STL은 C++에서도 조금은 고급 응용에 속하고 MFC는 윈도 프로
그래밍에 국한된 것이니까요. 그리고 STL은 앞에서 설명한 것으로 충분하다고
봅니다.

(4) 툴 이미 C 가이드에서 언급했다시피 Rational Rose(설계 툴), Visual
Studio, Borland C++ Builder, GCC, Make utility, 등등...이 있습니다. 이중
OOP 설계에는 Rational Rose 혹은 그와 비슷한 UML 툴들이 큰 도움이 됩니다.
하지만 이것은 일단 기본적으로 컴파일러를 사용할 수 있는 후에 공부해도 되
는 것이죠. 윈도우즈에서는 Visual Studio나 Borland C++ Builder를, 리눅스에
서는 당연히 g++을 익숙하게 익히시기 바랍니다.

ps. C++ 기초 문법에 눈을 뜨셨다면 자유게시판에 위즈(ares666)님이 올리신
17942번 글이 앞으로의 행보에 큰 도움이 될 것 같습니다.

ps2. C++ 기초 문버을 눈을 뜨셨는데 C#에 관심이 생기셨다면 C# 란에 가서 강
좌란의 왕성현 님의 글인 "C# 겉핥기" 모음집(help file)을 다운 받아서 읽어
보세요. C++에 익숙하신 분들을 위한 강좌인데 아주 잘 쓰여진 글입니다.

ps3. UML의 경우에는 아래의 책을 초보자용으로 추천합니다. 저는 이 한 권만
봤기 때문에 다른 책은 어떤지 잘 모르겠네요...
- (초보자를 위한) UML 객체 지향 설계
Schmuller저/곽용재 역
인포북
참고로 Visual Studio의 Visual Modeller라는 툴이 있는데 Rational Rose의
일부기능을 라이센스 한 것입니다. 하지만 없는 기능이 너무 많기 때문에 이것
으로 디자인 하는 것은 효용가치가 없습니다. Rational 홈페이지에서 Rose 98
평가판을 다운받아서 사용해 보십시오.(위 책의 부록 씨디에도 있습니다.) 들
리는 말에 의하면 크랙도 돌아다닌다고 하던데 그 말이 사실이라면 개인적인
공부용으로는 꽤 오래 사용해 보실 수 있을 겁니다. 상용으로 국산 제품인
Plastic같은 것이 있구요, Rose는 넘 비싸고... ㅡㅡa

ps4. 가이드 끝입니다. 더 하고 싶지만 밑천이 떨어졌네요. 그럼 이만... ^^

****************************************************************
****************************************************************

End

****************************************************************
****************************************************************

souiss의 이미지

정말 좋은 글입니다 쓰는데 시간 꽤 걸리셨을 듯 합니다.
정말 도움 많이 됬습니다^^ 즐겨찾기 해놓고 두고두고 봐야될 글이네요

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.