느슨한 결합(Loose Coupling) 강한 결합과 느슨한 결합 강한 결합(Tight Coupling) 클래스들이 서로 의존성을 가지는 경우를 의미한다. 아래 예시에서 Card가 없는 경우 Person이 만들어질 수 없다. 이 때 Person은 Card에 대한 의존성을 가진다고 한다. 핸드폰에서도 인증할 수 있는 새로운 카드가 도입된다면? 느슨한 결합(Loose Coupling) 실물에 의존하지 말고 추상적 설계에 의존하라. (DIP 원칙) 왜 Person은 Card가 필요한가? → 출입을 확인해야 하기 때문 출입에 관련된 추상적인 설계에 의존하자. ICheck를 상속받은 새로운 카드 인터페이스를 선언해 해결 이러한 느슨한 결합 구조는 유지 보수를 손쉽게 만들어 줌. 기존 코드 class Card { ..
언리얼 오브젝트의 컴포지션 컴포지션(Composition) 객체 지향 설계에서 상속이 가진 Is-A 관계만 의존해서는 설계와 유지보수가 어려움. 컴포지션은 객체 지향 설계에서 Has-A 관계를 구현하는 설계 방법 컴포지션의 활용 복합적인 기능을 가진 거대한 클래스를 효과적으로 설계하는데 유용하게 사용할 수 있음. 아래 코드는 어떤 사람이 카드를 소유하는 개념을 컴포지션을 사용해서 구현한 예시 class Card { public: CarD(int InId) : Id(InId) {} int Id = 0; }; class Person { public: Person(Card InCard) : IdCard(InCard) {} protected: Card IdCard; }; 모던 객체 설계 기법과 컴포지션 좋은 객..
언리얼 C++ 인터페이스 인터페이스란? 객체가 반드시 구현해야 할 행동을 지정하는데 활용되는 타입 다형성(Polymorphism)의 구현, 의존성이 분리(Decouple)된 설계에 유용하게 활용. 언리얼 엔진에서 게임 콘텐으를 구성하는 오브젝트의 설계 예시 월드에 배치되는 모든 오브젝트. 안 움직이는 오브젝트를 포함(Actor) 움직이는 오브젝트(Pawn) 길찾기 시스템을 반드시 사용하면서 움직이는 오브젝트 ⇒ (INavAgentInterface 인터페이스를 구현한 Pawn) 예제를 위한 클래스 다이어그램 수업에 참여하는 사람과 참여하지 않는 사람의 구분 수업에 반드시 참여해야 하는 학교 구성원: 학생, 선생 수업에 참여하지 않는 학교 구성원: 교직원 수업 행동에 관련된 인터페이스: ILessonInte..
실습 예제를 위한 클래스 다이어그램 지난 프로젝트에 이어서 예제 구현 어떤 학교에서 학생과 교수가 함께 수업하는 상황의 구현 학교 정보는 GameInstance에서 지정 UObject를 상속받는 3개의 클래스 인물 클래스 Person 학생 클래스 Student 선생 클래스 Teacher 언리얼 오브젝트의 속성과 함수 클래스에 설정할 프로퍼티 정보 Person에는 DoLesson이라는 가상 함수가 있음. Student의 DoLesson은 수업을 듣는 행동 Teacher의 DoLesson은 수업을 가르치는 행동 1. `.generated.h` 헤더 `#Include`는 제일 밑에 있어야한다. (그렇지 않으면 컴파일 시 에러) 2. `TEXT()`의 포맷으로 `FString`을 넘길때는 앞에 `*(포인터)`를..
언리얼 오브젝트의 특징 언리얼 오브젝트의 리플렉션 시스템 🔗언리얼 리플렉션 시스템 리플렉션(Reflection)은 프로그램이 실행시간에 자기 자신을 조사하는 기능. C++ 는 어떠한 형태의 리플렉션도 지원하지 않는다. 언리얼에서는 자체 리플렉션 시스템을 구축 함. UENUM(), UCLASS(), USTRUCT(), UFUNCTION(), UPROPERTY()매크로를 클래스에 달아주면 작동 UPROPERTY()매크로를 붙이지 않은 멤버 변수는 언리얼 엔진의 자동 메모리 관리(GC)에 포함되지 않는다. 따라서 개발자가 직접 메모리 관리를 해줘야한다. 언리얼 오브젝트의 구성 언리얼 오브젝트에는 특별한 프로퍼티와 함수를 지정할 수 있음. 관리되는 클래스 멤벼 변수: UPROPERTY() 관리되는 클레스 멤버 ..
언리얼 오브젝트 소개 게임 프로그래밍의 특수성 사용자: 쾌적한 경험을 위해 단일 컴퓨터에서 최대 성능을 뽑아 내야 한다. 개발자: 게임의 규모가 커질수록 방대하고 복잡한 기능을 안정적으로 관리해야 한다. 하이레벨 OOP언어: Java, C# 등 C++ 언어의 단점 1970년대에 개발된 C++ 언어 객체 지향 프로그래밍의 선두 주자 지속적으로 개선해왔지만, 익혀야 할 내용이 많아 초급자가 학습하기 어려움 하드웨어에 직접 접근하기 때문에, 잘못 사용하면 프로그램에 큰 영향을 미침 1990년 중반이후 C++의 단점을 보완한 후발 언어의 등장(Java, C#) C++의 불필요한 기능을 걷어내고, 최대한 명확하고, 간결하게 설계 성능보다 안정성과 생산성을 중요시 하드웨어에 직접 접근하지 않고, 가상 머신을 통해 ..