티스토리 뷰

C,C++

데이터 캡슐화, 하이딩, 은닉기법

Andrew Shin 2016. 3. 10. 11:19

지난 게시글에서 추상 자료형(ADT)에 대해서 알아보았다. 추상 자료형, 혹은 추상화에 대한 개념이 안잡힌 분들은 아래 링크를 통하여 이전 게시글을 먼저 보고 오기를 추천한다.

오늘은 데이터의 캡슐화, 혹은 데이터 하이딩 기법, 데이터 은닉에 대해서 공부해보고자 한다.


추상자료형(ADT)란 무엇인가 : http://andrew0409.tistory.com/136


데이터의 캡슐화, 데이터 하이딩 기법, 데이터 은닉 여러 번역이 있지만 결과적으로 똑같은 말이다. 용어의 통일성을 위하여 나는 캡슐화라 칭하겠다.

그럼 데이터의 캡슐화란 무엇인가. 예를 들어 설명해 보겠다. 아래는 학생이라는 이름의 캡슐 그림



좌측은 데이터영역, 이름과 연락처가 문자열 변수로 선언되어 있고, 성적과 매력이 정수형 변수로 선언되어 있다고 하자.

우측은 인터페이스 영역, 성적을 입력하다, 연락처를 변경하다, 매력을 변경하다가 각각이 함수의 이름이다. 이것을 클래스로 설계해 보겠다.


1
2
3
4
5
6
7
8
9
10
11
12
13
class Student
{
    private:
        char name[10];
        char phoneNumber[10];
        int studyScore;
        int charmScore;
 
    public:
        void SetStudyScore(int score);
        void SetCharmScore(int score);
        void SetPhoneNumber(char* number);
};
cs

대략적으로 이와 같은 형태로 설계할 수 있을 것이다.
클래스 중간을 살펴보면 private: 라는 부분과 public: 이라는 부분이 있다. 이와 같은 것을 접근 제한자라고 한다. 나중에 자세히 다루어 보겠지만 protected: 라는 것도 있다. 다시 본론으로 돌아가서, private 에 선언되는 것은 보통 변수이며, 이는 접근 제한자에 의해 외부에서 수정을 할 수 없다. 아래는 잘못된 예

1
2
Student minsu;
minsu.studyScore = 90// 틀린예
cs

그렇다면 외부에서 성적을 변경하고 싶다면 어떻게 해야할까. public 영역에 선언된 인터페이스 함수를 이용하여 변경 할 수 있다.

1
2
3
4
5
6
7
8
Student::void SetStudyScore(int score)
{
    this->studyScroe = score; // this포인터는 이해를 돕기위해 사용했으나 생략 가능
    return;
}
 
Student minsu;
minsu.SetStudyScore(90);
cs

위와같이 SetStudyScore라는 함수가 정의된 상태에서, 함수를 통해서만 데이터를 수정 할 수 있다. 인터페이스 함수가 없다면 데이터는 수정할 수 없는것. 또한 인터페이스 함수를 사용하기 때문에 다른사람이 코드를 봐도 SetStudyScore 함수가 어떻게 설계되었는지 몰라도 함수의 이름과 전달인자 만으로 파악해서 (약간의 주석과 함께..) 기능을 실행할 수 있다는 점에서는 앞서 배운 ADT와도 연계성이 있다.



실제 외부(main 함수, 혹은 그외)에서 학생 Class에 대해사용할 수 있는 부분. 멤버변수가 존재하는 데이터 영역은 private 접근 제한자의 영향으로 사용할 수 없다.


외부에서 멤버변수를 마음대로 수정할 수 없다는 점에서, 누군가의 실수나 기타 요소에 의해서 접근을 제한해버리니 데이터가 안전하게 저장될 수 있고, ADT를 사용하기 때문에 유지보수에 용이하다. 실제로 학생수준의 코딩에서는 멤버변수가 쉽게 변경되도 크게 지장은 없으나, 규모가 큰 시스템을 짤 때에는 최대한 안전하고 정확하게 코딩해야 하기 때문에 C++ 이상의 객체지향 언어에서는 모두 데이터 캡슐화를 사용한다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함