객체 지향 프로그래밍의 이해

‍정진철·2022년 9월 3일
0

C++

목록 보기
6/18

출처: 윤성우의 열혈 c++ 프로그래밍

객체 지향 프로그래밍

  • 객체는 영어로 Object.
    사물 또는 대상...
    즉, Object는 우리 주변에 존재하는 물건( 연필, 나무, 지갑, 돈 등등) 이나 대상( 철수,친구 , 선생님 등)전부를 의미한다.

그렇다면 객체를 지향하는 프로그래밍이란?

" 나는 과일 장수에게 두 개의 사과를 구매했다 ! "

해당 문장에서 객체는 나(me), 과일장수 , 사과 이다.
'나(me)'라는 객체는 과일장수라는 객체로부터 과일 객체의 구매라는 액션을 취할 수 있어야 한다.

즉, 객체지향 프로그래밍은 현실에 존재하는 사물과 대상, 그리고 그에 따른 행동을 있는 그대로 실체화 시키는 형태의 프로그래밍이다.


객체를 이루는 것은 '데이터''기능'이다.

  • 과일 장수는 과일을 판다.
  • 과일장수는 사과20개, 오렌지10개를 보유하고 있다.
  • 과일장수의 과일판매 수익은 현재까지 5만원이다.

이 중에서 첫 번째는 과일장수의 '행동'을 의미하고 2,3번째는 과일장수의 '상태(state)'를 의미한다.

  • 이처럼 객체는 하나 이상의 상태정보(데이터)와 하나 이상의 행동(기능)으로 구성이 된다.

  • 상태정보는 변수를 통해서 표현이 되며 (변수에 상태정보 저장) 행동은 함수를 통해서 표현이 된다.

#include <iostream>
using namespace std;

class FruitSeller
{
private:
    int APPLE_PRICE;
    int numOfApples;
    int myMoney;

public:
    void InitMembers(int price, int num, int money)
    {
        APPLE_PRICE = price;
        numOfApples = num;
        myMoney = money;
    }
    int SalesApples(int money)
    {
        int num = money / APPLE_PRICE;
        numOfApples -= num;
        myMoney += money;
        return num;
    }
    void ShowSalesResult()
    {
        cout << "남은사과: " << numOfApples << endl;
        cout << "판매 수익: " << myMoney << endl;
    }
};

class FruitBuyer
{
private:
    int numofApples;
    int myMoney;

public:
    //사과 구매 하기 전 최초의 상태.
    void InitMembers(int money)
    {
        myMoney = money;
        numofApples = 0;
    }
    void BuyApples(FruitSeller &seller, int money)
    {
        numofApples += seller.SalesApples(money);
        myMoney -= money;
    }
    void ShowBuyResult()
    {
        cout << "현재금액: " << myMoney << endl;
        cout << "사과 개수" << numofApples << endl;
    }
};

int main(void)
{
    //<과일의 구매 process>
    FruitBuyer buyer;
    FruitSeller seller;
    //판매자 초기상태
    seller.InitMembers(1000, 20, 0);
    //구매자 초기상태
    buyer.BuyApples(seller, 2000);

    cout << "과일 구매자 현황: " << endl;
    buyer.ShowBuyResult();
    cout << "과일 판매자 현황:" << endl;
    seller.ShowSalesResult();
    return 0;
}


객체간의 대화 방법 (Message Passing 방법)

위의 코드에서 buyer는 seller에게 buyer.BuyApples(seller, 2000) 이라는 코드로 구매 요청을 전달하는데 해당 코드는 " seller 님, 사과 2000원어치 주세요" 라는 의미와 동일하다.

이처럼 하나의 객체가 다른 하나의 객체에게 메시지를 전달하는 방법은 ( 어떠한 행위의 요구를 위한 메시지 전달) 함수호출을 기반으로 한다.
그래서 객체지향에서는 이러한 형태의 함수호출을 가리켜 '메시지 전달(Message Passing)' 이라 한다.


profile
WILL is ALL

0개의 댓글