본문 바로가기
Programming/C, C++

LV3 C++ 클래스와 객체

by Dev_카페인 2022. 9. 14.
반응형

[lv3/C++] 클래스와 객체

 

객체지향 프로그래밍의 뿌리 클래스와 객체를 알아보자. 객체라는 단어를 사전에서 찾아보면 실제 세계에 존재하거나 생각할 수 있는 것이라고 나온다. 객체지향 이론에서는 개념이나 논리와 같은 무형적인 것들도 객체로 간주하는데 프로그램을 배울 때는 개념 잡기가 힘들다. 클래스는 쉽게 말해 객체를 찍어낼 수 있는 틀이라고 할 수 있다. 과거 한 교수님은 붕어빵 틀에 빗대어 가르치시곤 했는데 지금까지도 기억나는 것을 보니 잘 빗대어 가르치셨다고 생각되지만 붕어빵 예시는 들지 않겠다.

 

스무고개라는 어릴적 놀이를 기억하는지 모르겠지만, 우리는 스무고개를 할 때 어떤 것의 특징을 묻는다. 주제가 인물이라면 나이가 몇인지, 무슨 일을 하는지, 어떤 것을 먹는지 등을 물어보고 정답을 맞출 것이다. 객체지향 언어에서도 마찬가지로 객체를 설계할 때 그 객체가 갖는 속성이나 행동들을 클래스로 정의하게 된다. 잘 설계된 클래스는 개별적인 속성들을 가진 객체를 쉽게 만들 수 있는데, 예를 들어 비슷한 속성을 가진 2개의 객체를 만든다고 하면 { 24, 한국, 홍길동, ENTP }, { 30, 한국, 전우치, ENFJ }를 클래스로 설계할 수 있을 것이다.

class 인물 {
	public :
    		int 나이;
        	int 국가;
		string 이름;
        	string MBTI;
        	void 먹기(string 음식);
}
class 클래스이름
{
	접근 지정자 :	// private, protected, public
    	멤버변수
        멤버함수
}

 

다른 예시로 몬스터 클래스를 정의하고 객체를 두개 생성하여 사용하는 방법을 확인해보자.

#include <iostream>

using namespace std;

class Monster {
private :	// 접근지정자 private : 클래스 자신 및 친구(friend)라 선언한 클래스만 접근 가능
	int health;	// 멤버변수 체력

public :	// 모든 클래스 접근 가능
	void setHealth(int h) {	// 체력 설정
		health = h;
	}
	int getHealth() {	// 현재 체력 가져오기
		return health;	// 체력 반환
	}
	void hit(int damage) {	// 체력 깍기
		health -= damage;
		cout << damage << "의 데미지를 받았습니다. 현재 체력 : " << health << endl;
		if (health <= 0) {
			cout << "죽음" << endl;
		}
	}
};

int main()
{
	Monster MonsterA;	// MonsterA 객체 생성
	Monster MonsterB;	// MonsterB 객체 생성

	MonsterA.setHealth(100);	// MonsterA 객체 체력 설정
	MonsterB.setHealth(50);		// MonsterB 객체 체력 설정

	cout << "MonsterA H = " << MonsterA.getHealth() << endl;
	cout << "MonsterB H = " << MonsterB.getHealth() << endl;

	MonsterA.hit(50);	// MonsterA 객체 체력 50 깍기

	cout << "MonsterA H = " << MonsterA.getHealth() << endl;
	cout << "MonsterB H = " << MonsterB.getHealth() << endl;

	MonsterB.hit(50);	// MonsterB 객체 체력 50 깍기

	cout << "MonsterA H = " << MonsterA.getHealth() << endl;
	cout << "MonsterB H = " << MonsterB.getHealth() << endl;

	return 0;
}

위 예시에서 A의 체력과 B의 체력을 유심히 살펴보면 알 수 있듯이 같은 클래스로 객체를 생성해도 각각 다른 값을 가지고 있게된다.

반응형