프로그래밍 언어/C & C++ 정리

클래스

뽀또치즈맛 2023. 2. 5. 18:39
추상화( = Abstraction )

 

데이터 추상화란 가장 본질적이고 중요한 OOP(= 객체지향프로그램) C++ 언어의 특색 중 하나이다.

추상화란 의미는 나타낸다 오롯이 중요한 정보는 표시하고, 세부 사항은 숨기는 것을 의미한다.

데이터 추상화를 예를 들면 사람이 차를 운전하는 실제 사례를 예시로 들어보겠다.

사람이 엑셀레이터를 밟으면 차의 속도가 빨라지거나
브레이크를 밟으면 차가 멈춘다는 것만 알고 있을 뿐,

실제로 액셀러레이터를 밟으면 어떻게 속도가 빨라지는지,

차의 내부 메커니즘이나 차의 엑설레이터, 브레이크 등의 구현에 대해서는 알지 못한다.

이것이 바로 추상화이다.

 

1. Data Abstraction 데이터 추상화 

이 타입은, 오직 필수적인 정보에 대해서만 보여주고 불필요한 정보는 숨긴다.

 

2. control Abstraction 제어 추상화

이 유형은, 오직 접근하지 않도록 합의된 필요이상의 정보만을 보여준다.

 

 

캡슐화 (= Encapsulation )

 

C++ 언어에서의 캡슐화는 다음과 같이 정의된다. 데이터와 정보를 하나의 단위로 묶어두는 것과 같다.

(= Encapsulation in C++ is defined as the wrapping up of data and information in a single unit. )

OOP( = Object Oriented Programming )안에서는 캡슐화란

함께 묶여 있는 데이터와 함수와 같이와 다루어지는 것으로 정의된다.

말 그대로 랩핑되어 쌓여있는 알약과 같이 정보가 한데 모여 랩핑되어있는 캡슐화와 같다.

 

쌓아 넣어 중요한 정보를 보호함으로써 캡슐화의 기능을 하는 것이다.

이는 곧 데이터 은닉이며,

(= 데이터 은닉이란, 데이터를 클래스의 private 부분에 넣는 것이 캡슐화의 한 예이다.)

캡슐화의 특징이다.

 

캡슐화의 기능은 다음과 같다.

 

1. 우리는 클래스에 어떠한 함수에도 곧바로 직접적으로 접근할 수 없다.

또한 우리가 어떠한 객체에 접근하려면 클래스의 멤버 변수를 이용하려면 함수를 통해서 접근해야만 한다.

= 우회적 접근

 

2. 클래스 내에서 우리가 만든 함수( = 메서드 )는 멤버 변수만을 사용해야 하며,

이를 캡슐화라고 부른다.

= 우회적 접근

 

3. 클래스의 멤버 변수를 사용하는 클래스 내 함수(= 메서드 )를 만들지 않으면 이를

캡슐화라고 하지 않는다.

 

= 멤버 변수를 사용하지 않는 메서드는 캡슐화가 아니다. 

= 우회적 접근을 하지 않는 메서드는 캡슐화라고 하지 않는다.

= 메서드라고 다 캡슐화가 아니란 말이다.

 

4. 캡슐화를 사용하면 데이터 보안에 대한 이점을 얻어갈 수 있으며,

데이터를 구성하는 멤버에 대하여 우리는 좀 더 쉽게 수정할 수 있다.

 

for ex)

 

// C++ program to demonstrate
// Encapsulation
#include <iostream>
using namespace std;
 
class Encapsulation {
private:
    // Data hidden from outside world
    int x;
 
public:
    // Function to set value of
    // variable x
    void set(int a) { x = a; }
 
    // Function to return value of
    // variable x
    int get() { return x; }
};
 
// Driver code
int main()
{
    Encapsulation obj;
    obj.set(5);
    cout << obj.get();
    return 0;
}

 

Explanation :

위 프로그램은, 변수 x를 프라이빗으로 설정한다. 

이 변수는 오직 클래스 내부에 있는 함수( = 메서드 ) get()과 set()으로만 접근 가능하다.

이와같은 것을 우리는 이렇게 말할 수 있다.

변수 x와 함수 get(), set() 들은 모두 단지, 캡슐화에 얽메여있는 것에 불과하다라고 말이다.

 

캡슐화에서 접근 지정자의 역할


접근 지정자는 클래스 멤버 함수 및 데이터 멤버에 대한

접근을 제한하여 C++ 프로그램에서 데이터 숨기기를 용이하게 합니다.

C++에는 세 가지 유형의 액세스 지정자가 있습니다:

Private
Protected
Public


기본적으로 클래스의 모든 데이터 멤버와 멤버 함수는 컴파일러에 의해 비공개로 설정됩니다.

 

고려할 사항으론,

 

위 예시에서 보았듯이, 접근 지정자를 사용하는 것은 C++언어에서 캡슐화를 구현하는 데 있어

매우 중요한 역할을 한다.

이러한 캡슐화의 과정으로는 두 가지 단계로 나뉘게 되는데

 

모든 데이터와 메서드를 하나의 Unit으로 캡슐화 하는 클래스를 만드는 것이고

접근 지정자를 사용하여 관련 데이터를 숨기는 것이다.

 

클래스 메서드의 사용 예시는 다음과 같다

void Stock :: update (double price)

멤버 함수의 정의는 리턴형과 매개변수를 가질 수 있다.

 

 

 

Friend 함수

C++에서 프렌드 함수는 friend 키워드를 사용하여 다음과 같이 선언합니다.

원형

friend 클래스이름 함수이름(매개변수목록);

 

이렇게 선언된 프렌드 함수는 클래스 선언부에 그 원형이 포함되지만, 클래스의 멤버 함수는 아닙니다.

이러한 프렌드 함수는 해당 클래스의 멤버 함수는 아니지만, 멤버 함수와 같은 접근 권한을 가지게 됩니다.