이번에는 OOP의 특징 중에 첫 번째로 캡슐화에 대해 간략하게 알아보기로 해요.
이제 C++언어에서 캡슐화에 관한 사항을 알아보기로 해요.
캡슐화는 여러 개의 멤버를 하나의 형식으로 묶는 과정을 말합니다.
C언어에서는 구조체를 이용하여 캡슐화를 했었죠. C++언어에서도 구조체를 이용하여 캡슐화를 할 수 있습니다. 하지만 일반적으로 클래스를 이용하여 캡슐화를 할 때가 대부분입니다.
먼저 C언어에서의 캡슐화와 C++언어에서의 캡슐화의 차이를 간단하게 알아볼게요.
C언어에서 구조체에는 데이터만 멤버 필드(멤버 변수)로 캡슐화할 수 있었죠. 하지만 C++에서는 기능도 멤버 메서드로 캡슐화를 할 수 있습니다. 그리고 C언어에서는 캡슐화한 멤버를 모든 곳에서 접근할 수 있지만 C++언어에서는 구조체에 접근 지정자를 사용하여 가시성을 설정할 수 있습니다. 그리고 앞에서 얘기했듯이 C++에서는 클래스 문법을 제공하고 있어 신뢰성 높은 캡슐화를 할 수 있습니다.
다음은 C언어와 C++의 캡슐화를 비교하는 간단한 예제 코드예요. 앞으로 캡슐화에 관한 사항은 하나 하나 살펴볼 거예요. 여기에서는 한 번 비교해 보시고 코드를 작성해 보세요.
//C언어에서 캡슐화
#include <stdio.h>
#define MAX_NAME_LEN 20
typedef struct Unit Unit;
struct Unit//구조체를 이용하여 캡슐화
{
//멤버 필드(멤버 변수)만 캡슐화 가능
//접근 지정자를 제공하고 있지 않음
int num;
char name[MAX_NAME_LEN];
int hp;
};
//형식과 별개로 함수를 작성
void Train(Unit *unit,int hour)
{
printf("%d번 유닛(%s) 훈련하다.\n",unit->num,unit->name);
unit->hp += hour; //접근 지정자가 없어 어디서나 멤버에 접근이 가능
}
int main()
{
Unit unit={3,"홍길동",100};
Train(&unit,5);
printf("%d번, 유닛 이름:%s, 체력:%d\n",unit.num,unit.name,unit.hp);
unit.hp += 1000;//접근 지정자가 없어 어디서나 멤버에 접근이 가능
printf("%d번, 유닛 이름:%s, 체력:%d\n",unit.num,unit.name,unit.hp);
return 0;
}
▷ 실행 결과
3번 유닛(홍길동) 훈련하다.
3번, 유닛 이름:홍길동, 체력:105
3번, 유닛 이름:홍길동, 체력:1105
다음은 C++언어로 작성한 캡슐화 예제 코드예요.
//C++언어에서 캡슐화
#include <iostream>
#include <string>
using namespace std;
class Unit//클래스를 이용하여 캡슐화
{
//디폴트 가시성은 클래스 내부에서만 접근 가능
int num;
string name;
int hp;
public: //클래스 외부에서도 접근 가능할 수 있게 접근 지정자 설정
Unit(int _num,string _name)//생성자 메서드
{
num = _num;
name = _name;
hp = 100;
}
void Train(int hour) //멤버 메서드
{
cout<<num<<"번 유닛("<<name<<") 훈련하다."<<endl;
hp += hour;
}
void View()
{
cout<<num<<"번, 유닛 이름:"<<name<<", 체력:"<<hp<<endl;
}
};
int main()
{
Unit unit(3,"홍길동");
unit.Train(5);
unit.View();
//unit.hp += 1000; //가시성을 차단하여 접근할 수 없음
unit.View();
return 0;
}
▷ 실행 결과
3번 유닛(홍길동) 훈련하다.
3번, 유닛 이름:홍길동, 체력:105
3번, 유닛 이름:홍길동, 체력:105
이 책에서는 먼저 접근 지정자를 통해 가시성을 설정하는 방법과 이를 통한 장점이 무엇인지 살펴볼게요. 그리고 캡슐화할 수 있는 멤버들에 대해 하나 하나 살펴봅시다.
이 외에도 캡슐화에서는 형식 내에 고유한 정적 멤버를 제공하는데 개체의 멤버와 어떠한 차이가 있는지 살펴볼게요.
또한 const 키워드를 사용하여 상수화 멤버 필드나 상수화 멤버 메서드를 정의할 수 있는데 이들에 관한 사항도 살펴볼 거예요.
마지막으로 개체의 메서드 내부에서만 사용할 수 있는 특수한 키워드 this를 알아보기로 해요.
'언어 자료구조 알고리즘 > 디딤돌 C++' 카테고리의 다른 글
19. 특별한 멤버 this (0) | 2016.01.27 |
---|---|
18. 상수화 멤버 (0) | 2016.01.27 |
17. 정적(static) 멤버 (0) | 2016.01.27 |
16. 생성자, 소멸자 (0) | 2016.01.27 |
15. 접근 지정자 (0) | 2016.01.27 |
13. OOP 개요 (0) | 2016.01.27 |
12. string 형식 개요 (0) | 2016.01.27 |
11. 논리 형식 bool 제공 (0) | 2016.01.27 |
10. 신뢰성 강화 (열거형) (0) | 2016.01.27 |
9. 레퍼런스 변수 (0) | 2016.01.27 |