C++/C++ 클래스, 생성자 초기화 리스트

클래스

재윤 2023. 11. 30. 17:27
반응형

클래스란?

  • 쉽게 말하자면 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++ 강좌 7편. 클래스(class)

 

C++ 강좌 7편. 클래스(class)

1. 클래스(class) 클래스란 무엇일까요? 다른 언어를 공부하시다가 '클래스(class)'라는 말을 들어보신 분도, 그렇지 않은 분도 계실겁니다. C++의 클래스는, 쉽게 말하자면 C의 구조체에서 확장된 C++

blog.hexabrain.net

[C++] 클래스와 객체란 무엇인가?

 

[C++] 클래스와 객체란 무엇인가?

기말고사 대비 겸 수업에서 배운 클래스와 객체에 대해 정리해보았다. 0. 객체지향 프로그래밍 클래스와 객체에 대해 이야기 하기 전에, 먼저 객체 지향에 대해 간단하게 생각해 보자. C++ 는 객

salix97.tistory.com

 

반응형

'C++ > C++ 클래스, 생성자 초기화 리스트' 카테고리의 다른 글

생성자 초기화 리스트  (0) 2023.12.01
this  (2) 2023.11.30
생성자, 소멸자  (2) 2023.11.30
private, public  (0) 2023.11.30