목록전체 글 (45)
3냥 집사이면서 게임 개발자입니다.
언리얼 C++ 만의 컴포지션 기법을 사용해 오브젝트의 포함 관계를 설계하는 방법과 언리얼 C++ 이 제공하는 확장 열거형 타입의 선언과 활용 방법을 정리하고자 합니다. 컴포지션(Composition) - 객체 지향 설계에서 상속이 가진 Is-A 관계만 의존해서는 설계와 유지보수가 어렵습니다. - 컴포지션은 객체 지향 설계에서 Has-A 관계를 구현하는 설계 방법입니다. - 컴포지션의 활용 - 복합적인 기능을 가진 거대한 클래스를 효과적으로 설계하는데 유용하게 사용할 수 있습니다. [ 예시 코드 ] Class Card { public: Card(int InId) : Id(InId) {} }; class Person { public: Person(Card InCard) : InCard(InCard) {} p..
Native C++ 의 경우 다중 상속은 지양하고 Is a 보다는 Has a 를 지향하는 편인데 언리얼 C++ 의 인터페이스 클래스는 다중 상속을 권장하는 것 같아서 혼란스러웠습니다. 관련 내용을 더 공부하고 정리해보겠습니다. 인터페이스는 C++ 후발 언어인 Java나 C# 등에서 정식으로 지원하는 기능입니다. 후발 주자들은 모던 객체 지향 원칙을 준수하기 위해, 단일 상속 (Extends)에 추가로 인터페이스를 구현(Implements)하는 형태를 가집니다. 하지만 오래 전에 개발된 C++ 의 경우에는 인터페이스를 구현한다는 개념은 없고 오로지 상속만 있습니다. 따라서 인터페이스를 추상 클래스로 정의하고 다중 상속을 사용해 유사하게 구현하는 방식이 최선입니다. 이 부분에서 혼동이 있었습니다. C++ 의..
언리얼 C++ 인터페이스 클래스를 사용해 보다 안정적으로 클래스를 설계하는 기법에 대해 정리하겠습니다. 언리얼 C++ 인터페이스 - 인터페이스란? - 객체가 반드시 구현해야 할 행동을 지정하는데 활용되는 타입입니다. - 다영성(Polymorphism)의 구현, 의존성이 분리(Decouple)된 설계에 유용하게 활용됩니다. - 언리얼 엔진에서 게임 콘텐츠를 구성하는 오브젝트의 설계 예시 - 월드에 배치되는 모든 오브젝트, 안 움직이는 오브젝트를 포함합니다 (Actor) - 움직이는 오브젝트 (Pawn) - 길찾기 시스템을 반드시 사용하면서 움직이는 오브젝트 (INavAgentInterface 인터페이스를 구현한 Pawn) 인터페이스를 사용해 이전에 작업한 예제를 위한 클래스 생성 3를 작업해보겠습니다. -..
언리얼 오브젝트 리플렉션 시스템을 활용해서 어떤 작업을 할 수 있는지 실습 예제를 통해 확인해봤습니다. [ 예제를 위한 클래스 생성 1 ] - 어떤 학교에서 학생과 교수가 함께 수업하는 상황의 구현 - 학교 정보는 GameInstance에서 지정 - 인물 클래스 ( Person ) - 학생 클래스 ( Student ) - 선생 클래스 ( Teacher ) 에 이어서 예제를 이어가겠습니다. [ 예제를 위한 클래스 생성 2 ] - 클래스에 설정할 프로퍼티 정보 - Person에는 DoLesson이라는 가상 함수가 있습니다. - Student의 DoLesson은 수업을 듣는 행동입니다. - Teacher의 DoLesson은 수업을 가르치는 행동입니다. Person : Name(이름), Year(학번) Stud..