절차 지향 프로그래밍

-> 동사구인 '~하다'에 중점을 둔 프로그래밍

-> 함수들이 각기 자신들의 기능을 절차에 의해 호출한다.

 

객체 지향 프로그래밍(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

+ Recent posts