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
- 객체가 취하는 동작이 상황에 따라서 달라지는 것
- 예 : 함수 이름의 재사용
- 객체가 취하는 동작이 상황에 따라서 달라지는 것
객체 지향의 장점
- 코드를 재사용하기 쉽다.
- 업그레이드가 쉽다.
- 디버깅이 쉽다.