프로그래밍언어/C++

[C++] 클래스와 객체(1)

qkzkdo 2023. 9. 4. 22:15
728x90

객체지향 언어의 효시는 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

728x90