class Car
{
private:
char gameID[10];
int fuelGauge;
int currentSpeed;
public:
void showCarState(){ ... }
void accel(){ ... }
void break(){ ... }
}
C++에서 클래스(class)란 구조체의 상위 호환으로 이해할 수 있다.
C++의 구조체는 멤버로 함수를 포함할 수 있기에, C언어의 구조체보다 좀 더 확장된 의미를 가진다.
C++에서 이러한 구조체와 클래스의 차이는 기본 접근 제어의 차이일 뿐, 나머지는 비슷하다.
C++에서는 구조체도 접근제어 지시자의 선언이 가능하고, 그 의미도 동일하다. 그렇다면 접근제어 지시자는 무엇일까?
private, protected, public
클래스 내에 선언된 변수는 기본적으로 클래스 내에 선언된 함수에서만 접근이 가능하다. 하지만 접근 제어 지시자를 통해 접근 허용범위를 설정할 수 있다.
맨 위의 코드에 Car라는 클래스가 정의되어 있다. 만약 Car car;
를 선언했다면, car
에서 private 멤버 변수인 gameID
나 fuelGauge
에 들어있는 값을 직접 바꿀 수는 없게 되는 것이다.
멤버 함수인 showCarState
는 호출할 수 있다.
int main(void)
{
Car car;
car.fuelGauge = 50; // (X)
car.showCarState(); // (O)
}
C를 해오면서 데이터를 저장할 수 있는 메모리 공간을 모두 변수라고 칭했지만, 구조체와 클래스는 변수의 성격만 지니는 것이 아니다. 그러므로 변수라는 표현을 대신해서 '객체(Object)'라는 표현을 사용한다.
C++ 은 '객체 지향' 언어이다. C 언어에서는 필요한 행위를 바로 함수화한다. 하지만 C++의 경우에는 객체를 만들며 데이터의 공통점과 의미 없는 행위를 구분하게 되어 효율적으로 작업할 수 있다. 또한 프로그래밍 작업이 '객체를 만드는 작업'과 '객체를 사용하는 작업'으로 나뉘어 작업할 때 고민하는 범위가 줄어드는 효과가 있다.
또한 다른 프로그램에서 동일한 행위(기능)이 필요한 경우 그대로 다시 사용할 수 있으므로 개발 속도에도 영향을 미친다고 할 수 있다.
앞으로 C++을 공부하면서 객체, 메소드, 인스턴스 등 C언어에서는 보지 못했던 단어들이 나올 것이다. 모르는 단어가 나올 때마다 찾는 것도 좋지만, 먼저 자주 나올 용어들을 간단하게라도 정리하자.
('객체'라는 개념이 잘 와닿지 않아서 이곳 저곳을 많이 참고했다. Object - 객체란 무엇인가? -와 참고: C와 C++의 차이점)