본문 바로가기

Archived(CSE Programming)/cpp

Chap 3. 클래스의 기본

Chap 3. 클래스의 기본


3-1. c++ 에서의 구조체


기존의 c언어에서는 관련이 있는 data들을 하나의 struct 구조체 변수로써 선언하여 사용할 수 있었다.

하나의 묶음 데이터(구조체)로 표현함으로써 관리면에서나 활용면에서 다양한 이점이 있을 수 있었다.


그런데, 추가적으로 이러한 변수와 함께 이 변수들이 활용하는 기능을 기존의 전역변수에서 특정 구조체 내부의 함수로 포함시켜 사용한다면 더욱 효율적으로 활용할 수 있을 것이다.


c++에서는 이러한 이점을 고려하여 DATA + FUNCTION을 합쳐서 새로운 구조체, 즉, CLASS라는 객체 개념을 가져와서 활용한다.

이러한 클래스를 정의하고 클래스 변수를 선언하게 된다면 이 변수 내부에는 data들과 함께 함수들도 독립적으로 구성되어 있다고 봐도 무방하다.


3-2.  클래스와 객체


기존 c의 struct에서 cpp로 나아가서는 class 라는 개념을 가져와 사용한다. 그래서 class 정의를 할 때도 마찬가지로 class를 통해 선언하는데 이 때 struct와의 차이점은 접근 수준 제어 지시자이다. struct는 default가 public 이고 class는 default가 private 이다.


그리고, 이제는 class 변수를 '객체' 라고 표현하고 그 안의 변수들을 멤버 변수, 그  안의 함수들을 멤버 함수로 부른다.

추가적으로, 파일 분할에 있어서 클래스의 정의와 멤버 함수의 선언은 헤더파일(.h)에 포함시키고, 구체적인 정의는 소스파일(cpp)에 포함시켜서 처리한다.


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


객체 지향 프로그래밍 언어의 뜻은 현실 세계의 객체를 프로그래밍으로 모방하는 것이다.

현실 세계에서의 프로그래머 객체를 코드 상에서 가져와 그의 특성이나 상태를 멤버 변수로, 그의 행위나 기능을 멤버 함수로 표현하는 것이다.

즉, 객체의 상태는 Data로 객체의 행위는 Function으로 표현하는 것이 객체 지향 프로그래밍이다.



예제.


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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
// 과일 장수와 구매자의 거래 시뮬레이션
 
#include <iostream>
using namespace std;
 
// 과일 장수 Class 정의
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 << endl;
    }
};
 
// 구매자의 class 정의
class Buyer 
{
    // 멤버 변수 
private:
    int myMoney;
    int numOfApples;
 
    // 멤버 함수
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 << endl;
    }
};
 
// 메인 함수
void main() {
    
    FruitSeller seller;                    // 판매자
    seller.InitMembers(1000200);    // 사과 개당 1000원, 20개 보유
    Buyer buyer;                        // 구매자
    buyer.InitMembers(5000);            // 5000원 보유
    buyer.BuyApples(seller, 2000);        // 과일 구매
 
    cout << "판매자 현황" << endl;        // 판매 현황 보기
    seller.ShowSalesResult();
 
    cout << "구매자 현황" << endl;        // 구매 현황 보기
    buyer.ShowBuyResult();
}
cs