언어/기타
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 프로그래밍' 입니다.


 


 


 


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

?

  1. 물체 밀어서 움직이는 이벤트 조금 더 쉽게 하는 법

    Date2018.01.02 CategoryRPG Maker Byzero? Views644
    Read More
  2. [마지막 3명 모집] [취업연계무료교육] VR/AR 게임 콘텐츠 전문가 양성 과정 교육생 모집

    Date2017.07.14 Category언어/기타 By황금상자 Views702
    Read More
  3. rpg vxa 로 겜만들때 데미지 설정 공식[링크]

    Date2017.06.08 CategoryRPG Maker By준E Views740
    Read More
  4. [꿀팁] 간단하게 만들 수 있는 실시간 전투 시스템

    Date2017.03.31 CategoryRPG Maker By준E Views2019
    Read More
  5. JSON parser 변환데이터 저장시 생기는 Object Too Deep 해결하기

    Date2016.12.24 Category언어/기타 Bytitle: 댓글러lklslel Views851
    Read More
  6. 앙뜨프리너십에서 해커톤 부트캠프 모집중이네요

    Date2016.11.08 Category언어/기타 By마나님이 Views908
    Read More
  7. RPG MV에서 플러그인 오류의 원인에 대하여

    Date2016.07.08 CategoryRPG Maker Bytitle: 댓글러lklslel Views2359
    Read More
  8. RPG MV 게임 도중에 윈도우 스킨 파일 자체를 통째로 바꿔버리는 방법 (출처: HIME)

    Date2016.07.08 CategoryRPG Maker By최저 Views1627
    Read More
  9. 게임의 버전을 짜 보자! - 유의적 버전 2.0.0

    Date2016.06.07 Category언어/기타 ByYanggaeng Views1123
    Read More
  10. 텍스트 대화 도중 메뉴 여는 방법을 알아냈습니다!

    Date2016.03.12 CategoryRPG Maker By정궈니 Views2938
    Read More
  11. rpgmv 마우스 지원과 터치 지원이 되니.

    Date2015.10.25 CategoryRPG Maker By팡소리 Views1011
    Read More
  12. RPG Maker MV 와 AJAX를 이용한 웹통신 관련 영상.

    Date2015.10.25 CategoryRPG Maker ByHT9MAN Views2246
    Read More
  13. RPG게임 뻔한요소들.

    Date2015.10.05 Category언어/기타 Bytitle: 천무천무 Views1644
    Read More
  14. 자바스크립트와 관련해서 참고할 만한 사이트들

    Date2015.10.04 Category언어/기타 ByMARCO Views921
    Read More
  15. 꿀잼이군요!

    Date2015.05.20 Category언어/기타 By사람님[대회참가] Views873
    Read More
  16. [RPG2000/3 팁] 간편한 이벤트 단축키

    Date2015.04.06 CategoryRPG Maker Bytitle: 자게이하앵 Views1833
    Read More
  17. [RPG2000/3 팁] 간편한 이벤트 단축키

    Date2015.04.05 CategoryRPG Maker Bytitle: 자게이하앵 Views748
    Read More
  18. [강의링크] 대비법칙-색상대비-밀당의 재미 약한 반대색 설계

    Date2015.04.02 Category언어/기타 Bytitle: 천무천무 Views636
    Read More
  19. 오다 주웠습니다.

    Date2015.03.30 Category언어/기타 By사람님[대회참가] Views917
    Read More
  20. 무료 이미지 사이트 Pixabay!

    Date2015.03.28 Category언어/기타 By나작소 Views909
    Read More
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(김원배) | 사신지(김병국)