출처: 윤성우의 열혈 c++ 프로그래밍
그렇다면 객체를 지향하는 프로그래밍이란?
" 나는 과일 장수에게 두 개의 사과를 구매했다 ! "
해당 문장에서 객체는 나(me), 과일장수 , 사과 이다.
'나(me)'라는 객체는 과일장수라는 객체로부터 과일 객체의 구매라는 액션을 취할 수 있어야 한다.
즉, 객체지향 프로그래밍은 현실에 존재하는 사물과 대상, 그리고 그에 따른 행동을 있는 그대로 실체화 시키는 형태의 프로그래밍이다.
객체를 이루는 것은 '데이터'와 '기능'이다.
이 중에서 첫 번째는 과일장수의 '행동'을 의미하고 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)' 이라 한다.