객체는 캡슐화
캡슐화(encapsulation)란?
객체의 구성 요소들을 캡슐로 싸서 보호하고 볼 수 없게 하는 것으로, 객체의 가장 본질적인 특징입니다.
보통 붕어빵을 예시로 많이 듭니다.
C++에서의 객체는 멤버 변수와 멤버 함수로 구성 됩니다.
멤버 변수들은 객체의 상태(state)를 나타내는 속성들이며,
멤버 함수들은 행동(behavior)을 구현한 코드들입니다.
외부에서 C++ 객체에게 어떤 작업을 요청하거나 상태를 알고자 할 때, 객체 내에 공개된 멤버 함수를 호출합니다.
클래스는 객체를 정의하는 설계도
붕어빵 예시처럼 C++ 객체는 C++ 클래스라는 틀에서 찍어내어, 멤버 변수 메모리와 멤버 함수 코드를
실제 가지고 C++프로그램이 실행되는 동안 실존하는 실체 혹은 인스턴스(isntance)입니다. 클래스는 컴파일이 끝나면 사라지지만, 프로그램은 실행 중에 객체를 생성하여 멤버 변수에 값을 저장하기도 하고 멤버 함수 코드를 실행하기도 합니다.
클래스 만들기
//클래스 선언부
class Circle
{
public:
int radius; //멤버변수
double getArea();//멤버함수
};
//클래스 구현부
double Circle::getArea()
{
return 3.14 * radius * radius;
}
위 코드는 반지름 정보를 가지고 있는 변수와 넓이를 반환하는 함수를 가지고 있는 Circle 클래스입니다.
접근 지정자, public
클래스의 일부 멤버들은 다른 클래스와의 통신을 위해 외부에 공개하기도 합니다. 멤버를 외부에 공개하려면, 다음과 같이 public 접근 지정자로 선언합니다.
class Circle
{
public:
...
};
public이외의 private, protected 총 3가지 종류가 존재합니다.
private은 외부에서 전혀 접근할 수 없으며 접근 지정의 default값은 private 입니다.
protected 접근 지정은 상속 관계에서 적용됩니다.
구현부에서 double Circle :: getArea()라고 되어있는데 ::의 뜻은 범위 지정 연산자로 클래스 이름과 함께 멤버 함수를 기술하는 방법 입니다. 이것은 같은 이름의 함수가 다른 클래스에 존재할 수 있기 때문입니다.
생성자
C++객체를 생성할 때 객체를 초기화 할 수 있습니다. 클래스는 개체가 생성될 때 자동으로 실행되는 생성자(constructor)라는 특별한 멤버 함수를 통해 객체를 초기화 합니다. 한 클래스에 여러 개의 생성자를 둘 수 있으나, 이 중 하나만 실행 됩니다.
class Circle
{
//2개의 생성자 함수 선언
Circle();
Circle(int r);
};
//매개 변수가 없는 생성자
Circle::circle()
{
...
}
//매개 변수를 가진 생성자
Circle::Circle(int r)
{
...
}
생성자의 특징
- 생성자의 목적은 객체가 생성될 때 필요한 초기 작업을 위함
- 생성자 함수는 오직 한 번만 실행된다
- 생성자 함수의 이름은 클래스 이름과 동일하게 작성되어야 한다
- 생성자 함수의 원형에 리턴 타입을 선언하지 않는다
- 생성자는 중복 가능하다
소멸자
객체 생성시 생성자 함수가 실행되는 것처럼 객체 소멸시 소멸자 함수가 실행됩니다.
소멸자(destructor)는 객체가 소멸되는 시점에서 자동으로 호출되는 클래스의 멤버 함수 입니다.
class Circle {
Circle();
Circle(int r);
...
~Circle(); //소멸자 함수 선언, 소멸자는 오직 하나만 존재
};
Circle::~Circle()
{
...
}
소멸자의 특징
- 소멸자의 목적은 객체가 사라질 때 필요한 마무리 작업을 위함
- 소멸자의 이름은 클래스 이름 앞에 ~를 붙인다
- 소멸자는 리턴 타입이 없으며 어떤 값도 리턴해서도 안된다
- 소멸자는 오직 한 개만 존재하며 매개 변수를 가지지 않는다
- 소멸자가 선언되어 있지 않으면 기본 소멸자가 자동으로 생성된다
'C++' 카테고리의 다른 글
C++ 프로그래밍의 기본 요소 (0) | 2023.07.11 |
---|