5-0. 객체 지향

Crat3 ㅣ 2023. 5. 25. 16:48

0. vs. 절차(procedure ; 함수)지향 프로그래밍

이전에 만들었던 TextRPG 같은 프로그램은 함수만을 이용한 프로그램이었다.

간단한 수준의 프로그램은 선형적인 구조(함수의 흐름에 따라)로 만들 수 있으나(로비 진입 -> 캐릭터 만들기 -> 게임 시작 ...)

기능이 추가되거나 더 복잡한 수준의 프로그램에서는 그렇게 만들기가 어렵다.

 

1. 객체 지향의 시작

1) 객체

게임 안에 존재하는 모든 물체 혹은 캐릭터, 몬스터 등

 

ex) 기사(Knight) 만들기

(1) 기사의 속성 (데이터)

- HP, ATK, 위치(y, x) ...

(2) 기사의 기능 (동작)

- 이동, 공격, 사망 ...

 

class Knight
{
public:
    // 멤버 함수
    void Move(int y, int x);
    void Attack();
    void Die();

public:
   // 멤버 변수
   int hp;
   int atk;
   int posY;
   int posX;

}

C++에서는 class와 struct의 사용이 거의 동일하다.

 

이후 구현은 다음과 같이 표현된다.

void Knight::Move(int y, int x)
{
    
}

아니면 class 내부에서 구현할 수도 있다.

class Knight
{
public:
    // 멤버 함수
    void Move(int y, int x);
    void Attack();

    void Die()
    {
        hp = 0;
        cout << "Die" << endl;
    }
    //~~~

이후 메인 함수 내에서 구현하여 객체를 만들면(Instantiate) 아래와 같다.

// instantiate ; 객체를 만듬
int main()
{
    Knight k1;
    k1.hp = 100;
    k1.atk = 10;
    k1.posY = 0;
    k1.posX = 0;
    

    Knight k2;
    k1.hp = 80;
    k1.atk = 5;
    k1.posY = 1;
    k1.posX = 1;

    return 0;
}

또한 다음과 같이 객체의 데이터를 조작할 수 있다.

int main(){
//~~
    k1.Move(2, 2);
    k1.Attack();
    k1.Die();

    return 0;
}
/* output :
Move
Attack
Die

 

'기초 C++ 스터디' 카테고리의 다른 글

5-1. 생성자와 소멸자  (0) 2023.05.25
번외) 파일 분할 관리  (0) 2023.05.25
4-11. 포인터 최종 정리  (0) 2023.05.23
4-10. 다차원 배열  (0) 2023.05.23
4-9. 멀티 포인터  (0) 2023.05.23