Channi Studies

[C++] 클래스와 객체 본문

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

[C++] 클래스와 객체

Chan Lee 2023. 12. 26. 23:13

OOP의 핵심인 클래스와 객체는 각각 무엇일까요?

 

 


Class | 클래스

 

클래스는 '객체들의 청사진' 입니다.

 

또한 클래스는 '사용자가 지정한 자료형' 입니다.

마치 우리가 사용하던 정수나 실수 자료형처럼 사용할 수 있는 데이터입니다.

(클래스의 선언 방식을 보면 더욱 이해가 될 것 입니다.)

 

클래스에는 attributes(속성) 들이 있는데, 

그것이 우리가 아는 '값 (data)' 과 동일한 역할입니다.

 

그리고 methods(메소드) 들도 있는데,

이것은 우리가 사용하던 '함수 (function)' 와 동일한 역할입니다.

 

또한 클래스들은

클래스의 내부적으로만 사용되는 용도의 함수(메소드)와 값(속성) 들을 가지고 있을 수 있습니다.

그리고 이들을 숨길 수 있습니다.

이러한 개념들은 public / private 접근 제한다 구현됩니다.

 

 

Class의 궁극적인 목표는

문제 해결에 사용되는 well-defined public interfacte를 구현하는 것 입니다.

 

 

vector과 string도 사실은 C++ standard library에 포함된 클래스들입니다.

 


Object | 객체


객체는 클래스로부터 만들어진 특정 인스턴스를 나타냅니다.

 

예를 들어 은행 계좌 class를 통해서 제 은행 계좌 객체(인스턴스)를 만들어낼 수 있습니다.

해당 계좌는 제 개인 정보, 계좌 번호와 같은 값이나 입금 출금과 같은 기능을 수행하는 메소드로 이루어졌겠죠?

 

우리는 하나의 클래스를 통해 수많은 다른 객체들을 만들 수 있습니다.

 


Basic Syntax 

 

클래스의 선언 syntax는 다음과 같습니다.

class Class_Name
{
	// declaration(s);
};

* 클래스의 첫 글자는 대문자로 선언하는 것이 관례입니다.

 

객체까지 연결된 예시를 살펴볼까요?

게임의 플레이어 클래스를 한번 살펴봅시다.

class Player
{
    // attributes (속성)
    std::string name;
    int health;
    int xp;
    
    // methods (메소드)
    void talk(std::string text_to_say);
    bool is_dead();
};

// Object
Player hero;
Player villain;

Player *enemy = new Player();
delete enemy;

name이라는 이름을 담을 것으로 추정되는 문자열 속성,

체력과 경험치로 추정되는 정수 health, xp 속성이 확인됩니다.

 

또한 메소드로는 문자열을 입력받아 무언가를 수행하는 talk 메소드와,

boolean 값을 반환하는 is_dead 메소드가 존재하네요.

 

이를 활용하여 hero와 villain 객체가 선언되었습니다.

또한 동적으로 할당된 플레이어에 대한 포인터 enemy도 존재하네요.

 

 

클래스의 속성과 메소드에 접근하는 방법은 다음 포스트에서 살펴보겠습니다 😁