언어/기타
2006.12.12 04:32

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

조회 수 1228 추천 수 3 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄






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


 


이번시간에는 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 코드파일내에 함수 내부 구현을 해두면, 함수 구현이 컴파일이 가능하기 때문에 실행속도상의 이점이 있습니다.

이제 다음시간에는 객체를 어떻게 활용하는 것이 좋을 것인가? 에 대한 내용을 이야기 해보도록 하겠습니다.
?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
1004 언어/기타 목에 좋은것들.... 1 켄타 2005.05.17 2070
1003 RPG Maker 좌표대입(ARPG) 사고실험.[이론편] 늑대소년 2005.05.18 1509
1002 언어/기타 스킬데미지를 10000이상 뜨게해보자.(턴알,액알 둘다) Dship 2005.05.18 1888
1001 언어/기타 Fruity Loops에서 FX탭 사용방법 (1) Mr^Lee 2005.05.18 1709
1000 RPG Maker RPG XP 배워보기 <변수를 마스터하자 상편> 1 덩키동크 2005.05.18 2206
999 언어/기타 100%고수강의!(변수이론) 늑대소년 2005.05.18 2470
998 언어/기타 나름대로 - 변수강좌 켈리시 2005.05.18 1624
997 언어/기타 변수(變數)의 기초 바람을 가르는 자 2005.05.19 1270
996 언어/기타 이번에는 오프닝을! 장아찌 2005.05.20 2635
995 RPG Maker 액션RPG 속성무기를 만들어보자!! 천룡수 2005.05.20 1538
994 RPG Maker 아르바이트를 만들자 . - 1 Norid 2005.05.20 1739
993 언어/기타 플레이어가 자기의 이름을 정한다 . [영어] file Norid 2005.05.21 1780
992 언어/기타 레벨업을 하라 . 그리하면 살것이니.. 1 file Norid 2005.05.22 1574
991 [RPG2000] 가이드북 -7- 창조도시 2005.05.22 11106
990 언어/기타 나라의 PHP 초보탈출 - 1편 나라 2005.05.22 1732
989 RPG Maker 경영 RPG만들기[콤플리트판] 늑대소년 2005.05.24 2039
988 [RPG2000] 가이드북 -1- (표지내용무) 창조도시 2005.05.25 14508
987 언어/기타 [c++] 생성자,파괴자 챔피온 2005.05.26 1668
986 언어/기타 《완벽하게 현실적인 게임을 만들려면 해야되는 조작 몇 가지》-[上편] 자이크로 2005.05.27 1852
985 언어/기타 [R2000] 초간단 단거리액알 2 비밀소년 2005.05.27 2521
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 51 Next
/ 51


[개인정보취급방침] | [이용약관] | [제휴문의] | [후원창구] | [인디사이드연혁]

Copyright © 1999 - 2016 INdiSide.com/(주)씨엘쓰리디 All Rights Reserved.
인디사이드 운영자 : 천무(이지선) | kernys(김원배) | 사신지(김병국)