언어/기타
2006.12.12 04:32

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

조회 수 1191 추천 수 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
번호 분류 제목 글쓴이 날짜 조회 수
724 RPG Maker [변종 액알] 노 스테이더스. 오직, 랜덤형 게임 천공MiD짱 2006.06.17 1211
723 언어/기타 [Nelba]강의2-초보들은 모여랏![R2000] Nelba 2005.06.01 1206
722 언어/기타 분수의 사용 Yggdrasil 2007.01.26 1206
721 언어/기타 원형 거리 측정 Zeprod 2006.12.30 1206
720 언어/기타 캐릭터 행동에 대한 팁? mk_brand_ 2006.10.12 1205
719 언어/기타 [C++] WinAPI를 이용한 GUI 프로그래밍 Zeprod 2007.01.08 1204
718 언어/기타 [고난도 시스템] 당구를 만들어 보자 5 SSS 2007.03.12 1203
717 언어/기타 제어문자 간편하게 쓰기 file EverSmileMan 2007.02.13 1202
716 언어/기타 blitz basic 리닥터즈 2007.01.11 1201
715 RPG Maker 이런거 올려도 되나? Action Rpg 개념 BB.Crow 2006.08.29 1198
714 RPG Maker RPG XP 배워보기 <변수를 마스터하자 중편> 덩키동크 2005.06.17 1196
713 언어/기타 그냥 심심해서 생각해낸 플레이어 낚기 이벤트인데요... 네모상자 2006.09.24 1194
712 언어/기타 [DX&C++] 3대 행렬 연산의 비대칭성(unsymmetry) Zeprod 2007.04.27 1192
711 언어/기타 오랜만에 잡담 하나 아란 2007.04.30 1191
» 언어/기타 [C++] 객체 지향 프로그래밍 (OOP) -1- Zeprod 2006.12.12 1191
709 RPG Maker RPG2003 인터페이스를 알아보자! 타다기 2005.11.05 1189
708 RPG Maker 알만툴 K강의. 스위치를 알자 ☆KBOY★ 2006.12.12 1184
707 언어/기타 [자료구조] Binary Search Tree Zeprod 2006.12.29 1181
706 언어/기타 template에 관한 간단한 예. 김두한 2007.03.12 1180
705 언어/기타 BGM 페이드에 관한 팁 『덩키동크』 2006.10.30 1173
Board Pagination Prev 1 ... 10 11 12 13 14 15 16 17 18 19 ... 51 Next
/ 51






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

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