언어 자료구조 알고리즘/디딤돌 C++

14. 캡슐화 개요

언제나휴일 2016. 1. 27. 19:31
반응형
안녕하세요. 언제나 휴일, 언휴예요.
이번에는 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