본문 바로가기
C++

C++ || Class

by 휘성티비 2024. 2. 18.

https://blog.hexabrain.net/m/167

https://gmlwjd9405.github.io/2018/09/17/class-object-instance.html

https://coding-factory.tistory.com/m/697

https://wikidocs.net/14028


클래스의 개념

클래스(class)란?

 

CLASS는 C의 구조체에서 확장된 C++의 구조체의 또 다른 이름이라고 할 수 있다.

C++의 구조체는 멤버로 함수를 포함할 수 있기에, C언어의 구조체보다 더 확장된 의미를 가진다.

 

C++에서 이러한 구조체와 클래스의 차이는 기본 접근 제한자의 차이일 뿐 나머지는 거의 같다고 할 수 있다.

 

클래스는 객체를 만들어 내기 위해 변수와 메소드를 정의하는 틀이라고 말할 수 있다.

클래스에 멤버 변수멤버 함수를 선언한다.

 

> 구조체는 기본 접근 제한자가 public이며, 클래스의 기본 접근 제한자는 private으로 제한되어 있다.

 

public - 어디서든 접근 가능

private - 클래스 내부에서만 접근 허용

protected - 기본적으로는 private지만 상속관계에 놓여있을 때, 유도 클래스에서는 접근 허용

 

 

#프로퍼티와 메소드

클래스의 멤버 변수를 프로퍼티(property), 멤버 함수를 메소드(method)라고도 한다.

 

객체 지향 프로그래밍(OOP)

객체 지향 프로그래밍에서는 모든 데이터를 객체(object)로 취급하며, 객체가 바로 중심이 된다.

 

객체(object)란 간단히 말하면 실생활 속 우리가 인식할 수 있는 사물로 이해 가능하다.

 

이러한 객체의 상태(state)와 행동(behavior)을 구체화 하는 형태의 프로그래밍이 객체 지향 프로그래밍이다.

이런 객체를 만들기 위한 틀과 같은 개념이 클래스(class)이다.

 

먼저 객체 지향 프로그래밍이 가지는 특징은 다음과 같다

1. 추상화(abstraction)

2. 캡슐화(encapsulation)

3. 정보 은닉(data hiding)

4. 상속성(inheritance)

5. 다형성(polymorphism)

 

붕어빵..?

우리 눈앞에 보이는 모든게 객체라고 말할 수 있다. 자신조차도. 이 OOP는 물체, 물건의 행동(behavior)과 상태(state)를 실체화 시키는 형태이다

 

>예를 들어 전화기의 색은 상태, 걸거나 끊는 동작은 행동이된다.

 

앞서 객체는 상태와 행동으로 이루어진다고 했다. 그렇다면 클래스는 무엇일까

쉽게 예를 들어보겠다.

> 클래스는 붕어빵 틀에 비교할 수 있다.

붕어빵을 만들기 위해 틀이 필요하고 틀(클래스)이 있다면 붕어빵(객체)를 여러개 찍어낼 수 있다.

 

따라서 클래스는 객체를 만들어 내기 위해 변수와 메소드를 정의하는 틀이라고 말할 수 있다.

 

인스턴스(Instance)

인스턴스(Instance)는 객체(Object)의 또다른 표현이다.

인스턴스는 객체를 실제로 구성한 것, 즉 어떤 메모리 공간에 구현된 실체를 말한다. (객체의 실체화)

 

 

객체(Object)와 인스턴스(Instance)

헷갈릴 수도 있으니 객체와 인스턴스를 정리해보겠다.

 

>객체(Object)란

- 개념

>> 상태와 행동을 가지는 사물로 이해

구현할 대상

- 특징

>>'클래스의 인스턴스(Instance)'라고도 부른다

객체는 모든 인스턴스를 대표하는 포괄적인 의미를 갖는다.

클래스의 타입으로 선언 시 '객체'라고 한다.

 

>인스턴스(Instance)란

- 개념

>> 구현된 구체적인 실체

객체를 소프트웨어에 실체화 하면 그것을 '인스턴스'라고 부른다.

실체화된 인스턴스는 메모리에 할당된다.

- 특징

>> 인스턴스는 객체에 포함된다고 볼 수 있다.

객체가 메모리에 할당되어 실제 사용될 때 '인스턴스'라고 부른다.

추상적인 개념(또는 명세)과 구체적인 객체 사이의 관계에 초점을 맞출 때 사용

>>>'~의 인스턴스'의 형태로 사용

객체는 클래스의 인스턴스

객체 간의 링크는 클래스 간의 연관 관계의 인스턴스다.

실행 프로세스는 프로그램의 인스턴스다.

 

 

클래스 생성

클래스 마지막에는 세미콜론(;)을 붙여줘야 한다.

 

클래스 생성

```

class 클래스 이름{

접근 제어 지시자:

멤버변수:

멤버함수

};

```

 

```

class MyCar {

private:

//멤버변수

int fuel = 0;

bool power = false;

 

public:

//메소드

void go() {

this->fuel--;

}

 

void oiling(int n) {

this->fuel += n;

}

 

void fuel_check() {

std::cout << "연료 : " << fuel << std::endl;

}

};

```

 

this는 클래스 내의 멤버 변수를 의미, 실제 인스턴스에 대한 주소를 가리키는 포인터이다.

this로 가리키는 변수가 클래스의 멤버 변수라는 것이라는 직관성이 높아짐