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

👻 객체 지향 프로그래밍

객체 지향 프로그래밍(Object Oriented Programming)이란 각 객체를 만들어 무엇을 의미하는지 정의하고, 객체들 간의 상호작용을 통해 프로그램을 만드는 방식을 의미한다.

우리가 여태까지 사용해왔던 방식은 절차(Procedural) 지향이다. 함수 위주, 의식의 흐름대로 코드가 진행되는 식이었지만 객체 지향을 사용하게되면 객체가 조립되는 방식으로 프로그래밍을 진행하게 된다.


🌱 객체(Object)

객체(Object)란 플레이어, 몬스터와 같은 하나 하나의 단일된 부분을 의미한다. 각 객체마다 고유한 기능을 가지게된다. 프로그래밍은 데이터 + 가공 조합이라면 객체는 속성 + 기능 조합을 가진다. 속성은 데이터, 기능은 가공(동작)과 같은 역할을 한다.

Knight를 설계해보자

  • 속성(데이터) : hp, attack, y, x
  • 기능(동작) : Move, Attack, Die
class Knight
{
public:
    // 멤버 함수 선언
    void Move(int y, int x);
    void Attack();
    // 클래스 내에서 바로 구현 가능
    void Die()
    {
        hp = 0;
        cout << "Die" << endl;
    }
public:
    // 멤버 변수
    int hp;
    int attack;
    int posY;
    int posX;
};

// 멤버 함수 구현
void Knight::Move(int y, int x)
{
    posY = y;
    posX = x;
    cout << "Move" << endl;
}

void Knight::Attack()
{
    cout << "Attack : " << attack << endl;
}

int main()
{
    // 객체의 사용
    Knight k1;
    k1.hp = 100;
    k1.attack = 10;
    k1.posY = 0;
    k1.posX = 0;

    Knight k2;
    k2.hp = 80;
    k2.attack = 5;
    k2.posY = 1;
    k2.posX = 1;

    k1.Move(2, 2);
    k1.Attack();
    k1.Die();
}

class로 객체를 생성할 수 있고 내부에 속성과 기능을 포함시킬 수 있다. 클래스는 일종의 설계도라고 볼 수 있다. 클래스 외부에서 멤버 함수를 구현할 때에는 함수 이름 앞에 클래스 이름::을 붙여야 한다.

structclass는 종이 한 장 차이이다.

참고로 멤버 변수와 멤버 함수를 모두 만들어놓아도 객체의 주소값을 살펴보면 메모리엔 멤버 변수만큼의 크기가 할당되어있다는 것을 알 수 있다. 즉, 클래스나 구조체를 만들어놓아도 메모리에 바로 할당되지 않고 생성할 때 메모리에 할당이 된다는 의미이다.


👻 글을 마치며

드디어 객체 지향 공부를 시작하였다. 🎉 또 새로운 걸 배우니 굉장히 기분이 좋고 중요한 부분이기 때문에 집중해서 익혀야 겠다는 생각이 들었다. C++로는 객체를 처음 만들어보았는데 생각보다 간단하고 편리한 것 같다.


소스코드 보러가기


출처
인프런 Rookies님 강의

Categories:

Updated:

Leave a comment