메뉴 건너뛰기

창조도시 기록보관소

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

2006.12.27 10:04

Zeprod 조회 수:275 추천:3


- 객체의 사용


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


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


우리가 저번 시간에 구현한 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++에서는 이 개념적인 객체를 구현하기 위해, 위의 구조적 정의를 정해 구현한 것일 뿐입니다.



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


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



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


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

번호 제목 글쓴이 날짜 조회 수
349 [C++] 객체 지향 프로그래밍 (OOP) -3- [1] Zeprod 2007.01.02 295
348 이번에도 잡담입니다만-_-;; [6] 아란 2006.12.30 350
347 [자료구조] Binary Search Tree [4] Zeprod 2006.12.29 283
346 원형 거리 측정 [2] Zeprod 2006.12.28 495
345 어드벤쳐 만들기(무료판) [3] StartCraft 2006.12.28 1095
344 001 Action / RPG Maker [6] StartCraft 2006.12.28 739
» [C++] 객체 지향 프로그래밍 (OOP) -2- [1] Zeprod 2006.12.27 275
342 그저 비주얼 베이직에 낚인 것에 대한 잡담 [2] 아란 2006.12.26 369
341 나름대로 게임제작1 - 시나리오 작성법 [4] 켈리시 2006.12.26 702
340 각종 변수를 이용한 쓸만한 것들 [5] 放觀者眼君 2006.12.18 507
339 방사형 마법범위 좌표구하기 [5] BAYONET 2006.12.16 658
338 맵배치 이런식으로 하면 되려나요..?'';; [9] file 땅콩아줌마 2006.12.15 672
337 [이벤트 ID이용의 예]슈팅 게임 [4] file masa 2006.12.14 500
336 골프게임은? [2] Nadoo 2006.12.14 362
335 이벤트를 이용, 장애물을 포함한 적과의 거리계산[중급이상추천] [10] file masa 2006.12.13 545
334 [C++] 객체 지향 프로그래밍 (OOP) -1- [4] Zeprod 2006.12.11 403
333 [서론] 콘솔창으로 작업하는 것이 허무하신가요? [6] Zeprod 2006.12.10 360
332 축구게임 시스템 [9] 헤지혹 2006.12.10 594
331 범위를 구할때 쓸 수 있는 식 둘 [6] 메카_탁 2006.12.08 483
330 외딴 집이랄까..? .. [9] file 도야 2006.12.05 560