언어/기타
2007.01.02 08:30

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

조회 수 949 추천 수 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
번호 분류 제목 글쓴이 날짜 조회 수
784 언어/기타 blitz basic 리닥터즈 2007.01.11 1201
783 언어/기타 소개글 [산타클로스~수해와 수영] Vermond 2007.01.10 1303
782 RPG Maker 범위 공격 : [y >= x^2] 을 이용 1 file Spegel 2007.01.10 2048
781 언어/기타 [C++] WinAPI를 이용한 GUI 프로그래밍 Zeprod 2007.01.08 1202
780 언어/기타 대기 가다없는 2007.01.08 992
779 RPG Maker [RMXP] 펫 소환 강좌 file 연필군 2007.01.07 635
778 언어/기타 도박 시스템 file 연필군 2007.01.07 566
777 언어/기타 잠입 게임 아이디어 아르킨 2007.01.07 1302
776 RPG Maker 데미지의 최소값, 최대값을 설정해보자! ver 1.0 『연금술사』 2007.01.07 1466
775 RPG Maker [RMXP] 벽 소환 이벤트를 만들자 file 연필군 2007.01.06 476
774 RPG Maker 플레이어의 건강을 배려하는 세심한 NPC[용도는...모르겠음-_-] file EverSmileMan 2007.01.02 1293
» 언어/기타 [C++] 객체 지향 프로그래밍 (OOP) -3- Zeprod 2007.01.02 949
772 언어/기타 이번에도 잡담입니다만-_-;; 아란 2007.01.01 1014
771 언어/기타 스크립트를 이용하여 텍스트색상과 갯수를 바꿔보자 ! file 준돌 2006.12.30 575
770 언어/기타 원형 거리 측정 Zeprod 2006.12.30 1206
769 언어/기타 [자료구조] Binary Search Tree Zeprod 2006.12.29 1181
768 언어/기타 [C++] 객체 지향 프로그래밍 (OOP) -2- Zeprod 2006.12.28 901
767 언어/기타 그저 비주얼 베이직에 낚인 것에 대한 잡담 아란 2006.12.27 992
766 RPG Maker 스크립트 실행여부를 알아보거나 스크립트를 봉인시켜보자 1 A. 미스릴 2006.12.26 774
765 언어/기타 스타포지의 추가 설명 다크세이버™ 2006.12.26 441
Board Pagination Prev 1 ... 7 8 9 10 11 12 13 14 15 16 ... 51 Next
/ 51






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

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