C++ 강좌 7편. 클래스(class)
1. 클래스(class)
클래스란 무엇일까요? 다른 언어를 공부하시다가 '클래스(class)'라는 말을 들어보신 분도, 그렇지 않은 분도 계실겁니다. C++의 클래스는, 쉽게 말하자면 C의 구조체에서 확장된 C++의 구조체의 또다른 이름입니다. 클래스는 변수와 함께 함수까지도 포함시킬 수 있습니다. 그럼, C++의 구조체와 클래스는 다른게 무엇인가요? 라는 궁금증을 품고 계시는 분들도 있을텐데, 구조체와 클래스의 차이점은 기본 접근 제한자의 차이일뿐, 그 이상 다른게 없습니다. 구조체 같은 경우는 기본 접근 제한자가 public이며, 클래스의 기본 접근 제한자는 private으로 제한되어 있습니다. '둘다 동일한 기능을 하면서도 왜 사라지지 않을까요?'에 대한 답은, C언어와의 하위 호완성을 위해서 남겨두었다고 생각하시면 됩니다.
우리가 C언어에서 보았던 구조체 예제에서, struct를 class로만 바꾸어 주어도 됩니다. 조심하셔야 할 부분은 기본 접근자가 달라, 무작정 클래스에 접근하려하면 컴파일러가 에러를 내보낼 수 있습니다. 자, 이제 객체 지향 프로그래밍(OOP, Object-Oriented Programming)의 시작입니다. C언어에서는 구조체였다면, C++에서는 클래스라고 할 수 있습니다. 이제는 클래스 변수를 만든다는 것을 '객체(object)'를 생성한다라고 표현하도록 하겠습니다. 잠시 객체 지향 프로그래밍에 대해 간단히 알아보도록 할까요?
2. 객체 지향 프로그래밍(OOP)
사실, 객체 지향 프로그래밍은 이것만 다루는 책이 있을정도로 상당히 양이 방대합니다. 이번 강좌에서는 간단히 객체 지향 프로그래밍이 무엇인지에 대해 알고 넘어가보도록 하겠습니다. 객체 지향 프로그래밍에선 객체(Object)가 중심이며, 모든 데이터를 객체로 취급합니다.
객체(Object)는 '물건, 물체'라는 뜻을 가지고 있습니다. 우리 눈앞에 보이는 모니터, 마우스, 키보드, 모뎀, 노트북 등 모든게 객체라고 말할 수 있습니다. 심지어 자신 조차도 객체입니다. 이 객체 지향 프로그래밍은, 실세계의 물체, 물건의 행동(behavior)과 상태(state)를 실체화 시키는 형태의 프로그래밍입니다. 전화기를 예로 들면 전화기의 색은 상태이며, 전화를 걸거나 전화를 끊거나 하는 등의 동작은 행동이 됩니다. 또, 자동차를 예로 들자면 자동차의 속도 등이 상태가 될 수 있고, 속도를 올리거나 속도를 내리거나, 브레이크를 밟는 등의 동작은 행동이 됩니다.
위에서 객체는 상태와 행동으로 이루어진다고 했었습니다. 그렇다면 클래스는 무엇일까요? 쉽게 예를 들면, 우리가 붕어빵을 만들어내기 위해서는 붕어빵을 찍어낼 틀이 필요합니다. 여기서 붕어빵을 찍어낼 틀은 클래스라고 할 수 있습니다. 붕어빵 틀(클래스)은 하나만 있어도 붕어빵(객체)를 여러개 찍어낼 수 있습니다. 이해되시나요?
3. 클래스 살펴보기
자, 이제는 클래스를 한번 살펴보도록 하겠습니다. 아래는 클래스의 정의 형식입니다.
class 클래스명 { // 멤버 변수(상태), 멤버 함수(행동).. };
클래스는 상태와 행동 즉, 멤버 변수와 멤버 함수로 이루어집니다. 마지막에 보시면 세미콜론(;)이 존재하는데, 클래스 정의 뒤에 세미콜론을 붙여주어야만 합니다. 아래 예제를 한번 보시죠.
#include <iostream> using namespace std; class student { private: char * name; int age; char * hobby; public: void ShowInfo(); void SetInfo(char * _name, int _age, char * _hobby); void Study(); void Sleep(); }; void student::ShowInfo() { cout << "이름: " << name << ", 나이: " << age << ", 취미: " << hobby << endl; } void student::SetInfo(char * _name, int _age, char * _hobby) { name = _name; age = _age; hobby = _hobby; } void student::Study() { cout << "공부!" << endl; } void student::Sleep() { cout << "잠!" << endl; } int main() { student stu; stu.SetInfo("김철수", 16, "컴퓨터 게임"); stu.ShowInfo(); while(true) { stu.Study(); stu.Sleep(); } return 0; }
결과:
이름: 김철수, 나이: 16, 취미: 컴퓨터 게임
잠!
공부!
잠!
공부!
잠!
..
'프로그래밍 관련 > C++' 카테고리의 다른 글
C++ 강좌 9편. Bool, Inline (8) | 2012.11.09 |
---|---|
C++ 강좌 8편. 생성자와 소멸자(Constructor and Destructor) (27) | 2012.11.08 |
C++ 강좌 6편. 구조체의 확장 (28) | 2012.11.01 |
C++ 강좌 5편. new, delete [최근 수정 2017.10.10] (14) | 2012.10.28 |
C++ 강좌 4편. 함수 오버로딩(Function Overloading) [최근 수정 2017.10.10] (19) | 2012.10.28 |