언어/기타
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
번호 분류 제목 글쓴이 날짜 조회 수
824 언어/기타 [ 서버이전 끝남 ] 초코군 2006.08.15 954
823 언어/기타 [Android] 멀티스크린 노하우 2 MiDtics2 2012.10.27 1464
822 언어/기타 [C++] template의 활용법 Zeprod 2007.01.21 1004
821 언어/기타 [C++] WinAPI를 이용한 GUI 프로그래밍 Zeprod 2007.01.08 1204
» 언어/기타 [C++] 객체 지향 프로그래밍 (OOP) -1- Zeprod 2006.12.12 1191
819 언어/기타 [C++] 객체 지향 프로그래밍 (OOP) -2- Zeprod 2006.12.28 901
818 언어/기타 [C++] 객체 지향 프로그래밍 (OOP) -3- Zeprod 2007.01.02 949
817 언어/기타 [c++] 생성자,파괴자 챔피온 2005.05.26 1629
816 언어/기타 [C++] 최단거리 구하는 알고리즘, E log V Dijkstra 악희 2007.08.05 2314
815 언어/기타 [C++] 클래스(객체지향) - 기본 생성자와 소멸자 Sirjhswin 2007.06.13 1956
814 언어/기타 [C++] 한글과 영어가 섞인 문자열의 길이 체크 Zeprod 2007.06.01 2147
813 언어/기타 [css, js] form - select안의 option들에 스타일 적용하기 4 file 2012.04.28 5204
812 언어/기타 [css] css 겉핥기 핥핥 1 file 2012.05.03 855
811 언어/기타 [C] C는 어떤 언어이고 뭘 할 수 있는 언어일까? SeHwa 2007.01.26 1298
810 언어/기타 [C강좌] C를 시작하는 사람들이 알아야할 두가지 Lance 2005.08.22 304
809 언어/기타 [DX&C++] 3D 공간에 대한 이해 Zeprod 2007.03.04 1247
808 언어/기타 [DX&C++] 3D를 넘어 2D로! Zeprod 2007.04.18 1675
807 언어/기타 [DX&C++] 3D를 다루는 프로그램의 개요 Zeprod 2007.03.25 1247
806 언어/기타 [DX&C++] 3대 행렬 연산의 비대칭성(unsymmetry) Zeprod 2007.04.27 1192
805 언어/기타 [DX&C++] 3대 행렬 연산의 사용 Zeprod 2007.03.30 1407
Board Pagination Prev 1 ... 5 6 7 8 9 10 11 12 13 14 ... 51 Next
/ 51






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

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