[C++] 클래스와 객체(1)
객체지향 언어의 효시는 1967년에 발표된 Simula 67이다. 그 이름을 통해 예상할 수 있는 것처럼 Simula는 시뮬레이션(simulation)을 위해 개발된 언어이다. 시뮬레이션이란 현실세계에 존재하는 여러 가지 개체와 이들이 상호작용하는 과정을 컴퓨터를 통해 가상으로 수행하는 것이다. 이처럼 객체지향 개념의 태동이 시뮬레이션과 관계가 있다는 점은 객체지향을 이해하는 데 큰 의미가 있다. 즉, 분석의 출발점이 '어떠한 프로세스를 통해 작업을 수행하는가'가 아니라 '현실세계를 시뮬레이션하는 컴퓨터 내의 가상세계 안에 어떠한 개체들이 존재하는가'이다.
시뮬레이션의 대상이 되는 개체들은 각각 정해진 동작을 하며, 그 과정에서 개체 각각의 내부 상태가 변화할 것이다.
행위와 데이터를 결합하여 놓은 것이 객체지향 프로그래밍의 가장 기본적인 개념인 객체(object)이다.
클래스 선언문의 형식
class ClassName {
가시성_지시어_1:
데이터 멤버 또는 멤버함수 리스트;
가시성_지시어_2:
데이터 멤버 또는 멤버함수 리스트;
.....
};
가시성 지시어는그 다음에 나열되는 데이터 멤버나 멤버함수들이 외부에 공개되는 범위를 나타낸다.
private, protected, public 세 가지 종류가 있다.
가시성 지시어 | 공개되는 범위 |
private | 소속 클래스의 멤버함수 친구 클래스의 멤버함수 및 친구함수 |
public | 전 범위 |
객체의 정의 및 사용
ClassName objName;
ClassName objName1, objName2, ...;
생성자
생성자는 객체가 생성될 때 수행할 작업을 정의하는 특수한 멤버함수로서, 객체를 정의하는 문장에 의해 자동적으로 호출된다.
생성자의 선언
class ClassName {
....
public:
className(fParameterList) { //생성자
...
}
...
};
초기화 리스트
생성자가 하는 주요 작업으로는 데이터 멤버에 적절한 초깃값을 넣는 것이다.
생성자에서 데이터 멤버의 값에 초깃값을 대입하는 것을 초기화 리스트를 이용하여 간결하게 표현할 수 있다.
초기화 리스트는 함수의 머리에 콜론(:)을 기입하고 '변수명{초깃값}' 또는 '변수명(초깃값)' 형태로 초깃값을 지정한 것이다.
class Counter { //클래스 Counter의 선언 시작
int value; //private 데이터 멤버
public: //public 멤버함수
Counter() : vlaue{ 0 } {} //생성자
...
};
소멸자
소멸자(destructor)는 객체가 소멸될 때 자동으로 실행되는 함수로서, 객체의 소멸에 따라 필요한 제반 처리를 하기 위한 코드가 포함된다.
class ClassName {
....
public:
....
~ClassName(){ //소멸자
....
}
};
- 소멸자는 클래스의 이름에 '~'를 붙여 선언한다.
- return 명령으로 값을 반환할 수 없으며, 함수 머리에 반환할 자료형을 표시하지 않는다.
- 매개변수를 포함할 수 없다.
- 소멸자는 다중정의할 수 없으며, 클래스에 하나만 정의한다.
- public 멤버로 선언하는 것이 일반적이다.
- 상속을 통해 파생 클래스를 정의하는 경우 virtual을 지정하여 가상함수가 되도록 하는 것이 좋다.
출처 : 전중남·이병래. 「C++프로그래밍」. 한국방송통신대학교출판문화원. 2020