..

Search

46) 접근 제어

46) 접근 제어

접근 제어


정보 은닉(data hiding)

C++에서 구조체의 모든 멤버는 외부에서 언제나 접근할 수 있습니다.

하지만 클래스는 객체 지향 프로그래밍의 기본 규칙 중 하나인 정보 은닉에 대해서도 생각해야만 합니다.

 

정보 은닉(data hiding)이란 사용자가 굳이 알 필요가 없는 정보는 사용자로부터 숨겨야 한다는 개념입니다.

그렇게 함으로써 사용자는 언제나 최소한의 정보만으로 프로그램을 손쉽게 사용할 수 있게 됩니다.


접근 제어(access control)

C++에서는 이러한 정보 은닉을 위해 접근 제어(access control)라는 기능을 제공하고 있습니다.

접근 제어란 접근 제어 지시자를 사용해 클래스 외부에서의 직접적인 접근을 허용하지 않는 멤버를 설정할 수 있도록 하여, 정보 은닉을 구체화하는 것을 의미합니다.

 

C++에서는 다음과 같은 세 가지의 접근 제어 지시자를 제공합니다.

 

1. public

2. private

3. protected

 

클래스의 기본 접근 제어 권한은 private이며, 구조체 및 공용체는 public입니다.

public 접근 제어 지시자

public 접근 제어 지시자를 사용하여 선언된 클래스 멤버는 외부로 공개되며, 해당 객체를 사용하는 프로그램 어디에서나 직접 접근할 수 있습니다.

따라서 public 멤버 함수는 해당 객체의 private 멤버와 프로그램 사이의 인터페이스(interface) 역할을 하게 됩니다.

프로그램은 이러한 public 멤버 함수를 통해 해당 객체의 private 멤버에도 접근할 수 있습니다.

 

다음 그림은 클래스의 public 멤버에 접근할 수 있는 영역을 나타냅니다.

public 접근 제어 지시자

 

C++ 클래스 선언 시 public 접근 제어 지시자는 다음과 같이 지정할 수 있습니다.

예제

class Book

{

public:

    string title_;       // 책의 제목

    int total_page_;     // 총 페이지

    double percent_;     // 해당 책을 읽은 정도

    void Move(int page); // 현재 페이지를 전달받은 페이지로 이동시킴.

    void Open();         // 현재 페이지로 책을 엶.

    void Read();         // 현재 페이지에서 다음 페이지로 넘어감.

};


private 접근 제어 지시자

private 접근 제어 지시자를 사용하여 선언된 클래스 멤버는 외부에 공개되지 않으며, 외부에서 직접 접근할 수도 없습니다.

프로그램은 private 멤버에 직접 접근할 수 없으며, 해당 객체의 public 멤버 함수를 통해서만 접근할 수 있습니다.

 

클래스의 기본 접근 제어 권한은 private로 설정되어 있으므로, 클래스 선언 시 private 접근 제어 지시자는 생략할 수 있습니다.

일반적으로 private 멤버는 public 인터페이스를 직접 구성하지 않는 클래스의 세부적인 동작을 구현하는 데 사용됩니다.

 

다음 그림은 클래스의 private 멤버에 접근할 수 있는 영역을 나타냅니다.private 접근 제어 지시자

 

C++ 클래스 선언 시 private 접근 제어 지시자는 다음과 같이 지정할 수 있습니다.

예제

class Book {

private:                // 생략 가능함.

    int current_page_;  // 현재 페이지

    void set_percent(); // 해당 책을 읽은 정도를 구함.

public:

    string title_;

    int total_page_;

    double percent_;

    void Move(int page);

    void Open();

    void Read();

};


protected 접근 제어 지시자

C++ 클래스는 private 멤버로 정보를 은닉하고, public 멤버로 사용자나 프로그램과의 인터페이스를 구축합니다.

여기에 파생 클래스(derived class)와 관련된 접근 제어 지시자가 하나 더 존재합니다.

protected 멤버는 파생 클래스에 대해서는 public 멤버처럼 취급되며, 외부에서는 private 멤버처럼 취급됩니다.

 

protected 멤버에 접근할 수 있는 영역은 다음과 같습니다.

 

1. 이 멤버를 선언한 클래스의 멤버 함수

2. 이 멤버를 선언한 클래스의 프렌드

3. 이 멤버를 선언한 클래스에서 public 또는 protected 접근 제어로 파생된 클래스

 

다음 그림은 클래스의 protected 멤버에 접근할 수 있는 영역을 나타냅니다.protected 접근 제어 지시자

 

파생 클래스에 대한 더 자세한 사항은 C++ 파생 클래스 수업에서 확인할 수 있습니다.

 

C++ 파생 클래스 수업 확인 =>


연습문제