์ปดํ“จํ„ฐ ์–ธ์–ด์˜ ๋ฐœ๋‹ฌ

  1. ์–ด์…ˆ๋ธ”๋ฆฌ์–ด
  2. Cobol, Fortran, Basic ๋“ฑ 2์„ธ๋Œ€ ์–ธ์–ด
  3. ์ ˆ์ฐจ ์ง€ํ–ฅ ์–ธ์–ด (Procedural Programming like C language)
  4. ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด (C++, Java, Python, C#..)
    • ํ”„๋กœ๊ทธ๋žจ์˜ ํฌ๊ธฐ๊ฐ€ ์˜ˆ์ „๋ณด๋‹ค ํ›จ์”ฌ ์ปค์ง.
    • ์ƒˆ๋กœ์šด ํŒจ๋Ÿฌ๋‹ค์ž„์ด ํ•„์š”ํ•ด ๊ฐœ๋ฐœ๋จ

๊ฐ์ฒด๋ž€?

๊ฐ์ฒด๋ž€, ๋ณ€์ˆ˜๋“ค๊ณผ ์ฐธ๊ณ  ์ž๋ฃŒ๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ์†Œํ”„ํŠธ์›จ์–ด ๋ฉ์–ด๋ฆฌ ์ด๋‹ค.

๊ฐ์ฒด๊ฐ€ ํ˜„์‹ค ์„ธ๊ณ„์—์„œ์˜ ์กด์žฌํ•˜๋Š” ๊ฒƒ๋“ค์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ถ”์ƒํ™”(abstraction) ๊ณผ์ •์ด ํ•„์š”.

Animal animal;
// ์ดˆ๊ธฐํ™” ๊ณผ์ • ์ƒ๋žต
 
animal.food += 100;         // --> ๋ถˆ๊ฐ€๋Šฅ
animal.increase_food(100);  // --> ๊ฐ€๋Šฅ

animal.increase_food(100); ์˜ ๊ฒฝ์šฐ animal ๊ฐ์ฒด์˜ โ€˜์ธ์Šคํ„ด์Šค ํ•จ์ˆ˜โ€™๋ฅผ ํ†ตํ•ด์„œ ๊ฐ’์„ ์ˆ˜์ •. ์ด๋ ‡๊ฒŒ ์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ๊ฐ„์ ‘์ ์œผ๋กœ ์กฐ์ ˆํ•˜๋Š” ๊ฒƒ์„ ์บก์Аํ™”(Encapsulation)์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

ํด๋ž˜์Šค

๊ฐ์ฒด์˜ โ€˜์„ค๊ณ„๋„โ€™

#include <iostream>
 
class Animal {
 private:
  int food;
  int weight;
 
 public:
  void set_animal(int _food, int _weight) {
    food = _food;
    weight = _weight;
  }
  void increase_food(int inc) {
    food += inc;
    weight += (inc / 3);
  }
  void view_stat() {
    std::cout << "์ด ๋™๋ฌผ์˜ food   : " << food << std::endl;
    std::cout << "์ด ๋™๋ฌผ์˜ weight : " << weight << std::endl;
  }
};  // ์„ธ๋ฏธ์ฝœ๋ก  ์žŠ์ง€ ๋ง์ž!
 
int main() {
  Animal animal;
  animal.set_animal(100, 50);
  animal.increase_food(30);
 
  animal.view_stat();
  return 0;
}

private vs public

  • private keyword: ๊ฐ์ฒด ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • public keyword: ๊ฐ์ฒด ๋ฐ–์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ
// Quiz 4-1. Calculate Calendar
#include <iostream>
 
using namespace std;
 
class Date {
  int year_;
  int month_;
  int day_;
 
 public:
  void CalcDate(int day_temp, int max_day) {
    if (day_temp <= max_day) {
      day_ = day_temp;
    } else {
      AddMonth(1);
      day_ = day_temp - max_day;
    }
  }
  void SetDate(int year, int month, int date) {
    year_ = year;
    month_ = month;
    day_ = date;
  }
  void AddDay(int inc) {
    // day_ += inc;
    int day_temp = day_ + inc;
 
    switch (month_) {
      case 1:
      case 3:
      case 5:
      case 7:
      case 8:
      case 10:
      case 12:
        CalcDate(day_temp, 31);
        break;
      case 2:
        CalcDate(day_temp, 28);
        break;
      case 4:
      case 6:
      case 9:
      case 11:
        CalcDate(day_temp, 30);
        break;
    }
 
    if (day_temp < 29) {
      day_ = day_temp;
    } else {
    }
  }
  void AddMonth(int inc) {
    // month_ += inc;
    int month_temp = month_ + inc;
    if (month_temp > 12) {
      ++year_;
      month_ = month_temp - 12;
    } else {
      month_ = month_temp;
    }
  }
  void AddYear(int inc) { year_ += inc; }
 
  void ShowDate() {
    cout << year_ << "." << month_ << "." << day_ << " " << endl;
  }
};
 
int main() {
  Date date;
  int now_year, now_month, now_day;
 
  cout << "Current year: ";
  cin >> now_year;
  cout << "Current month: ";
  cin >> now_month;
  cout << "Current day: ";
  cin >> now_day;
 
  // date.SetDate(2025, 7, 3);
  date.SetDate(now_year, now_month, now_day);
  date.ShowDate();
 
  // date.AddDay(3);
  // date.ShowDate();
 
  cout << "Current date is: ";
  date.ShowDate();
  // cout << "After 2years, 3months, 5days.. " << endl;
 
  int inc_year, inc_month, inc_day;
  cout << "\nAfter nth year: ";
  cin >> inc_year;
  cout << "After nth month: ";
  cin >> inc_month;
  cout << "After nth day: ";
  cin >> inc_day;
 
  date.AddDay(inc_day);
  date.AddMonth(inc_month);
  date.AddYear(inc_year);
 
  date.ShowDate();
}