언어/기타
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 언어/기타 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
773 언어/기타 [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
» 언어/기타 [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(김원배) | 사신지(김병국)