절차 지향 프로그래밍(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
기존의 코드를 재활용하기 위한 기법으로 이미 작성된 클래스를 이용 및 이어받아서 새로운 클래스를 생성 할 수 있다.