모두의 코드 4-1장을 공부하며 정리한 노트.
컴퓨터 언어의 발달
- 어셈블리어
- Cobol, Fortran, Basic 등 2세대 언어
- 절차 지향 언어 (Procedural Programming like C language)
- 객체지향 언어 (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;
}
}
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();
}
한계: 윤년과 한 달 이상 넘어가는 날짜 더하기는 처리하지 않음