C/C++ 강좌 1

안녕하세요
허접하지만 첫 C/C++ 강좌를 올려보는 CreamNuts 입니다. 강좌 형식은 예제 및 설명으로 이루어질 예정이며, 제가 공부하는 것을 토대로 작성될 것입니다. 게임 프로그래머를 지향하기 때문에, 아마 게임에 빗대어서 많이 인용할 것 같습니다.
우리나라에서는 아직까지는 게임쪽에서 일한다고 하면, 좋지 않은 시선으로 보는 경향이 있지만 프로그래밍에 있어서 게임 프로그래밍은 물리, 수학 등이 복합적으로 들어가기 때문에 프로그래머중에서도 상당한 지식을 요구하는 학문입니다. 많이 좀.. 프로페셔널 해 보이죠(실상은 다르지만-_-)

각설하고.. 본래 입문은 C 언어로 하기 마련입니다만, C++의 기능을 섞어서 한번에 강좌하려고 합니다.모쪼록 입문하는 분들에게 큰 도움이 되길 바라며..

#1. C++ 첫걸음

C++의 세계에 발을 들여 놓은 것을 환영합니다. C언어에 객체 지향 프로그래밍 기능을 추가하여 만든 것이 C++ 언어입니다. 일반 C언어는 “절차지향” 방식으로 시작함수인 main() 함수로부터 순차적으로 이루어진 프로그래밍 언어입니다. 반면 C++은 시작점은 main()함수로 같지만, 객체지향적 프로그래밍이 가능한 언어이지요. 게임을 만들고 싶으시다면 C/C++을 조화롭게 사용할 줄 알아야 할 것입니다.

간혹 보면 C를 모르고 C++로 바로 배워도 되냐고 물어보시는 분이 많습니다. 물론 가능은 합니다만, 기본적으로 C++ 언어는 C언어의 확장판입니다. 프로그램이 어떻게 돌아가고 이루어지는지 폭넓게 공부하시길 권장하기 때문에 C부터 차근차근 배우는 것이 좋다고 생각합니다. 물론 제 강좌는 기본 C언어에 C++의 확장기능을 더해가면서 결국 C와 C++을 같이 배워가며  C에서 구닥다리 방식은 버리고 C++의 최근방식을 가미하면서 진행할 예정입니다. 글이 조금 두서없이 되어가는 것 같네요(-_-). 글은 쓰면서 조금씩 리펙토링을 통하여 정리토록 하지요..

지겹게 조금 길어졌네요. 어쨌거나, C++이 나온지는 한참되었는데 지금도 그 세력이 확장되어 가고 있는 언어지요. 효율적이면서도 크기가 작고, 실행속도가 빠르고, 이식성이 뛰어난 프로그램을 만들 수 있는 C언어의 특징을 그대로 가져온데다가 객체지향적 언어를 지원하기 때문에 오늘날 요구되는 복잡한 프로그래밍 작업의 어려움을 극복할 수 있는 언어라 할 수 있겠습니다.
잠시 C와 C++을 어떤식으로 강좌할 것인지 정해보도록 하지요..

1.일단 C의 문법적 요소를 배웁니다. 문법을 익숙하게 사용할 줄 알아야 응용이 가능한 것이니까요.
2.C의 문법이 완성되고 나서 C++의 기초를 시작합니다.
3.C++의 기초는 객체(Object), 클래스(class), 캡슐화(encapsulation), 데이터 은닉(data hiding), 다형성(polymorphism),
상속(inheritance)의 의미를 알고, 절차지향을 넘어 객체지향적인 프로그래밍(OOP : Object – Oriented Programming)에 대해서 배울 것 입니다.
4. 위의 것들을 응용해서 Win32 프로그램을 제작하거나, DirectX를 사용하여 게임을 제작하는 법을 익힙니다.

자, 이제 본론으로 들어갑시다.

∇ C 프로그래밍 철학

앞서 말했다 시피, C++은 C의 확장판 이기 때문에 C의 철학적 요소를 먼저 알 필요가 있습니다. 일반적으로 컴퓨터 언어는 데이터와 알고리즘이라는 두가지 개념을 다룹니다. Data는 프로그램이 사용하고 처리하는 정보를 말하고, Algorithm은 프로그램 데이터를 처리하는 방법을 말합니다.

Untitled-1

아까 위에서 C는 절차적이다.. 라는 말을 했는데요. 그 말의 의미는 프로그래밍에서 데이터 보다 알고리즘에 더 치중한다는 말입니다. 개념적으로 보면, 절차적 프로그래밍은 컴퓨터가 수행해야 할 동작들을 명확히 구분하고, 그 구분된 동작들을 프로그래밍 언어로 구현하는 것입니다. 즉 음식을 만들기 위해서는 그에따른 절차인 레시피가 필요하듯, 원하는 결과를 얻기 위해서 컴퓨터가 수행해야 될 절차들을 규정하는 것이 절처지향적 프로그래밍이라고 할 수 있지요.

이제 객체 지향이 무언지 의미를 살펴볼까요..? 구조적 프로그래밍의 철학이 프로그램의 간결성과 신뢰성, 유지보수의 용이성에 많은 향상을 가져오지만, 규모가 큰 프로그래밍은 여전히 어려운 문제로 남아 있었죠. 그래서 이 문제의 해결책으로 객체 지향 프로그래밍 철학이 등장하였습니다. 흔히들 아시는 JAVA도 객체 지향적 언어죠. 절차적 프로그래밍은 알고리즘을 강조하지만, 객체 지향 프로그래밍은 데이터를 강조합니다. 또한 해결해야 할 문제를 언어의 절차적 접근 방식에 억지로 끼우는게 아니라, 언어 자체를 해결해야 할 문제에 맞춥니다. 즉, 해결해야 할 문제의 특성에 맞게 데이터형 자체를 설계하는 것입니다.

C++에서 가장 많이 사용하고 익숙해야 될 것이 하나 있는데요, 바로 클래스(class)랍니다. 객체(Object)는 클래스에 의해 만들어지는 특정한 데이터 구조라 할 수 있구요. 앞으로 배울 C문법중 struct(구조체)의 확장개념이면서도, 프로그램이 조립식처럼 만들어져서 유지 보수할때도 클래스 안에 있는 구조만 살짝바꿔주면 전체가 영향을 받게되죠. 처음 개념이 어렵지만 익숙해지면 이처럼 편하고 좋은 언어도 없다고 생각하게 됩니다.

∇ 프로그램 작성 요령

무턱대고 코드부터 들이대면서 이게 이거다 라고 설명하는 것 보단, 프로그램이 어떻게 작성되고 쓰여지는 지를 먼저 언급하려 합니다. 프로그램을 작성하고 “실행”하기 위해서는 일단 C++ 컴파일러가 필요합니다. 사용자가 C/C++로 프로그램을 작성하면 이것을 컴파일 해주고 실행파일을 만들어 주는 소프트웨어(툴)가 필요하지요. 툴은 사용자가 컴퓨터 환경을 고려해서 편리한 것을 선택토록 합시다. 저같은 경우엔 게임 프로그래밍을 하기 때문에 윈도우를 사용하므로, MS사의 Visual Stdio .NET을 사용합니다. 그러므로.. 강좌도 이 툴에 맞춰서 설명하게 될 듯 하네요-_-; 결국엔.. 강좌를 보시려면 저와 같은 툴을 쓰시는것이 좀 현명한 선택이라 할 수 있겠군요..(ㅋㅋ) 툴을 사용함에 있어서 자신이 완전히 툴을 가지고 놀정도로 익숙해져야 하기 때문에 이것저것 쓰기보다는 편리한 툴 하나를 구해놓고 구워먹고 삶아먹고 하시는 것이 좋으리라 생각합니다.

자, 일단 프로그램이 어떤 과정을 밟는지 살펴보도록 하죠..

1. 손에 익은 에디터를 사용하여 원시 코드(Source Code)를 작성하고 저장한다.
2. 원시코드를 컴파일한다. (컴파일러를 통해 컴파일 – 원시코드를 기계어로 번역시켜주는 프로그램이 컴파일러라 합니다)
3. 컴파일을 하게 되면 기계어로 번역된 목적코드(Object Code)가 생성되고, 이 코드에 부가적인 코드를 링크시킵니다. 많은 C++프로그램들이 라이브러리를 사용하고, 함수라고 부르는 루틴들의 집합이 목적 코드 형태로 담겨 있는데, 이러한 것들이 링커되서 필요한 시동코드(Start – Up)를 함께 링크합니다. 이렇게 해서 최종적으로 실행 가능한 실행코드(Executable Code)가 생성됩니다. 우리가 흔하게 볼 수 있는 exe 파일이 탄생되는 거죠..

제가 앞으로 설명할 것들은 C++ 표준에 입각해서 설명할 것이기 때문에 대부분 컴파일러에서 잘 돌아갈 것이라고는 생각하지만 장담할 순 없구요. 제가 쓰는 툴인 Visual Stdio .NET에 대해서 다음 강의에서 설명토록 할게요. 툴에 대한 소개 및 설명 다음엔 본격적인 프로그래밍에 입문하시게 될 것입니다.

CreamNuts의 C/C++ 강좌 1편을 마칩니다.

Creative Commons License저작물크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이선스에 따라 이용할 수 있습니다.

Creative Commons License
This work, unless otherwise expressly stated, is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 2.0 Korea License.
Browser does not supports flash movie

Related posts:

  1. C/C++ 강좌 2_Tool & Books
  2. Function Pointer(함수포인터)
Twitter Digg Delicious Stumbleupon Technorati Facebook Email

2 Responses to “C/C++ 강좌 1”

  1. 안녕하세요~
    잘봤습니다.
    재밋네요 ㅎ
    다음 편도 기대할께요~
    그런데 다음편에는 무슨 주제를 다루나용?