본문 바로가기
ProgramingLagnuage/C++

[C++] 객체지향 프로그래밍

by TSpoons 2025. 1. 1.

객체

변수들과 참고 자료들로 이루어진 소프트웨어 덩어리

인스턴스 변수(instance variable) 와 인스턴스 메소드(instance method)
 
객체에 정의되어 있는 함수, 변수들이 외부로 부터 ’보호’ 되고 있기 때문
 
외부에서 직접 인스턴스 변수의 값을 바꿀 수 없고 항상 인스턴스 메소드를 통해서 간접적으로 조절하는 것
=> 캡슐화(Encapsulation)
 
"객체가 내부적으 로 어떻게 작동하는지 몰라도 사용할 줄 알게 된다"

현실 세계에서의 존재하는 것들을 나타내기 위해서는 추상화(abstraction)

 

클래스

- 객체를 담는 틀(설계도)

 
C++에서 클래스를 이용해서 만들어진 객체를 인스턴스(instance)라고 한다.
 
 
 
 

class Person{
private:
    int age;
    char sex = 'M';

public:
    void set_person(int _age, char _sex){
        age = _age;
        sex = _sex;
    }
    void increase_age(int _age){
        age += _age;
    }
    void view_stat(){
        std::cout << "Age :" << age << std::endl;
        std::cout << "Sex :" << sex << std::endl;
        
    }
};

클래스 상에서 이들을 지칭할 때 각각 멤버 변수(member variable) 멤버 함수(member function)
 
 
 
인스턴스로 생성된 객체에서는 인스턴스 변수, 인스턴스 함수, 그리고 그냥 클래스 상에서는 멤버 변수, 멤버 함수 라고 부르는 것입니다. 멤버 변수와 멤버 함수는 실재 하는 것이 아니지요. 인스턴스가 만들어져야 비로소 세상에 나타나는 것입니다.
즉, 설계도 상에 있다고 해서 아파트가 실제로 존재하는 것이 아닌 것 처럼 말이지요
 
 
 

 

정리

- 객체가 무엇인지, 그리고 클래스가 무엇인지
- 인스턴스, 인스턴스 변수, 인스턴스 함수, 멤버 변수, 멤버 함수 와 같은 용어들을 잘 파악
 

 

연습 문제

 
여러분은 아래와 같은 Date 클래스를 디자인 하려고 합니다. SetDate 는 말그대로 Date 함수 내부를 초기화 하는 것이고 AddDay, AddMonth, AddYear 는 일, 월, 년을 원하는 만큼 더하게 됩니다. 한 가지 주의할 점은 만일 2012 년 2 월 28 일에 3 일을 더하면 2012 년 2 월 31 일이 되는 것이 아니라 2012 년 3 월 2 일이 되겠지요? (난이도 : 上)
 
- class : Date
- 멤버 변수: year, month, day
- 멤버 함수: SetDate, AddMonth, AddYear
 
 
- 2월 28일 -> 3월 1일
- 12월 31일 -> 1월 1일
-> 생각보다 복잡함
 
간단히 작성

#include <iostream>

class Date{
    int year;
    int month;
    int day;
    
public:
    void SetDate(int _year, int _month, int _day){
        year = _year;
        month = _month;
        day = _day;
    }

    void AddDay(){
        day += 1;
        if(day > 31){
            day = 1;
            AddMonth();
        }
    }
    void AddMonth(){
        month += 1;
        if(month > 12){
            month = 1;
            AddYear();
        }
    }
    void AddYear(){
        year +=1;
    }

    void ShowDate(){
        std::cout << year << "년 " << month << "월 " << day << "일 " << std::endl; 
    }
};

int main(void){
    Date date;
    date.SetDate(2025, 1, 1);
    date.ShowDate();
    return 0;
}

 
 

 

참고

https://modoocode.com/312
https://www.slideshare.net/slideshow/java-tutor-oo-ps-introductionversion-1-15231165/15231165