언어/기타
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
번호 분류 제목 글쓴이 날짜 조회 수
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
820 언어/기타 [C++] 객체 지향 프로그래밍 (OOP) -1- Zeprod 2006.12.12 1191
819 언어/기타 [C++] 객체 지향 프로그래밍 (OOP) -2- Zeprod 2006.12.28 901
» 언어/기타 [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(김원배) | 사신지(김병국)