반응형
클래스란?
- 쉽게 말하자면 C의 구조체에서 확장된 C++의 구조체의 또 다른 이름이다.
- 클래스는 변수와 함께 함수까지도 포함시킬 수 있다.
- 그러면 구조체와 클래스의 차이점이 무엇일까?
- 구조체와 클래스의 차이점은 기본 접근 제한자의 차이일뿐, 그 이상 다른 게 없다.
- 구조체 같은 경우는 기본 접근 제한자가 public이며, 클래스의 기본 접근 제한자는 private으로 제한되어 있다.
- ‘둘다 동일한 기능인데 왜 사라지지 않아’ 라는 질문 → C언어와의 하위 호환성을 위해서 남겨둠.
- 우리가 C언어에서 보았던 구조체 예제에서, struct를 class로만 바꾸어 주어도 됨.
- 조심해야할 부분 → 기본 접근자가 다름, 무작정 클래스에 접근하려하면 컴파일러가 에러를 내보낼 수도 있다.
이제 객체지향 프로그래밍(OOP, object-Oriented Programming)의 시작
→ C언어에서는 구조체였다면, C++에서는 클래스라고 할 수 있다.
이제 클래스 변수를 만든다는 것을 ‘객체(object)’를 생성한다 라고 하자
객체 지향 프로그래밍이란?
- 객체 지향 프로그래밍은 이것만 다루는 책이 있을 정도로 양이 방대함 → 간단하게 보고 가자
- 객체 지향 프로그래밍에선 객체(object)가 중심이며, 모든 데이터를 객체로 취급한다.
객체 → ‘물건, 물체’ 라는 뜻을 가지고 있다.
우리 눈앞에 보이는 모니터, 마우스, 키보드, 모뎀, 노트북 등 모든게 객체라고 말할 수 있다. 심지어 자신 조차도 가능.
- 객체 지향 프로그래밍은 실세계의 물체, 물건의 행동(behavior)과 상태(state)를 실체화 시키는 형태의 프로그래밍이다.
- 전화기를 예로 들자 → 전화기의 색은 상태이며, 전화를 걸거나 전화를 끊거나 하는 등 동작은 행동이 됨.
- 자동차를 에로 들자 → 자동차의 속도 등이 상태가 될 수 있으며, 속도를 올리거나 속도를 내리거나 브레이크를 밟는 등의 동작은 행동이 됨.
객체는 상태와 행동이라고 했는데 클래스는 무엇일까?
- 우리가 붕어빵을 만들어내기 위해 붕어빵을 찍어낼 틀이 필요함. → 여기서 붕어빵을 찍어낼 틀은 클래스라고 할 수 있다. → 붕어빵 틀(클래스) 하나만 있어도 붕어빵(객체)를 여러개 찍어낼 수 있다.
클래스를 살펴보자
클래스 정의 형식
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;
}
- 5행 →클래스 정의 → 클래스 안에 private로 제한된 name, age, hobby 멤버 변수, public로 제한된 showinfo, setinfo, sleep 멤버 함수 존재
- private로 제한되면 외부에서 접근할 수가 없다.
- stu란 ‘객체’가 만들어짐.
인스턴스란?
- 인스턴스 객체의 또 다른 표현임.
- 객체 지향 프로그래밍에서 객체를 실제로 구성한 것, 즉 어떤 메모리 공간에 구현된 실체를 말함.
- 객체? == 객체는 어떠한 대상이나 개념을 하나의 단위로 묶어내는 것, 프로그램의 독립적인 부품을 말함.
- 학생(student)이란 클래스가 존재하고 초등학교 3학년인 철수와, 초등학교 4학년인 영희가 있다고 할 때
- 철수는 학생 클래스의 인스턴스다, 철수는 학생 객체이다. 라고 말할 수 있다
- 객체 = 인스턴스는 아님.
선언 객체→ 클래스 → 상태와 행동(멤버 변수, 멤버 함수)
반응형
'C++ > C++ 클래스, 생성자 초기화 리스트' 카테고리의 다른 글
생성자 초기화 리스트 (0) | 2023.12.01 |
---|---|
this (2) | 2023.11.30 |
생성자, 소멸자 (2) | 2023.11.30 |
private, public (0) | 2023.11.30 |