언어/기타
2007.01.02 08:30

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

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

단축키

Prev이전 문서

Next다음 문서

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

단축키

Prev이전 문서

Next다음 문서

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

 


이번 시간에는 전에 예고해드린대로, 객체를 이용해 프로그램 전체를 설계하는 방법에 대해 알아보도록 하겠습니다.


 


우리가 객체를 만들고, 그 객체를 이용해 어떤 작업을 처리한다고 했을때 우리의 나쁜 머리가 헷갈리지 않도록 하는게 가장 중요하겠지요.


 


 


1. OOP 방법론


 


 OOP 방법론은 객체를 이용해 프로그램을 짜는 방법에 대한 정리를 한 것입니다. 대표적으로는 MVC 아키텍쳐라는게 있지요.


 


프로그램 전체를 실제 연산부분(Model), 대 휴먼 인터페이스(View), 프로그램 흐름 관리자(Controller) 세 부분으로 나누어 구성하는 방식입니다.


 


하지만, 꼭 저 방식을 지키라는 것이 아니라 저렇게하면 어떤부분이 좋다는 정도의 정리만 되어있을 뿐입니다.


 


짧게 쓰려다보니 어렵게 보일 수 있지만, 실제 뜻을 보면 전혀 어려운 부분도 아니거니와 30분정도의 설명을 들으면 '아~ 그렇겠구나' 라는 생각이 절로 들게 됩니다.


 


간단히 게임적인 예를 들면, 유저가 NPC에게 말을 걸었을때 우선 컨트롤러가 '현재 어떤 대답을 해야하는 가?' 에 대한 연산을 수행하라고 지시합니다. 여기서 연산하는 부분이 Model 입니다.


 


모델에서 정해진 결과를 컨트롤러가 받아 뷰에게 '표시좀 해줘봐' 라고 하면, '사람이 알 수 있는 방식'으로 출력하게 됩니다.


 


이 세 부분이 유기적으로 잘 결합되면 프로그램이 될 것이며, 각부분을 따로따로 업데이트하기에 좋다는 것이지요.


 


 


하지만, 역시 중요한 것은 헷갈리지 않도록 현재 개발하는 프로그램에 가장 적합한 객체 지향프로그래밍 적용법을 찾는 것이 좋겠습니다.


 


 


 


이 부분은 정답이 없으므로 여러분의 자질에 맡길 수밖에 없겠군요. ^^;;;


 


 


 


2. 객체 관리자 제작


 


- 이 부분은 본인이 개발한 방법론이므로, 읽고 싶은분만 읽으세요. 마지막부분은 표시해드립니다. -


 


 게임을 만들다 보면 비슷한 객체가 여러가지가 필요한 경우가 있습니다. 이 때에는 단순히 객체 배열을 만들어 사용하는 방법도 있습니다.


 


 하지만, 우리가 만들어야 할 것은 우리에게 필요한 만큼의 객체를 알아서 만들어서 자료구조형태로 묶어 던져주는 것이지요.


 


 


 게임 구동상에 있어서, 몬스터가 리젠되는 부분을 구현한다고 했을 때 단순 배열이라면 최대 등장 가능한 몬스터의 수가 고정되게 됩니다.


 


 우리의 방법론은 객체 관리자라는 녀석을 만들어서 이것을 한번의 함수호출로 객체 추가를 가능하게 한다면 편하지 않을까요? 라는 것에서 시작합니다.


 


 


-------------------------------------------


class Object_Manager


{


      Object* m_pArray;


      int m_iSize;


public:


      Object_Manager();


      ~Object_Manager();


 


      void Add(Object Data);


      Object* Get_Array() { return m_pArray; }


      int Get_ArraySize() { return m_iSize; }


}


 


Object_Manager::Object_Manager()


{


      m_pArray = NULL; // 배열을 빈공간으로 초기화


      m_iSize = 0;


}


 


Object_Manager::~Object_Manager()


{


      if (m_pArray != null)


      {


            for (int i = 0; i < m_iSize; i++)


                 m_pArray[i].~Object(); //객체 관리 배열 내의 모든 객체의 파괴자를 호출한다.


            delete[](m_pArray); // 배열의 삭제


      }
}


 


void Object_Manager::Add(Object Data)


{


      Object* tempArray = new Object[++m_iSize]; // 현재 배열보다 1칸 더 큰 배열을 만든다.


 


      for (int i = 0; i < m_iSize-1; i++)


            temp_Array[i] = m_pArray[i]; // 현재 배열의 값들을 새로 만들 배열에 넣고,


      temp_Array[m_iSize-1] = Data; // 새로 입력된 객체를 마지막에 넣는다.


     


      delete[](m_pArray); // 이전 배열의 삭제


      m_pArray = tempArray; // 새로만든 배열을 대입


}


 


-----------------------------------------------------


 


 


주석만 읽어보아도 간단하게 객체 관리자를 만들 수 있음을 알 수 있습니다.


 


물론 이 강좌에서는 C언어에 대해 잘 모르는 분들을 위해 '배열'을 이용해 변칙으로 동적 데이터구조를 사용했습니다.


 


스텍, 큐 등의 연결자료구조를 이용하는 것이 조금더 자연스러울 수 있으니 한번 인터넷에서 검색해보기를 권장합니다.


 


 


 


객체 삭제도 같은방식으로 만들수 있으며, '모든 내부객체의 파괴자'를 호출하는 부분을 응용하여 일괄적으로 어떤 함수를 실행 할 수도 있습니다.


 


자유롭게 날 수 있는 새들을 여러가지 복사해둔후 '일정시간동안 이동해봐' 라는 함수를 동시에 실행해준다면 모든 새들이 각자 자기 의지대로 날게 되겠지요.


 


마술의 신비.... (-_-;;)


 


 


 


 


 


3. 다음 시간 예고


 


 이번 강의는 너무 짧은 것 같아, 다음시간에 얘기해 드릴 내용의 개요를 설명해드리고 넘어가도록 하겠습니다.


 


 객체를 이용하여 프로그램을 구성할 수 있는 여러분에게 드디어 게임을 만들기 위한 첫걸음을 떼기 위한 시간을 갖겠습니다.


 


 앞서 입이 마르도록 설명해드린 객체 지향 개념이 수없이 얽혀져 등장할 '수도' 있으니 이전 강의가 아리송하신 분들은 한번더 읽어보시거나 제게 질문을 해주세요.


 


 


 다음 시간은 'Windows API를 이용한 GUI 프로그래밍' 입니다.


 


 


 


객체를 왜 써야하는지 뼈저리게 느끼게 되는 시간을 기대해주세요. ^^

?

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(김원배) | 사신지(김병국)