절차지향 vs 객체 지향
절차 지향 프로그래밍
- 동사구인 '~하다'에 중점을 둔 프로그래밍
- 함수들이 각기 자신들의 기능을 절차에 의해 호출한다.
객체 지향 프로그래밍(OOP)
객체 지향 프로그래밍의 특징
- 상속을 통한 재 사용성을 보장한다.
- 유지보수 및 관리가 용이하다.
클래스란?
- C++부터 등장한 사용자 정의 자료형
- 변수와 데이터를 다루는 기능을 하나로 묶어 놓은 것이다.
- 객체들을 추상화시킨 하나의 틀이다.
프로그래밍에서 객체란?
- 클래스는 사용자 정의 자료형
- 클래스에 변수명을 부여해서 메모리에 등록시키면 객체가 된다.
- 메모리에 등록된 클래스는 Instance라고도 부른다.
멤버 접근자
1. private
2. public
3. protected
- 멤버 접근을 내부 혹은 상속 관계에서만 허용한다.
클래스와 구조체의 차이점
멤버 접근 지정자의 차이점
클래스 : private
구조체 : public
그 외의 모든 기능들이 동일하다.
-> 즉, 멤버 접근 지정자 외에는 차이점은 없다.
클래스와 구조체의 차이점이 없는 상황에서 구조체 멤버로 함수를 정의하지 않는다.
-> 구조체는 순전히 데이터 덩어리 용도로만 사용한다.
객체지향의 4대 속성
1. 추상화
- 객체들의 공통적인 특징을 뽑아내서 이름을 생성
- -> 클래스를 정의하는 과정이 추상화 과정이라고 할 수 있음.
https://www.notion.so/d14f198e3a704ede922bc155c39edb96#5373d634472c4981a2d4780f172e6f28
2. 캡슐화
https://www.notion.so/d14f198e3a704ede922bc155c39edb96#cdc8b7ed451146cd8ea95ecda8c541b0
- 재료가게의 기능(함수)를 모아서 한 클래스에 쓰는 것. 이 행위를 추상화 라고 함
- 예를 들어 정해진 순서의 세 가지의 함수를 순서대로 실행시키는 경우가 발생 하였을 때.
class A
{
pulic:
void Take()
{
코드라인
}
};
class B
{
pulic:
void Take()
{
코드라인
}
};
class C
{
pulic:
void Take()
{
코드라인
}
};
void main()
{
A();
B();
C();
}
순서가 A -> B -> C가 아니고 B -> A -> C 이런식으로 섞이는 경우가 생길 수가 있다.
캡슐화로 이런 경우가 발생하는 것을 막을 수 있다.
class D
{
public:
void Take()
{
A.Take();
B.Take();
C.Take();
}
void main()
{
D.Take();
}
캡슐화된 클래스는 데이터를 보호하고 오용을 방지한다.
전역 변수는 아무나 전역 변수에 접근할 수 있으므로 엄격하게 제어할 수 없어서 위험하다. public 멤버 변수도 같은 이유로 위험하다.
3. 상속성
- 객체지향의 꽃이다. 상속이란 상위개념의 특징을 하위 개념이 물려받는 특징을 말한다. 하나의 클래스가 가지고 있는 특징들을 그대로 다른 클래스가 돌려주고자 할 때 상속성의 특징을 사용한다.
- struct 와 같이 상위 틀을 만들어 놓고 그 특징을 물려받을 하위 개념에서 사용할 수 있도록 틀을 짜는 것도 예시가 될 수 있음.
- ex) RPG 게임에서 HP, MP, STR, LUCK, INT, DEX, level up 등(개념과 함수)을 미리 만들어 놓고, 하위 개념인 개개인 캐릭터 생성 시 사용.. 등
4. 다형성
- 각기 다른 객체가 동일한 메세지를 통해 다른 각기 다른 기능을 하는 것.
- 함수 오버로딩
- 객체지향 언어의 중요한 특징 중 하나가 다형성
- 객체의 다형성은 상속과 관련된거.