프로그램 내에서 개별적으로 존재하는 각 객체들이 서로 상호작용 절차적으로 처리한다면 프로그램이 커질수록 절차적으로 관리하기 어렵기 때문에 객체지향을 사용한다.
->
1)효율적인 데이터관리, 에러의 경우 해당 객체만 확인하여 해결가능하다
2) 하나의 객체로 재사용이 가능하다
하나의 객체지향으로써 설계도의 특성을 지닌다
class Player
{
=
//변수(명사) : 정보
int level;
int attack;
//함수(동사) : 행동
void Attack(Monster monster){}
void Jump(){}
}
이를 통해 main함수에 객체를 생성
-> 이떄 접근제한자를 기반으로 데이터를 관리한다
(private, public)
ex)
객체(object) -. 몬스터{ 체력, 공격하기, 죽기, 속도}
클래스 (설계도, 정보 + 행동)
필수는 아니지만 지킬수록 더 좋은 객체,클래스를 만들 수 있다
S : 단일 책임 원칙
O : 개방 폐쇄 원칙
L : 리스코프 치환 원칙
I : 인터페이스 분리 원칙
D : 의존 역전 원칙
stack - heap - data - code
stack
heap
data영역
코드영역(code)
heap - struct 예제
클래스의 경우
HeapClass local;
local = new HeapClass();
구조체의 경우
Struct local;
local.num;
1) 클래스


2) 구조체


class -> 참조 (바로가기) 원본 객체 자체를 넘길때 사용
struct -> 값(데이터 저장소)
struct
값타입의 형식에선 스택 메모리에 저장하는 것으로 실제 데이터의 영역에서 전달을 주고 받으므로 struct형식에서 원본의 데이터값을 복사받아 가져온다.
class
참조타입의 형식에선 힙 메모리의 주소를 참조해 주소를 가리키고 데이터를 전달하여 주고받는 형식으로 데이터의 값을 직접적으로 영향을 주는 효과를 볼 수 있다.



class자기 자신을 호출하는 방식으로 함수의 형태는 작성해주지 않고 사용할 수 있다.
초기 설정에서 0이 되면 안되는 데이터에 값을 넣어서 사용가능하다.