07 C++ Refresher and The UE4 Hierarchy
- 이 수업을 듣기 전에 C++의 기초를 알고 있어야 합니다.
- main idea는 객체지향프로그래밍(OOC)입니다.
Inheritance Hierarchy
- Remind 해봅시다.
- Class는 variable과 function을 가질 수 있습니다.
- 그리고 Child Class가 Parent Class로 부터 derived될 수 있습니다.
- Child Class는 그들만의 variable과 function을 가질 수 있고,
- 부모로 부터 derived된 fucntion을 overriding할 수 있습니다.
- 또 원래 부모의 fucntion 역시 access 할 수 있습니다.
- Child class 역시 누군가의 Parent가 될 수 있습니다.
- 이렇게 계속 Child Class를 만들 수 있고,
- 이를 Inheritance hierarchy 혹은 Inheritance chain이라고 함
- 이런 상속은 아주 자주 일어나며, 빠르게 복잡(complex)해집니다.
- Child Class에서 overriding된 method를 호출하면 자식클래스 자신의 method가 호출되며, 이를 polymorphism이라고 함.
- Child 1에 함수를 사용하고 싶다면, Child 1 pointer type에 cast를 해서 사용하면 됨.
- cast에 성공했다면, child 1 object를 리턴해주고, function도 사용할 수 있게 된다.
Unreal Engine Hierarchy
- Unreal Engine에서는 친숙해져야할 Inheritance Hierarchy가 있음.
- Object, 그로부터 순서대로 Actor, Pawn, Character가 derived 됨.
- Object, 가장 기초적인 Class
- data는 저장할 수 있지만,
- 어떤 Level에도 배치(be placed)될 수 없다.
- Actor, Object로 부터 Derived
- Pawn
- 이제, controller에 의해 소유될 수 있음(be possessed)
- contorller는 특별한 Actor class인데, keyboard strokes나 mouse click과 같은 것들을 받아서(take) pawn의 movement에 영향을 준다(effect)
- Character
- Character movement component를 가짐.
- 이 component는 character를 움직이는데 적합한 기능들을 가지고있음. (jumping, swimming, flying 과 같은 것들)
- Object - Actor - Pawn - Character Inheritance hierarchy는 실제로 훨씬 복잡함.
- 많은 Object들이 이들로 부터 derived됨.
- 예시만 적은 것이지 이것들 보다 훨씬 많음.
"Is a" vs "Has a" Relationships
- is-a has-a relationship을 이해해야함.
- 어떤 Child Class가 Parent Class로부터 Derived되어 있다고 해보자.
- 이때, Child Class는 Parent Class 이다(is a), 라고 말할 수 있다.
- 상속(Inheritance)를 통해, 부모(Parent)가 가지는 모든 variable과 function들을 자식(Child)이 가지는 이유기도 하다.
- 반대로, 부모는 자식이 아니다(is NOT a), 당연히 부모는 자식의 것들을 가지지 못한다.
- 상속을 한번 더 시키고, 이를 손자라고 부르자(Grandchild class)
- 이제 has-a 관계를 살펴보자.
- Class는 당연히 Variable을 가질 수 있고,
- 이 Variable은 그 자체로 Class나 Struct가 될 수 있다.
- Class가 또 다른 Class를 Variable로 가질 때, 이 Variable을 Inner Class라고 하자.
- 역시 Inner Class 내부에 또 다른 Inner Inner Class가 존재할 수 있다.
- UE에서 이렇게 Class끼리 nested된 관계가 자주 등장한다.
- Game Project를 한다면 가장 바깥쪽에
Package
라는 Class가 존재.
- 그 안쪽에
World
- 다시 안쪽에
level
이 존재함.
- Level 안쪽에는
Actor
나 그 Child Class들이 존재할 수 있음.
- 그 안에 다시
Actor Component
- 이렇게 말할 수 있음(said)
- 또 이렇게도 말할 수 있음.
- A World is a
Subobject
of its owening Package
- 등등
- mesh나 texture과 같은 asset은 Package에 포함됨.
- 하지만 이것들을 Subobject라고 부르지는 않음.
- UE에서는 이런 C++의 프로그래밍 컨셉을 이해하면 좋음.