Object Oriented Programming (객체지향 프로그래밍)
C++은 객체지향 언어
C언어가 절차지향적 언어라면 C++은 객체지향 언어
"나는 과일장수에게 두 개의 사과를 구매했다!"
위 문장에서 object(객체)는 나, 과일장수, 사과
OOP는 A.P.I.E
A(Abstraction, 추상화)
P(Polymorphism, 다형성)
I(Inheritance, 상속성)
E(Encapsulation, 은닉성 = 캡슐화)
- 설계이전에 분석이 필요
(요구사항)분석-설계-구현
1.분석 단계 = 객체 모델링
-객체 구성요소(속성), 동작(기능) 추출
현실에서의 요소 = 객체
객체를 프로그래밍으로 옮긴 것 = 인스턴스
: 혼용해도 딱히 틀리진 않다
객체를 이루는 것은 데이터와 기능
프로그램상에서 바라보는 과일장수
- 과일장수는 과일을 판다 (행동 behavior)
- 과일장수는 사과 20개, 오렌지 10개를 보유 (상태 state)
- 과일장수의 판매 수익은 현재 50,00원 (상태 state)
객체는 하나 이상의 상태정보(데이터) + 하나 이상의 행동(기능)으로 구성
상태 정보 : 변수를 통해서 표현(변수에 상태 정보 저장)
행동 : 함수를 통해서 표현
과일 장수의 상태 정보 (변수로 표현하며, 사과를 판다고 가정)
- 보유 사과 수 -> int numOfApples;
- 판매 수익 -> int myMoney;
과일 장수의 행위 (판매를 함수로 표현)
1
2
3
4
5
6
7
|
int SaleApples(int money) // 함수의 인자는 사과 구매 금액
{
int num = money / 1000; // 사과는 개당 1000원
numOfApples -= num; // 사과수 감소
myMoney += money; // 판매 수익 발생
return num; // 판매된 사과의 수를 반환
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
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;
}
};
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
class FruitBuyer
{
int myMoney; // private:
int numOfApples; // private:
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;
}
};
|
cs |
과일장수(seller) 아저씨, 사과 2000원어치 주세요
|
|
Output:
|
|