C++

객체지향

Nin 2020. 12. 10. 03:23

프로그래밍에서 인터페이스 : 우리에게 제공하는 사용자 정의 자료형과 함수등등을 모두 통칭해서 말할때가 많다.

(다른 프로그래머가 내 코드에서 사용할 수 있는 코드적인 걸 제공하면 그 모든게 인터페이스)

구조체

사용자 정의 자료형

하나 이상의 변수를 묶어서 자기가 원하는 새로운 자료형을 정의할때 사용한다

-> 개념을 표현하고 싶을때

복습)

struct Player
{
	int Hp;
	int Att;
	int Def;
}
Player PvP(Player _Player1,Player _Player2)   	                                               
{                                                                                  	 	
   _Player1.Hp -= _Player2.Att - _Player1.Def;                                                       
   _Player2.Hp -= _Player1.Att - _Player2.Def;                                                 
   return _Player1;
}

​함수의 인자는 지역변수이기때문에 지역 밖으로 나가면 없어진다.                
이 함수를 실행해도 밖에서의 값은 바뀌지 않는다.
리턴값으로 하나의 값밖에 못넘겨준다.

void PvP(Player* _Player1,Player* _Player2) //이렇게 포인터로 넘겨준다.
{    //int Hp,Att,Def 총 12바이트 넘길거를 8바이트로 절약                                              
    _Player1->Hp -= _Player2->Att - _Player1->Def;
	
	_Player2->Hp -= _Player1->Att - _Player2->Def;

	return;
}
int main()
{
	Player Player1 = {1,10};
	Player Player2 = {1,10};
    
	​PvP(Player1,Player2);      //플레이어 둘을 싸우게 하는 기능을 실행한다
	PvP(&Player1, &Player2); 
}

 

프로그래밍을 짜면 기본적으로 기능과 속성으로 나뉜다.

속성 : 상태(변수)를 나타낸다

기능 : 상태를 변경하는 함수

여기서 PvP라는 함수는 Player만 사용하는 기능이다.

그렇기 때문에 PvP 함수를 Player 구조체에 넣어서 합쳐준다.(C에서는 에러)

struct Player
{
	int Hp;
	int Att;
	int Def;
	
	void PvP(Player* _Player1,Player* _Player2)        
	{                                                                                      

		_Player1->Hp -= _Player2->Att - _Player1->Def; 
		_Player2->Hp -= _Player1->Att - _Player2->Def;
	
    		return;
	}
};

Player Player1 = {1,10};

이 문장이 실행되는 순간 플레이어라는 인터페이스를 실체화 시킨것이고

이렇게 만들어진 메모리를 차지하는 인터페이스를 객체라고 한다.

이 객체를 사용해서 코딩을 하는것을 객체지향이라고 한다.

Player1.PvP(&Player1, &Player2);

이런식으로 사용가능해진다.

객체지향

->사용자 정의 자료형에 기능과 데이터를 함께 선언하고

그것을 메모리화 시켜서 코딩 (기능과 데이터가 하나의 사용자 정의 자료형에 같이 있다)

프로그래밍 패러다임

-> 언어에 주요 프로그래밍 방법을 정의해 놓은것

여기에는 객체지향, 절차지향, 함수지향 있고

객체지향 -> 객체만을 사용한다. (객체 바깥(전역)이라는 개념이 없다)

절차지향 -> 순차적으로 데이터와 함수를 사용한다.(데이터와 함수가 분리되어사 사용된다)

함수지향 -> 함수만 사용한다.

여기서 C++ 객체지향 언어도 사용 가능한 언어이다 (다중 패러다임 언어)

C++ 에서는 객체 바깥에도 함수와 변수를 정의하고 사용가능하다

그렇기 때문에 세가지 영역이 존재

맴버,지역,전역

객체의 기반이 되는 사용자 정의 자료형 안에 있는 변수를 맴버 변수라고 한다

객체의 기반이 되는 사용자 정의 자료형 안에 있는 함수(맴버 함수)에 있는 변수를 지역 변수라고 한다

바깥에 있는 변수와 함수는 전역 변수, 전역 함수라고 한다.

struct Player
{                  //맴버 영역
	int Hp;      // 맴버 변수
	int Att;
	int Def;
	void PvP(Player* _Player1,Player* _Player2) //맴버 함수
	{                                           //지역 영역
		int a = 0;  // 지역 변수

		return;
	}
};

int a = 0;  //전역 변수

void Move()  //전역 함수
{

}
​
int main()
{

}