C++ Study 0003

C++언어 공부 0003

객체 지향의 소개

  • 객체지향이란 실제 세계를 모델링하여 소프트웨어를 개발하는 것이다.

절차 지향과 객체 지향

  • 절차 지향 프로그래밍(Procedural Programming) : 문제를 해결하는 절차를 중요하게 생각하는 소프트웨어 개발방법.
    • 절차는 모두 함수라는 단위로 묶이게 된다.
  • 객체 지향 프로그래밍(Object-Oriented Programming) : 데이터와 함수를 하나의 덩어리로 묶어서 생각하는 방법이다.
    • 제품의 부품을 조립하듯이 객체를 조립하여 소프트웨어를 만든다.
    • 데이터와 함수를 객체로 묶는 것을 캡슐화(encapsulation)라고 부른다.
  • 코드 비교하기
    • 첫 번째 코드는 C와 절차 지향 프로그래밍을 이용한 코드이다.
    • 두 번째 코드는 C++과 객체 지향 프로그래밍을 이용한 코드이다.
    • 지금은 간단하게 모든 코드가 모두 자동차를 만들어서 출발시키고, 속도를 60으로 정하고, 멈추는 동작을 하는것을 나타낸 코드이다. 추후에 모든 개념이 설명되므로, 지금은 이렇게 생겼구나 정도로만 알고 넘어가는 것으로 충분하다.
struct Car
{
    int speed;
    int gear;
    char *pcolor;
};

void init(Car& c, char *color);
void start(Car& c);
void stop(Car& c);
int get_speed(Car& c);
void set_speed(int speed); };

int main()
{
    Car car;
    init(car, "red");
    start(car);
    set_speed(car, 60);
    stop(car);
    return 0;
}
class Car
{
    int speed;
    int gear;
    char *pcolor;

public:
    void init(char *color);
    void start();
    void stop();
    int get_speed();
    void set_speed(int speed);
};

int main()
{
    Car car;
    car.init("red");
    car.start();
    car.set_speed(60);
    car.stop(car);
    return 0;
}

객체

  • 상태(특징값, 속성)와 동작을 가지고 있다.
  • 상태를 멤버변수, 동작을 멤버함수 라고 한다.
  • 즉, C++에서의 객체란 멤버변수와 멤버함수로 이루어져있다.
  • 메세지(message)를 통해 객체끼리 통신하며 상호작용할 수 있다.
    • 예를 들어 car 라는 객체에 speedUp()이라는 신호를 주어, car의 speed를 up하는 것이다.

클래스

  • 객체를 만드는 설계도이다.
  • 클래스로부터 만들어지는 각각의 객체를 그 클래스의 instance라고도 한다.
  • string헤더파일의 string 자료형 또한 클래스이다.

string 클래스

  • string형 변수는 string class의 객체라고 할 수 있다.
  • 클래스의 멤버함수
    • s[i] : i번째 원소
    • s.empty() : s가 비어있으면 true 반환
    • s.insert(pos, s2) : s의 pos 위치에 s2를 삽입
    • s.remove(pos, len) : s의 pos 위치에 len만큼을 삭제
    • s.find(s2) : s에서 문자열 s2가 발견되는 첫번째 인덱스를 반환
    • s.find(pos, s2) : s의 pos 위치부터 문자열 s2가 발견되는 첫번째 인덱스를 반환

객체 지향의 개념

  • Encapsulation
    • 데이터와 연산들을 객체 안에 넣어서 묶는 것
  • Information Hiding
    • 객체 내부의 데이터와 구현의 세부사항을 외부에는 보이지 않도록 하는 것
    • 외부에 영향을 끼치지 않으면 내부를 쉽게 변경할 수 있다.
  • Inheritance
    • 기존의 코드를 재활용하기 위한 기법으로 이미 작성된 클래스를 이용 및 이어받아서 새로운 클래스를 생성 할 수 있다.
  • Polymorphism
    • 객체가 취하는 동작이 상황에 따라서 달라지는 것
      • 예 : 함수 이름의 재사용

객체 지향의 장점

  • 코드를 재사용하기 쉽다.
  • 업그레이드가 쉽다.
  • 디버깅이 쉽다.

Reference

0%