언어/기타
2006.12.28 03:03

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

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

단축키

Prev이전 문서

Next다음 문서

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

단축키

Prev이전 문서

Next다음 문서

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


- 객체의 사용


저번 시간에는 객체지향 프로그래밍을 하기 위해 객체를 만드는 법을 배웠습니다.


이제 우리는, 우리가 만든 객체를 어떻게 활용할 것인지에 대해 생각을 해 볼 차례입니다.


우리가 저번 시간에 구현한 Basic_Class를 예로 들어 사용하는 방법에 대한 예제를 살펴보도록 하지요.



객체를 사용하는 방법에는 변수(정적) 선언방식과 포인터(동적) 선언방식이 있습니다.


첫째, 변수 선언방식의 경우 우리가 만든 클래스의 이름을 타입으로 갖는 변수를 만들어 사용하면 됩니다.


이 경우, 클래스는 구조체와 같이 '.'을 통해 내부 인자에 접근 할 수 있습니다.


둘째, 클래스형 포인터에 객체 생성자를 통해 객체를 만들어 사용하는 방법입니다.


이 경우, 프로그램 실행중에 동적으로 선언되는 장점이 있습니다만, delete 명령어를 통해 꼭 메모리에서 삭제를 해주어야 합니다.


이경우 포인터를 통해 구조체를 사용하는 방식으로 '->'를 이용합니다.
--------------------------------------
class Basic_Class
{
private:
    int i;
    float f;
    struct COSTOM_STRUCT
    {
        int i;
    }
public:
    Basic_Class();
    ~Basic_Class();
    int GetID() { return i; }
    int SetID(int i);
};


Basic_Class Data;
Basic_Class* pData = new Basic_Class();



int id = Data.GetID();
Data.SetID(id);


int pid = pData->GetID();
pData->SetID(pid);



delete(pData);


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


Basic클래스의 기본 형태를 가져다 놓았다. 코드 마지막 부분을 본다면,


Data 객체 내부함수에 접근 할때에는 .을 이용해 연결을 하는 것을 볼 수 있다.


하지만, 이렇게 클래스 외부에서 클래스 내부의 인자에 접근하는 것은 public: 지시자 덕분에 가능한 것입니다.


 


대표적인 접근지시자는 다음과 같습니다.


-------------------------
- public:
 : 모든 클래스 외부 영역에서 사용할 수 있음.
- private:
 : 클래스 내부에서만 사용할 수 있음.
- protected:
 : 자기 자신과 자신의 자식 클래스에서 사용할 수 있음.
-------------------------


protected 지시자의 경우 '자식 클래스'라는 용어가 등장합니다.


이는 객체지향 프로그래밍의 3가지 개념중 1가지인 상속성(Inheritance)를 나타냅니다.


다른 클래스의 역할을 물려받아 조금 더 개량한 많은 종류의 클래스를 쉽게 만들 수 있는 기능이지요.



새라는 대표적인 클래스를 만들었다면, 이것을 상속받아 '독수리', '비둘기' 등의 비슷하지만 세부적으로는 다른 구현을 해줄 수 있습니다.


C++에서는 클래스 선언시에 상속을 표현해주는 방법으로 구현하고 있습니다.



------------------------------------------
class Advanced_Class : class Basic_Class
{
}
------------------------------------------


이렇게 생성된 Advanced_Class는 Basic_Class를 상속받았기 때문에 똑같은 기능을 수행할 수 있으며, 기존의 기능을 재선언하거나, 없던 기능을 추가할 수 있습니다.


이 부모 자식관계를 이용한 다양한 기술들이 있으나, 현재 강의내용과는 맞지 않으므로, 지금은 자세한 설명을 생략하도록 하겠습니다.


추후 실제 개발강의에서 사용된다면 그 때 부가설명을 드리도록 하겠습니다.


만약 개인적으로 질문을 하고 싶으신 분이 계시면, Q&A 게시판에 질문을 남겨주시기 바랍니다.



- 객체의 정의


이제 객체란 대체 어떤 것인가에 대하여 알려드리겠습니다.


먼저, 우리가 만든 객체의 구조적인 정의를 해보도록 하지요.


이는 제가 저번 시간에 설명해드린 객체의 구조에 대한 설명을 들은 것과 상통합니다.


객체란, 변수, 구조체, 클래스, 함수 등을 맴버로 가질 수 있는 데이터 집합체입니다.


이런 관점에서 본다면 구조체의 확장 형태라고 말할 수 있을 것입니다.


 


그렇다면, 의미적인 정의는 어떤 것일까요?


이 관점에서의 객체는 '어떤 일을 스스로 할 수 있는 개체'를 말합니다.


이 개념적인 정의를 두는 것으로 인해, 우리는 프로그램을 더욱 세분화, 단순화 하여 설계할 수 있습니다.


예를 들어, 자유롭게 행동 할 수 있는 객체를 만들었다면 이 객체는 '스스로 어떤 일을 할 수 있는 능력'을 가지고 있을 것이므로, 우리는 그 능력을 이용하기만 하면 됩니다.


이렇게 객체를 사용해 설계하는 방식을 객체 지향 프로그래밍(Object Oriented Programing) 이라고 합니다.


C++에서는 이 개념적인 객체를 구현하기 위해, 위의 구조적 정의를 정해 구현한 것일 뿐입니다.



사실 보통의 강의에서는 이런 정의를 먼저 배운 후, 객체를 어떻게 구현하는 가에 대해 알려주는 형식이 대부분입니다.


하지만, 본 강의에서는 객체에 대한 아무 정보도 없이 정의만 알게되어 '객체란 대체 어떤 것인가?' 에 대한 궁금증을 갖지 않을 수 있도록 순서를 약간 변형하였으니 참고해 주십시오.



지금까지 '객체란 무엇인가?'라는 질문의 해답을 구했고, 객체를 만들고 사용하는 방법을 알아보았습니다.


다음 시간에는 '객체 지향 프로그래밍'의 진정한 목표인 프로그램 설계 관점의 강의를 해드리도록 하겠습니다.

?

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

  2. [마지막 3명 모집] [취업연계무료교육] VR/AR 게임 콘텐츠 전문가 양성 과정 교육생 모집

  3. rpg vxa 로 겜만들때 데미지 설정 공식[링크]

  4. [꿀팁] 간단하게 만들 수 있는 실시간 전투 시스템

  5. JSON parser 변환데이터 저장시 생기는 Object Too Deep 해결하기

  6. 앙뜨프리너십에서 해커톤 부트캠프 모집중이네요

  7. RPG MV에서 플러그인 오류의 원인에 대하여

  8. RPG MV 게임 도중에 윈도우 스킨 파일 자체를 통째로 바꿔버리는 방법 (출처: HIME)

  9. 게임의 버전을 짜 보자! - 유의적 버전 2.0.0

  10. 텍스트 대화 도중 메뉴 여는 방법을 알아냈습니다!

  11. rpgmv 마우스 지원과 터치 지원이 되니.

  12. RPG Maker MV 와 AJAX를 이용한 웹통신 관련 영상.

  13. RPG게임 뻔한요소들.

  14. 자바스크립트와 관련해서 참고할 만한 사이트들

  15. 꿀잼이군요!

  16. [RPG2000/3 팁] 간편한 이벤트 단축키

  17. [RPG2000/3 팁] 간편한 이벤트 단축키

  18. [강의링크] 대비법칙-색상대비-밀당의 재미 약한 반대색 설계

  19. 오다 주웠습니다.

  20. 무료 이미지 사이트 Pixabay!

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