절차 지향 프로그래밍
-> 동사구인 '~하다'에 중점을 둔 프로그래밍
-> 함수들이 각기 자신들의 기능을 절차에 의해 호출한다.
객체 지향 프로그래밍(OOP)
-> 객체에 중점을 둔 프로그래밍
객체 지향 프로그래밍의 특징
-> 상속을 통한 재 사용성을 보장한다.
-> 유지보수 및 관리가 용이하다.
Message Passing
-> 프로그래밍을 구성하는 객체간의 의사소통이다.
-> 의사 소통은 각 객체들이 가지고 있는 함수를 통해 이루어진다.
예)
#1 함수를 통해서 플레이어의 공격력을 얻어온다..
#2 함수를 통해서 몬스터한테 얻어온 공격력만큼 전달하여 체력을 감소시킨다.
클래스란?
-> C++부터 등장한 사용자 정의 자료형
-> 변수와 데이터를 다루는 기능을 하나로 묶어 놓은 것이다.
-> 객체들을 추상화시킨 하나의 틀이다.
프로그래밍에서 객체란?
-> 클래스는 사용자 정의 자료형
-> 클래스에 변수명을 부여해서 메모리에 등록시키면 객체가 된다.
-> 메모리에 등록된 클래스는 Instance라고도 부른다.
추상화란?
-> 공통된 요소들을 추출하는 작업
class CCar
{
public:
// 멤버 함수
void Move()
{
cout << m_szName << "이(가) " << m_iSpeed << "속도로 움직입니다." << endl;
}
public:
// 멤버 변수
// m_ : 멤버를 뜻하는 헝가리안 표기법
char m_szName[16];
int m_iSpeed;
};
struct tagCar
{
private:
// C++부터 구조체도 멤버함수를 지닐 수 있다!
void Move()
{
cout << m_szName << "이(가) " << m_iSpeed << "속도로 움직입니다." << endl;
}
char m_szName[16];
int m_iSpeed;
};
멤버 접근 지정자
-> 멤버에 접근할 수 있는 권한을 뜻한다.
#1. private
-> 멤버 접근을 오로지 내부에서만 허용한다.
#2. public
-> 멤버 접근을 내/외부 모두 허용한다.
#3. protected
-> 멤버 접근을 내부 혹은 상속 관계에서만 허용한다.
클래스와 구조체의 차이점
#1. 멤버 접근 지정자의 차이점
클래스 : private
구조체 : public
그 외의 모든 기능들이 동일하다.
-> 즉, 멤버 접근 지정자 외에는 차이점은 없다.
클래스와 구조체의 차이점이 없는 상황에서 구조체 멤버로 함수를 정의하지 않는다.
-> 구조체는 순전히 데이터 덩어리 용도로만 사용한다.
클래스의 4대 속성
-> 클래스를 구성하는 속성들
#1. 은닉화
-> 멤버 변수를 숨긴다는 의미
-> 기본 멤버 접근 지정자를 private으로 두면서 외부로부터 원치않는 데이터 변경을 막는다.
-> 데이터 보호
은닉화를 도모하지 않을 경우 원치 않는 데이터로 변경될 가능성이 있다.
은닉화된 데이터를 다루는 방법
-> Get/Set 함수를 사용.
Get함수 : 데이터를 읽는 용도
Set함수 : 데이터를 쓰는 용도
#2. 캡슐화
-> 데이터와 데이터를 다루는 기능을 하나로 묶어 놓는다.
-> 내부가 어떻게 구성되었는지 보다는 기능이 중요하다.
예를 들어 정해진 순서의 세 가지의 함수를 순서대로 실행시키는 경우가 발생 하였을 때.
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();
}
#3. 상속성
-> 클래스끼리 공통된 데이터를 필요로 한다면 상속을 통해 불러올 수 있다.
-> 부모 클래스는 자식 클래스들의 공통된 요소를 추출한 추상적인 존재가 된다.
#4. 다형성
-> 각기 다른 객체가 동일한 메세지를 통해 각기 다른 기능을 수행한다.
-> 상속과 맞물려 있기 때문에 상속을 어느정도 자유자재로 다룰 수 있으면 다형성은 쉽게 사용할 수 있다.
클래스의 파일분할
-> cpp에 정의부를 구현할 경우 어떤 클래스의 멤버 함수인지를 명시해주어야 한다.
'Programming > C++ Basic' 카테고리의 다른 글
C++ 생성자와 소멸자, explicit 키워드 (2) | 2020.09.13 |
---|---|
C++ 메모리 함수 (0) | 2020.09.13 |
C++ Debug, 조건식 Debug (0) | 2020.09.08 |
C++ string (0) | 2020.09.08 |
C++ 레퍼런스 자료형 (0) | 2020.09.08 |