EzDoum

찾기
처음으로 | 찾기 | 아카이브 | 글 올리기 | 링크 | 자료실 | 통계 | 연락처 | 자유게시판
이지도움 특집
전체보기
네트워크
TI OMAP35x
TI DaVinci
Analog Blackfin
RobotWar2005
임베디드!
캐쉬의 모든것
메모리 할당 알고리즘
CPU 파이프라이닝
자료구조(Tree)
금융

Login
이름

암호

기억하기


사용자 등록

현재 접속중인 등록 사용자는 0명, 익명 사용자는 5명 입니다.
전체 등록 사용자: 751명

마지막 답장
·libcurl + fuse 조합으로 되는게 많네. (1)
·Linux Ftrace에 관해 (3)
·Android MTP ( Media Transfer Protocol ) (1)
·Lighttpd에 인증을 digest 사용시 IE 오동작 문제? (1)
·Dtrace에 관해 (1)

최근글
·OpenSSL and multi-threads (0)
·ARM 환경에서 OpenCL 사용 (0)
·IoT용 WIFI 모듈 비교 ( MCU ) 클래스 (0)
·Glances - 리눅스 여러 가지 항목을 한 화면에서 모니터링 (0)
·plugin 방식의 로그 분석기 (0)

뜨거운 감자
·나는 인터렉티브한 환경에서 역어셈블 한다. (12)
·GNU REGEX (정규표현식) 프로그래밍 강좌 (7)
·SoCRobotWar 2005 - 신입생 기초 교육자료 (7)
·ASP.NET의 데이터 그리드와 사용자 컨트롤 (7)
·DHTML Editing Control (7)

가장 많이 읽은 글
·[Cache] 2-way Set-Associative 방식이란 무엇일까? (2)
·멀티쓰레드(Pthread) 프로그래밍
·GNU REGEX (정규표현식) 프로그래밍 강좌 (7)
·Sorting Algorithm Animation (2)
·SoCRobotWar 2005 - 신입생 기초 교육자료 (7)

안녕하세요~
글쓴이: 맹창준 글쓴날: 2002년 04월 10일 오후 08:56
리눅스



아까 멜 드렸던 사람 입니다..

제가 공부하려고 하는 분야는 리눅스 네트웍 프로그래밍 이거든요

제가 아직 미숙한지라...제대로 알지 못했습니다..

그리고...님의 답변에서 궁금한게 생겼는데..

리눅스 네트웍 어드민쪽은 어떤것인지...??

아까 답변 감사하고요..^^ 답변 부탁드립니다..


[분류: 리눅스 인쇄용 페이지 본문 email로 보내기 ]

<  엽기 msn 닉네임.. | 리눅스 7.0에서 오라클 8.1.7 설치 & PRO*C사용  >
안녕하세요~ | 답장: 2개 | 본문에 답장
정렬 :  
icon37.gif EzDoum 2002년 04월 11일 오전 09:51 [ 이글에 답장 | 본문에 답장 | 책갈피 ]
창준님께서 질문하신 리눅스 네트윅 프로그래밍 시작하기
질문을 받고 좀 생각을 해봤습니다.

그런데 리눅스에서 네트윅 프로그래밍 자체 많으로는
별로 의미가 없지요...

즉.. 리눅스에서 주로 하는 것이 서버 프로그래밍인데
(요즘은 xwindows상에서 클라이언트 프로그래밍의 비중도
높아지고는 있습니다..)
이것은 네트윅 프로그래밍으로만 이루어 지는게 아니라
뒷단에서 일어나는 db연동이라던지, 동시사용자를 위한
fork, threading, ipc관련 것들, 로그 파일관리
여러가지 다른 알아야 할것이 많다는 거죠..

그래서 질문을 제가 좀 바꿔서 도움을 드릴려고 합니다.
"리눅스환경에서의 프로그래밍 시작은 어떻게 하는게 좋을까요?"

우선 리눅스란 환경에 익숙해지셔야 할듯 싶네요
리눅스에서 돌아가는 각종 서버들이나
유틸리티등을 익히면서 리눅스에서 제공하는 여러가지
기능들을 알 필요가 있어요..

그래야 나중에 직접 프로그래밍을 할때 방법론을
쉽게 알수가 있다는 거죠. 미리 그런 기능 구현을 봐둔다면
나중에 자신이 짤 프로그램을 설계할때 도움이 될것입니다..

그럼 환경에 익숙해 지는 방법은 무엇일까요.
왕도가 없습니다. 직접 자신의 컴에 리눅스를 깔아서..
여러가지 기능들을 셋팅해서 사용해 보는것입니다.
그러면 자연스레 리눅스랑 친해질것입니다.

리눅스란 넘.. 소스가 공개 되어 있어서 할수 있는게
무지 많습니다.

커널을 다시 컴파일해서 라우터로도 사용하고,
방화벽, 로드밸런서등으로도 사용되고,
각종 서버 패키지를 설치해서 웹서버, 메일서버, 삼바서버,
dns서버, ftp서버, 유스넷서버, irc서버, 인터넷방송서버,
디비서버....... 이런것들을 설치해보면서..
컴파일 하고 환경설정하는 것들..을 배워보시면
리눅스랑 친해질것입니다..

http://www.wowlinux.com
http://www.kldp.org
http://linux.sarang.net
http://taejun.pe.kr
이런 사이트들이 도움이 될듯.

책으로는..
서버 관리자를 위한 리눅스 네트워크 레퍼런스 바이블 : 네트워크 서버 구축부터 웹 호스팅 활용까지
http://www.wowbook.com/generic/book/info/book_detail.asp?isbn=ISBN89-8397-056-1

제4회 리눅스 공동체 세미나 강의록
http://www.wowbook.com/generic/book/info/book_detail.asp?isbn=ISBN89-88886-24-0
리눅스 공동체에서 세미나 한 자료집이 웹에도 있는데
해당 사이트가 지금은 공사중이네요. 제 사이트 자료실에
등록을 하던지 하겠습니다.

리눅스랑 친해진 다음엔 프로그래밍을 짤수 있는
언어를 배워야 겠지요...
리눅스에서 주로 사용하는 것은 c,c++입니다.

효과적인 c,c++학습법은 다른분이 작성한 것이 있어서
제가 붙여넣기를 하겠습니다.

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

초보자들을 위한 공부 가이드 (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

****************************************************************
****************************************************************
데브피아 김성수(iamsskim)회워님께서 작성하신 글입니다


여기까지 하시면 리눅스에서 프로그래밍할 준비 작업이 된것입니다.
일해야 할 시간이라서.. 점심먹고 2부를 올리지요;;;


[수정]

icon_cool.gif EzDoum 2002년 04월 11일 오전 10:08 [ 이글에 답장 | 본문에 답장 | 책갈피 ]
아래는 제가 객체지향 관련해서 북마크 해둔 사이트 입니다.

http://oopsla.snu.ac.kr/~sjjung/stl/
http://www.sgi.com/tech/stl/
http://www.josuttis.com/libbook/
http://hissa.nist.gov/dads/
http://lb234e.iddr.ie.psu.edu/~kaizhi/reference/books/c++/
http://sslab.icu.ac.kr/oonews/lois/issues.html
http://www.cuj.com/
http://www.glenmccl.com/bett.htm
http://www.gotw.ca/
http://www.icce.rug.nl/documents/cplusplus.5.1.1/html/
http://www.javastudy.co.kr/docs/lec_oop/
http://www.jstorm.pe.kr/
http://www.parashift.com/c++-faq-lite/
http://www.research.att.com/~bs/C++.html
http://www.stlport.org/links.html
[수정]

안녕하세요~ | 답장: 2개 | 본문에 답장
정렬 :  

답장 쓰기
글을 올리시려면 로그인 (사용자 등록) 하셔야 합니다.

검색
Google

분류
·공지 (6)
·인터넷 (87)
·하드웨어 (260)
·C/C++ (65)
·어셈블리 (7)
·리눅스 (136)
·리눅스 커널 (67)
·윈도우즈 (25)
·데이터베이스 (20)
·보안 (16)
·.NET (25)
·그래픽 (13)
·책소개 (42)
·호기심 천국 (80)
·잡담 (111)
·사랑 (3)

전체 본문수: 963
전체 답장수: 525


분류 : 리눅스
최근글
최근글
가장 많이 읽은 글
·멀티쓰레드(Pthread) 프로그래밍 (0)
뜨거운 감자
·GNU REGEX (정규표현식) 프로그래밍 강좌 (7)

EzDoum투표
이지도움 어때요?
이게 뭐야. 다시 안올란다. --;
아이 좋아라~ +_+;
관심없다.
먼가는 있는거 같은데 뭐하는 곳이지?
기타 (자유게시판에 글로 남겨 주세요)
[ 결과 | 투표 ]

랜덤 링크
http://kldp.net


 Home ^ BACK TO TOP ^ EzDoum - 도움이 필요하세요~??
 Powered by KorWeblog 1.5.8 Copyleft © 2001 EzDoum, 관리자: EzDoum