프로그램이 수행하는 일련의 작업을 기준으로 하는 프로그래밍 패러다임
작업의 구현 = 함수 , 함수의 집합 = 프로그램
데이터와 작업이 분리되어 있는 개념
데이터는 작업의 실행을 위해 매개변수로 전달될 뿐
함수가 데이터의 구조를 정확히 알아야만 함
프로그램의 규모가 커지면
절차적 프로그래밍의 단점을 극복하기 위한 방법
CPP, C# , Java 등에서 쉽게 구현할 수 있는 문법을 제공
클래스와 객체를 기반으로 함
캡슐화
정보 은닉
상속
다형성
절차적 프로그램의 상위 호환이 아니다!
예시
#include <iostream>
class Player
{
public:
int x, y;
int speed;
void Move(int dx, int dy) {
x += dx * speed;
y += dy * speed;
}
};
int main() {
Player player1;//클래스 기반 객체 생성
Player player2;//클래스 기반 객체 생성
player1.x = 10, player1.y = 10, player1.speed = 2;//
player1.Move(2, 3);
player2.x = 4, player2.y = 3, player2.speed = 4;
player2.Move(5, 3);
return 0;
}
객체가 생성되기 위한 틀
사용자 정의 “자료형”
멤버 변수를 가진다 (데이터)
멤버 함수를 가짐 ( 함수 , 동작)
데이터와 함수를 은닉 가능
인터페이스 공개 가능
클래스로부터 생성된 객체
객체는 개별적으로 관리되면, 원하는 만큼 생성 가능함
객체를 통해 클래스에 정의된 멤버 함수를 호출 가능
개념적인 예
클래스는 자료형(int,double….) 처럼 사용함
클래스는 새로운 데이터 타입을 만드는 것
기본 형태
class Player
{
//멤버 변수
std::string name;
int age;
int hp;
////////////////////////////////////
//멤버 함수
void Talk(std::string text);
bool isDead();
};
위의 기본 형태를 기반으로 만들어 보겠다.
Player Lee;
Player Park;
Player* Joon = new Player(); // 동적 할당으로 객체생성 또한 가능
delete Joon;
Lee.xp = 100;
Lee.name = "우주최강천하무적";
int main()
{
//객체의 생성
Account kimAccount;
Account leeAccount;
Account* parkAccount = new Account();
std::cout << (*parkAccount).balance;
(*parkAccount).Deposit(10000.0);
return 0;
}
Account(); 라는 처음보는 표현이 나왔는데 이는 ‘생성자’라는 놈이다. 객체의 동적 할당시 선언해야 하며 생성자를 사용하여 Heap 공간에 클래스에 기반한 객체를 생성한다.
int main()
{
//객체의 생성
Account kimAccount;
Account leeAccount;
Account* parkAccount = new Account();
std::cout << parkAccount -> balance;
parkAccount -> Deposit(10000.0);
return 0;
}