c++ 는 c언어 그 자체에 객체지향의 개념을 얹은 형태
구조체 struct { ... } 라는 개념에 전용 함수 foo(){ ... } 가 들어가는 형태
즉, 구조체 확장 개념이 클래스
c와 c++ 구조체 차이
#include <iostream> #include <cstdlib> struct Marine { int hp; int mp; int range; }; int main(){ // Marine*m = (Marine*)malloc(sizeof(Marine)); // free(m); Marine*m = new Marine(); delete m; // int* myArray = (int*)malloc(sizeof(int) * 10); // free(myArray); int* myArray = new int[100]; // 사이즈 지정 delete[] myArray; std::cout << "Hello World : " << std::endl; return 0; } |
OOP (Object Oriented Programming)
객체 지향 프로그래밍
프로그래밍에서 말하는 객체란 속성과 행동을 갖고 있는 개체
속성에 해당하는 것이 멤버 변수, 행동에 해당하는 것이 멤버 함수
#include <iostream> #include <cstdlib> struct Marine { int hp; int atk; // 멤버 변수 void attackTo(); void moveTo(); void holdPosition(); // 멤버 함수 }; |
Abstraction (추상화)
: 어떤 개체가 갖고있는 속성이나 행동을 프로그래밍할 목적에 맞게 간추려내고
필요한 부분만 가져와서 프로그램에 맞게 변형시키고 간추리는 것
(멤버 변수, 멤버 함수에 동일하게 적용 가능)
#include <iostream> #include <cstdlib> struct Person { int age; int gender; int name[100]; // 멤버 변수로 표현된 모습 (속성) void work() {} void off() {} // 출근, 퇴근이라는 함수를 갖고 있을 수 있다, 멤버 함수 (행동) // 이렇게 속성과 행동을 나누는 것 -> 추상화 Abstraction }; |
#include <iostream> #include <cstdlib> struct Marine { int hp = 40; int atk = 6; float movement = 4.62; int atkspeed = 62; int def = 0; int range = 4; // 멤버 변수로 표현된 모습 (속성) // 게임상에 실제로 필요한 내용들만 속성으로 가져와서 하나의 유닛으로 취급 -> 추상화 }; |
#include <iostream> #include <cstdlib> struct Peorson { void goToWork(); void workoff(); void leave(); void vacation(); // 필요 없는 부분을 다 빼내고 필요한 내용들만 행동으로 만들어 두는 것 -> 함수에서의 추상화 }; |
상속 (Inheritance)
: 상속이란 어떤 객체의 속성을 그대로 물려받아 재사용을 할 수 있다는 것
우리가 객체를 활용하다 보면 공통된 속성들이 많이 나오게 된다
이런 공통된 속성들을 잘 묶어내게 되면 더 큰 집합을 만들 수 있고
더 큰 집합체계에서 하나의 단일 개념을 만들 수 있다
이 더 큰 집합을 하나의 클래스로 봤을 때 이 클래스를 상속받아
다른 클래스를 정의하여 코드의 재사용성을 높이고 좀 더 구조적인 개발을 할 수 있다
struct Zealot { int shieldAmount = 60; int shieldRegen = 2; int shieldAmmor = 0; int hp = 80; }; struct Dragon { int shieldAmount = 80; int shieldRegen = 2; int shieldAmmor = 0; int hp = 100; }; // 질럿과 드래곤은 실드량, 실드 방어력, 초당 실드 재생량을 둘 다 갖고 있다 이걸 묶어서 관리하는 방법 -> 상속 실드량, 실드 방어력, 초당 실드 재생량을 프로토스유닛이라는 클래스에서 할당을 해주고 이 프로토스유닛이라는 클래스를 그대로 상속받아서 활용하게 되면 일일이 유닛을 만들때마다 변수로 선언해 줄 필요 없이 그냥 변수의 값만을 할당해주면 된다 |
struct ProtossUnit{ int shieldAmount = 0; int shieldRegen = 2; int shieldAmmor = 0; int hp = 0; }; struct Zealot : public ProtossUnit { Zealot() { hp = 80; shieldAmount = 60; } }; // Zealot은 ProtossUnit의 부분집합 (Zealot은 ProtossUnit의 모든 속성을 다 갖고 있으면서 추가적으로 다른 속성을 갖고있기 때문) 질럿은 프로토스 유닛이다 -> 참 질럿 -> 프로토스 유닛 (자식 클래스 -> 부모 클래스 로 표시) struct Dragon : public ProtossUnit { Dragon(){ hp = 100; shieldAmmor = 80; } }; |
다형성 (Polymorphism) : 상속에서 파생 되는 것
이런 상속이라는 개념은 다형성이라는 개념을 추가로 만들어낸다.
다형성은 예시를 들어가면서 설명하는 게 가장 이해가 빠르다
동물을 상속받은 닭이 프로그래밍된 코드상에 있다면
닭이라는 개체는 동물이라는 클래스라고 볼 수 있다.
'C++' 카테고리의 다른 글
c++ 6 (열거형 - 가독성을 위한 타입) (0) | 2022.01.23 |
---|---|
c++ 5 (가상함수 - Java, C# 등 다른 언어의 개념 까지 ) (0) | 2022.01.16 |
c++ 4 (오버라이드 / 오버로드) (0) | 2022.01.13 |
c++ 3 (클래스 상속 / 접근지정자) (0) | 2021.09.24 |
c++ 2 (클래스 멤버 / 생성자 / 소멸자) (0) | 2021.09.08 |