[C++] 클래스(1)-클래스란? 객체란?

김형태·2021년 5월 5일
0

C++

목록 보기
3/13
post-custom-banner
class Car
{
private:
    char	gameID[10];
    int		fuelGauge;
    int		currentSpeed;
public:
    void	showCarState(){ ... }
    void	accel(){ ... }
    void	break(){ ... }
}

1. 클래스란?

C++에서 클래스(class)란 구조체의 상위 호환으로 이해할 수 있다.
C++의 구조체는 멤버로 함수를 포함할 수 있기에, C언어의 구조체보다 좀 더 확장된 의미를 가진다.
C++에서 이러한 구조체와 클래스의 차이는 기본 접근 제어의 차이일 뿐, 나머지는 비슷하다.

1.1. 구조체와 클래스의 차이?

  • 키워드 struct를 이용해서 정의한 구조체에 선언된 변수와 함수에 별도의 접근제어 지시자를 선언하지 않으면, 모든 변수와 함수는 public으로 선언된다.
  • 키워드 class를 이용해서 정의한 구조체에 선언된 변수와 함수에 별도의 접근제어 지시자를 선언하지 않으면, 모든 변수와 함수는 private으로 선언된다.

C++에서는 구조체도 접근제어 지시자의 선언이 가능하고, 그 의미도 동일하다. 그렇다면 접근제어 지시자는 무엇일까?

1.2. 접근 제어 지시자

private, protected, public

클래스 내에 선언된 변수는 기본적으로 클래스 내에 선언된 함수에서만 접근이 가능하다. 하지만 접근 제어 지시자를 통해 접근 허용범위를 설정할 수 있다.

  • public: 어디서든 접근 허용
  • protected: 상속관계에 놓여있을 때, 유도 클래스에서의 접근 허용
  • private: 클래스 내(클래스 내에 정의된 함수)에서만 접근 허용

맨 위의 코드에 Car라는 클래스가 정의되어 있다. 만약 Car car;를 선언했다면, car에서 private 멤버 변수인 gameIDfuelGauge에 들어있는 값을 직접 바꿀 수는 없게 되는 것이다.
멤버 함수인 showCarState는 호출할 수 있다.

int main(void)
{
	Car	car;
    
    car.fuelGauge = 50; // (X)
    car.showCarState(); // (O)
}

2. 객체? 용어 정리

C를 해오면서 데이터를 저장할 수 있는 메모리 공간을 모두 변수라고 칭했지만, 구조체와 클래스는 변수의 성격만 지니는 것이 아니다. 그러므로 변수라는 표현을 대신해서 '객체(Object)'라는 표현을 사용한다.

C++ 은 '객체 지향' 언어이다. C 언어에서는 필요한 행위를 바로 함수화한다. 하지만 C++의 경우에는 객체를 만들며 데이터의 공통점과 의미 없는 행위를 구분하게 되어 효율적으로 작업할 수 있다. 또한 프로그래밍 작업이 '객체를 만드는 작업'과 '객체를 사용하는 작업'으로 나뉘어 작업할 때 고민하는 범위가 줄어드는 효과가 있다.

또한 다른 프로그램에서 동일한 행위(기능)이 필요한 경우 그대로 다시 사용할 수 있으므로 개발 속도에도 영향을 미친다고 할 수 있다.

앞으로 C++을 공부하면서 객체, 메소드, 인스턴스 등 C언어에서는 보지 못했던 단어들이 나올 것이다. 모르는 단어가 나올 때마다 찾는 것도 좋지만, 먼저 자주 나올 용어들을 간단하게라도 정리하자.

  • 객체: 하나 이상의 상태 정보(데이터)와 하나 이상의 행동(기능)으로 이뤄진 하나의 꾸러미(ex. 클래스)
  • 메소드: 클래스의 멤버 함수(즉, 멤버 함수 == 메소드)
  • 인스턴스: 선언된 해당 클래스 타입의 객체. 즉, 메모리에 대입된 객체

('객체'라는 개념이 잘 와닿지 않아서 이곳 저곳을 많이 참고했다. Object - 객체란 무엇인가? -참고: C와 C++의 차이점)

profile
steady
post-custom-banner

0개의 댓글