언어/기타
2006.12.28 03:03

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

조회 수 901 추천 수 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++에서는 이 개념적인 객체를 구현하기 위해, 위의 구조적 정의를 정해 구현한 것일 뿐입니다.



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


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



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


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

?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
784 RPG Maker [쯔꾸르] 애기들 따라다니게 만들기 1 file 2012.06.26 1397
783 RPG Maker 게임자체가 히든피스!! [S's-S] 2006.09.28 1397
782 RPG Maker 전투애니매이션으로 전투를 만들어보자. LeeGang 2005.10.03 1396
781 언어/기타 vnap 로드는 load로 되는데 세이브는 save로 안된다??????????? ㅡ.ㅡ; 협객 2007.05.13 1393
780 언어/기타 획기적인 게임 제작 제1편(게임의 전체적인 분위기의 선택) Santiago 2006.12.04 1389
779 언어/기타 [구기술체험소] Fast Chatting System file 비밀소년 2007.05.03 1385
778 언어/기타 [DX&C++] DirectX란 무엇인가? Zeprod 2007.02.17 1385
777 언어/기타 ARM 어셈블리 강좌 #1: ARM 뜯어보기 원스타 2006.08.17 1380
776 RPG Maker [ODS] ONE 상에 그림 띄우기 Zeprod 2008.05.02 1374
775 언어/기타 0707후반기[제작자포럼]공성결과 천무 2007.08.01 1372
774 언어/기타 액션알피지의 간단한 스킬... ; 피카츄 2005.09.19 1366
773 RPG Maker 어떻게 하면 스토리를 잘 구성할수 있을까? Game/over 2006.07.28 1362
772 언어/기타 [이벤트] 초&중급자 정도의 퀘스트. ~대장장이의 편지를 전달하라!!~ 바람을 가르는 자 2005.05.31 1361
771 언어/기타 축구게임 시스템 헤지혹 2006.12.10 1358
770 RPG Maker -Jindow_v0.1-체험판 file -제이- 2007.01.16 1357
769 RPG Maker 원형 거리 측정(세 줄 스크립트) 타이머 2007.02.12 1356
768 언어/기타 3D좌표계에 3D물체를 찍기위환 기초과정 실베 2007.03.31 1355
767 언어/기타 [DX&C++]3D공간상 카메라 시점의 대한 정의 실베 2007.04.02 1351
766 RPG Maker Ham Engine Library for 2D/3D Game Programmer #1 하앙e 2005.06.28 1347
765 언어/기타 수영 시스템 입니다. 레인시 2006.07.28 1342
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(김원배) | 사신지(김병국)