본문 바로가기

C++ 기초 1

[C++] 2-1 클래스(Class) 사용법 및 예제

클래스 (Class)

   클래스는 배열처럼 많은 데이터를 처리하기 위해 사용된다. 배열은 동일한 데이터형을 갖는 변수들의 집합이지만 클래스는 다양한 데이터형을 갖는 변수들의 집합이다. 이때 클래스 내의 변수들을 데이터 멤버라 부른다. 또한, 클래스의 멤버로 함수를 사용할 수 있는데, 이를 멤버함수라고 부른다. 멤버 함수는 클래스 내의 데이터 멤버를 참조 및 처리하기 위해 활용된다. 

   class라는 예약어로 컴파일러에게 알려주어 클래스를 정의한다. 클래스 이름은 templete을 나타내는 이름으로 클래스의 형태를 컴파일러에게 알려준다. 클래스 이름은 변수가 아니라 일종의 데이터형이며 임의로 정할 수 있다. 클래스에 포함되는 변수를 데이터 멤버라 부르고, 함수를 멤버 함수라고 부른다. 

   클래스를 정의할 때 각 멤버둘을 private 멤버나 public 멤버로 지정할 수 있다 private로 지정한 멤버는 클래스 내부에서만 사용할 수 있고, 외부에서는 사용이 불가능하다. public으로 지정된 멤버는 클래스 외부에서도 사용할 수 있다. 일반적으로 데이터 멤버는 private로 지정하고 멤버 함수는 public으로 지정해서 사용한다. 

   C++는 객체 지향 프로그래밍(object orient programming) 개발 방식이다. 프로그램에서 객체(object)란 데이터 멤버와 멤버 함수가 하나의 단위로 이루어진 것을 말한다. "객체 지향" 사고방식은 정보(데이터)와 행동/기능(함수)을 분리하지 않고 하나의 단위로 생각하는 것이다. 즉, 객체 지향 프로그래밍은 "데이터 멤버"와 "멤버 함수"를 하나의 단위로 포함하는 object를 중심으로 프로그래밍하는 방법을 말한다.  

   배열을 사용하는 경우 배열 요소를 참조하려면 []안에 해당 배열의 위치를 기입하면 되었다. 클래스를 사용하는 경우, public으로 지정된 멤버들을 해당 클래스의 외부에 참조하기 위해서는 도트 연산자(dot operator)를 사용한다. 자세한 내용은 아래 예제에서 확인할 수 있다.

 
예제 1
#include <iostream>
using namespace std;

class child {
private:
	char *name;		//private 데이터 멤버
	int age;		//private 데이터 멤버
	int height;		//private 데이터 멤버
public:
	void sub();		//public 멤버 함수 선언
};
void child::sub()	//public 멤버 함수 정의
{
	name = (char*) "Hong";		//cont char -> char로 변환
	age = 6;
	height = 125;
	cout << "name=" << name << endl;
	cout << "age=" << age << endl;
	cout << "height=" << height << endl;
}

int main()
{
	child x;		//갹체(object) 선언
	x.sub();		//멤버함수 호출
	return 0;
}
결과
name=Hong
age=6
height=125
※ 데이터 멤버 name, age, height는 private 멤버로 지정되었으므로 클래스 외부에서 참조가 불가능하다. 즉 main() 함수에서 x.name, x.age, x.height 형태로 데이터 멤버들을 참조할 수 없다. 이들 데이터 멤버들은 오직 public에 속한 멤버 함수의 sub()에서만 직접 참조할 수 있다.
※ 멤버 함수 sub()은 public 멤버로 지정되었으므로 클래스 외부에서 참조할 수 있다. 즉, main()함수에서 x.sub()의 형태로 사용할 수 있다. 
예제 2
#include <iostream>
using namespace std;

class child {
private:
	char* name;
	int age;
	int height;
public:
	void sub(const char* n, int a, int h);
};
void child::sub(const char* n, int a, int h)
{
	name = (char*) n;
	age = a;
	height = h;
	cout << "name=" << name << endl;
	cout << "age=" << age << endl;
	cout << "height=" << height << endl;
}

int main()
{
	child x;
	x.sub("Hong", 6, 125);
	return 0;
}
결과
name=Hong
age=6
height=125
※ 멤버 함수 sub()에 매개변수가 있는 것을 제외하고는 예제 1과 동일하다. 멤버 함수를 호출할 때 매개변수가 전달되며, 클래스 데이터 멤버들의 값을 초기화하고 있다.
참고

1. 장인성 외 5인, (초보자도 쉽게 따라 할 수 있는) C++프로그래밍, 광문각, 2017.02.13