메뉴 건너뛰기

창조도시 기록보관소

언어 [C++] 객체 지향 프로그래밍 (OOP) -1-

2006.12.11 00:43

Zeprod 조회 수:403 추천:3







안녕하세요. 어제부터 글을 남기고있는 제프라고 합니다.


 


이번시간에는 C++ 언어를 이용한 객체 지향프로그래밍을 설명드리겠습니다.


 


그 첫번째로는, 객체란 무엇이며, 어떻게 정의하는가에 대해 알려드리죠.


 


 





다이렉트 X를 이용해 프로그래밍 하는 것은, C++ 코드로만 할 수 있는 것은 아닙니다..

비쥬얼 베이직을 이용해 DirectX7을 이용해 전체 화면을 만든다던지 스프라이트를 출력 할 수 있습니다.

하지만 많은 사람들이 C++ 언어를 이용하는 것은, 속도가 빠른 객체 지향언어라는 점이 강하게 작용합니다.

오늘은 이에 대하여 이야기를 하도록 하겠습니다.



비단 3D 게임 뿐만 아니라, 일반적인 게임을 제작 할 때에는 여러가지 사물(객체, Object)들이 필요합니다.

몬스터, NPC, 사용자 케릭터 등의 모든 특성들을 한꺼번에 실행할 수 있도록 코드를 짠다고 생각해 보세요.

몬스터가 언제 공격할지, 어떻게 진행이 될지 모든 조합된 상황을 예측하기란 너무 어려운 일입니다.

그래서 객체 지향개념이 등장했습니다. (게임에 한정해서 설명했지만, 기본적으로 모든 연산과정을 객체지향적으로 만들기 위한 것이 OOP입니다.)



객체 지향 개념이란, 프로그램 내에 어떤 연산능력을 가진 덩어리(객체)를 만들고 그들끼리의 데이터 소통으로 연산이 진행되는 것을 말합니다.

예를 들어, 몬스터, 주인공, NPC들을 각각 정의해 놓고, 프로그램 내에서 그들이 알아서 움직이도록 해 놓는다면, 놀랍게도 움직임, 상태, 그림표현까지 알아서 표현하는 모습을 볼 수 있습니다.

저렇게 정의한 것을 바탕으로 여러대를 복제할 수도 있는데, 이런 성질을 '재사용성을 가졌다' 라고 합니다.



* C++에서 객체를 정의하려면?

C++ 언어에서 객체를 구분하는 단위는 클래스 입니다.

클래스는 다른 클래스, 변수, 함수 들을 가질 수 있고, 다른 클래스의 능력을 상속받을 수도 있습니다. 이 성질을 OOP의 중요 특성중 하나인 Inheritance라고 합니다.

C++ 언어상에서 객체를 정의하는 방법을 알아봅시다.

--------------------
class Basic_Class
{
//맴버 정의
int i;
float f;
struct COSTOM_STRUCT
{
int i;
}
Basic_Class();
~Basic_Class();
int GetID() { return i; }
int SetID(int i);
}
--------------------

아주 기초적인 모습입니다. 변수와 구조체, 함수를 맴버로 가진 것을 볼 수 있습니다.


여기서 중요하게 볼 점은 Basic_Class, ~Basic_Class, SetID 함수 입니다.

클래스의 이름과 같은 Basic_Class 함수는 해당 클래스가 다른 코드에서 선언될 때 실행될 부분입니다.

클래스내에서는 바로 초기화를 할 수 없기 때문에, 위와 같은 함수를 이용하게 되며, 이런 함수를 생성자라고 합니다.

생성자 이름 앞에 '~'를 붙인 ~Basic_Class 함수는 반대로 클래스가 자동으로 반환될 때, 호출되는 함수입니다.

{} 코드 그룹내에서 생성된뒤 밖으로 나오면서 직접 실행되는 함수이죠.

이런 함수는 파괴자 라고 합니다.


* 파괴자를 구성할 때에는, 클래스 실행중에 임의로 사용한 메모리들을 모두 반환하는 것이 중요합니다.



함수 선언만 되어있는 이 함수는 class 선언 외부에서 내부 구현을 할 수 있게 됩니다.

외부에서 선언하기위해서는 위의 파일이 헤더파일이었다면,

위의 파일을 다른 C코드 파일에서 include를 할 수 있으며, 해당 코드 파일에서 내부 구현을 할 수 있습니다.

일반 C코드 파일에서는 클래스 정의 하단에 계속 진행하면 됩니다.


선언외부 함수구현은 다음과 같은 형식을 가집니다.

-----------------------------------
리턴타입 클래스이름::함수이름(인자)
{
구현
}
-----------------------------------


위의 형식은, 클래스 정의가 헤더파일에 있거나, 코드파일 내에 쓰여있는 때 모두 사용하는 방식이고, 자주 사용하게 되는 방식이므로 기억해두는 것이 좋습니다.


이제 SetID 구현을 하도록 하겠습니다.

-------------------------------
int Basic_Class::SetID(int fi)
{
i = fi;
}
-------------------------------


이런 식으로 .cpp 코드파일내에 함수 내부 구현을 해두면, 함수 구현이 컴파일이 가능하기 때문에 실행속도상의 이점이 있습니다.

이제 다음시간에는 객체를 어떻게 활용하는 것이 좋을 것인가? 에 대한 내용을 이야기 해보도록 하겠습니다.
번호 제목 글쓴이 날짜 조회 수
349 [C++] 객체 지향 프로그래밍 (OOP) -3- [1] Zeprod 2007.01.02 295
348 이번에도 잡담입니다만-_-;; [6] 아란 2006.12.30 350
347 [자료구조] Binary Search Tree [4] Zeprod 2006.12.29 283
346 원형 거리 측정 [2] Zeprod 2006.12.28 495
345 어드벤쳐 만들기(무료판) [3] StartCraft 2006.12.28 1095
344 001 Action / RPG Maker [6] StartCraft 2006.12.28 739
343 [C++] 객체 지향 프로그래밍 (OOP) -2- [1] Zeprod 2006.12.27 275
342 그저 비주얼 베이직에 낚인 것에 대한 잡담 [2] 아란 2006.12.26 369
341 나름대로 게임제작1 - 시나리오 작성법 [4] 켈리시 2006.12.26 702
340 각종 변수를 이용한 쓸만한 것들 [5] 放觀者眼君 2006.12.18 507
339 방사형 마법범위 좌표구하기 [5] BAYONET 2006.12.16 658
338 맵배치 이런식으로 하면 되려나요..?'';; [9] file 땅콩아줌마 2006.12.15 672
337 [이벤트 ID이용의 예]슈팅 게임 [4] file masa 2006.12.14 500
336 골프게임은? [2] Nadoo 2006.12.14 362
335 이벤트를 이용, 장애물을 포함한 적과의 거리계산[중급이상추천] [10] file masa 2006.12.13 545
» [C++] 객체 지향 프로그래밍 (OOP) -1- [4] Zeprod 2006.12.11 403
333 [서론] 콘솔창으로 작업하는 것이 허무하신가요? [6] Zeprod 2006.12.10 360
332 축구게임 시스템 [9] 헤지혹 2006.12.10 594
331 범위를 구할때 쓸 수 있는 식 둘 [6] 메카_탁 2006.12.08 483
330 외딴 집이랄까..? .. [9] file 도야 2006.12.05 560