07 C++ Refresher and The UE4 Hierarchy

아빠늑대·2022년 11월 19일
0
  • 이 수업을 듣기 전에 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
    • 3D mesh처럼 시각적으로 표현됨.
  • 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 Package HAS a World
    • 등등
  • 또 이렇게도 말할 수 있음.
    • A World is a Subobject of its owening Package
    • 등등

  • mesh나 texture과 같은 asset은 Package에 포함됨.
  • 하지만 이것들을 Subobject라고 부르지는 않음.
  • UE에서는 이런 C++의 프로그래밍 컨셉을 이해하면 좋음.
profile
두괄식 게으른 완벽주의자

0개의 댓글