본문 바로가기
c++

[C++]객체지향 프로그래밍의 이해(메시지 전달)

by goblin- 2023. 2. 11.

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

 

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

이 문장에 삽입되어 있는 객체의 종류는 과일장수, 나, 사과 가 있다.

예의 문장을 실행시키려면 나라는 객체는 과일장수라는 객체로부터 과일객체의 구매라는 액션을 취할 수 있어야 한다.

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

 

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

  • 상태 정보는 변수를 통해서 표현된다
  • 행동은 함수를 통해서 표현된다.

 

#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 SaleApples(int money){
            int num=money/APPLE_PRICE;
            numOfApples-=num;
            myMoney+=money;
            return num;
        }
        void ShowSalesResult(){
            cout<<"남은 사과: "<<numOfApples<<endl;
            cout<<"판매 수익: "<<myMoney<<endl<<endl;
        }
};

class FruitBuyer{
    int myMoney;
    int numOfApples;

    public:
        void InitMembers(int money){
            myMoney=money;
            numOfApples=0;
        }
        void BuyApples(FruitSeller &seller, int money){
            numOfApples+=seller.SaleApples(money);
            myMoney-=money;
        }
        void ShowBuyResult(){
            cout<<"현재 잔액: "<<myMoney<<endl;
            cout<<"사과 개수 : "<<numOfApples<<endl<<endl;
        }
};

int main(void){
    FruitSeller seller;
    seller.InitMembers(1000,20,0);
    FruitBuyer buyer;
    buyer.InitMembers(5000);
    buyer.BuyApples(seller, 2000);  //과일의 구매!

    cout<<"과일 판매자의 현황"<<endl;
    seller.ShowSalesResult();
    cout<<"과일 구매자의 현황"<<endl;
    buyer.ShowBuyResult();
    return 0;
}
결과
과일 판매자의 현황
남은 사과: 18
판매 수익: 2000

과일 구매자의 현황
현재 잔액: 3000
사과 개수 : 2

위의 코드를 살펴보면 두 개의 클래스 FruitSeller와 FuitBuyer 가 있는 것을 볼 수 있다.

FruitSeller를 살펴보면 상태변수 APPLE_PRICE, numOfApples, myMoney를 정의한 것을 볼 수 있고 행동함수 InitMembers, SaleApples, ShowSalesResult를 정의한 것을 볼 수 있다.

FuitBuyer을 보면 상태변수 myMoney, numOfApples를 정의하였고 행동함수 InitMembers, BuyApples, ShowBuyResult를 정의하였다.

위 함수에서 주의 깊게 살펴 봐야 할 부분은 FruitBuyer의 행동함수 BuyApples 부분이다 이 함수는 FruitSeller의 객체를 가져와 FruitSeller의 행동함수 SaleApples를 이용하여 money로 살 수 있는 사과의 개수를 뽑아낸 다음 FruitBuyer의 numOfApples(구매한 사과의 개수)에 저장한다. 이 함수를 뜻하는 것은 '나'라는 객체가 '과일장수'라는 객체로부터 '과일' 객체를 구매하는 행위를 그대로 표현한 것이다.

따라서 FruitBuyer 객체가 FruitSeller 객체에게  "seller 아저씨, 사과 2,000원어치 주세요"라는 메시지를 전달한 함수라고 볼 수 있다.

객체지향에서는 이러한 형태의 함수호출을 가리켜 '메시지전달(Message Passing)'이라 한다.

'c++' 카테고리의 다른 글

[C++] Const 함수  (0) 2023.02.18
[C++]정보은닉(information Hiding)  (0) 2023.02.18
[C++]파일분할  (0) 2023.02.10
[C++]클래스와 객체  (0) 2023.02.09
[C++] 구조체  (0) 2023.02.06