분류 전체보기
-
[UE5] 추상클래스와 인터페이스UE5 2024. 12. 6. 07:20
주요 차이점특징추상 클래스인터페이스주요 목적공통 기능 재사용 및 확장클래스 간의 약속(규격) 정의상속 방식단일 상속다중 상속 가능멤버멤버 변수와 일반 메서드 포함 가능멤버 변수를 가질 수 없음순수 가상 함수일부만 포함 가능모든 함수가 순수 가상 함수생성자생성자 정의 가능생성자 정의 불가사용 예시상속받는 클래스 간의 기능 공유클래스 간의 규격(행동) 정의다중 상속 지원 여부단일 상속만 가능다중 상속 가능 사용 사례 추상 클래스공통적인 동작을 상속받아 재사용 할 때상태(멤버 변수)와 공통 메서드를 제공해야 할 때일부 메서드는 구현하고, 나머지는 파생 클래스에서 구현하도록 강제할 때멤버 변수와 메서드 정의 가능순수 가상 함수(=0)와 일반 메서드 혼합 가능예) 게임 캐릭터 시스템class ACharacter{..
-
[UE5] 순수 가상 함수(Pure Virtual Function)UE5 2024. 12. 6. 05:34
virtual void FunctionName() = 0; 순수 가상 함수는 함수의 구현체(내용)가 없고, 파생 클래스에서 반드시 구현해야 하는 함수클래스 선언에서 = 0 을 사용하여 정의순수 가상 함수는 기본 클래스가 추상 클래스(Abstract Class)가 되도록 만듬추상 클래스는 직접 객체를 생성할 수 없으며, 오직 파생 클래스에서만 사용class IPlayerScoreListener{public: virtual void OnPlayerScoreChanged(int32 NewPlayerScore) = 0; // 순수 가상 함수};파생 클래스에서의 순수 가상 함수 구현 예시class PlayerScoreHandler : public IPlayerScoreListener{public: ..
-
[UE5] 인터페이스의 활용UE5 2024. 12. 5. 06:02
이득우의 언리얼 프로그래밍 pt2에서는 세 개의 레이어를 기준으로 게임의 다양한 기능을 구현한다. 하위 레이어에서 상위 레이어를 참조할 때는 인터페이스를 활용하여 구현한다. 인터페이스를 활용할 때의 장점 1. 의존성 문제 해결하위 레이어가 상위 레이어에 강하게 결합하면, 의존성 문제가 발생할 수 있음class UABCharacterHUD : public UUserWidget{public: void UpdateHPBar(AABCharacterBase* Character) { float CurrentHP = Character->GetCurrentHP(); float MaxHP = Character->GetMaxHP(); HPBar->SetPercent(Curr..
-
[UE5] 단일 캐스팅 델리게이트를 이용한 다중 동작 이벤트 처리UE5 2024. 12. 3. 18:54
1. 단일 캐스팅(Single-cast Delegate) vs 멀티 캐스팅(Multi-cast Delegate) 델리게이트특징단일 캐스팅 델리게이트멀티캐스팅 델리게이트핸들러 수한 번에 하나의 함수만 바인딩 가능여러 함수를 바인딩 가능사용 사례특정 이벤트에 하나의 동작만 필요할 때하나의 이벤트로 여러 동작을 처리할 때유연성제한적높은 유연성실행 함수Execute, ExecuteIfBoundBroadCast 2. 단일 캐스팅 델리게이트의 다중 동작FonTakeItemDelegate 선언 및 델리게이트를 담아줄 구조체 선언DECLARE_DELEGATE_OneParam(FOnTakeItemDelegate, class UABItemData* /*InItemData*/);USTRUCT(BlueprintType)str..
-
[UE5] CoreMinimal.h란?UE5 2024. 12. 3. 17:25
언리얼 엔진에서 자주 사용되는 핵심 헤더 파일언리얼 엔진의 기본적인 기능과 데이터 타입 포함 어떤 요소들이 포함되나?기본 데이터 타입FString, FVector, FRotator, FMatrix 등매크로UE_LOG, check, ensure 등기본 클래스를 포함하는 모듈Core : 기본 C++ 클래스와 티입 정의CoreUObject : 객체 시스템과 리플렉션 지원Engine : 게임 엔진의 핵심 시스템InputCore : 입력 관련 타입과 설정Slate : UI 구성 요소Math 라이브러리FVector, FQuat, FTransform 등유틸리티 함수 CoreMinimal.h의 단점대규모 프로젝트CoreMinimal.h는 많은 헤더를 포함하므로, 대규모 프로젝트에서 빌드 시간을 증가시킬수 있음필요한 헤..
-
[CS] 배치 작업 처리CS 2023. 5. 12. 09:14
1. 배치 프로그램 이란? - 개별적으로 어떤 요청이 있을 때마다 실시간으로 통신하는 것이 아닌 한꺼번에 일괄적으로 대량 처리 - 정해진 특정한 시간에 실행되도록 스케쥴링 진행 2. 배치 스케쥴러 - 일괄 처리(Barch Processing) 작업이 설정된 주기(시, 분, 일, 월, 특정 이벤트 등)에 맞춰 자동으로 수행되도록 지원해 주는 도구 3. 배치 스케쥴러 종류 - 스프링 배치(Spring Batch) - Spring Source사와 Accenture사가 2007년에 공동 개발한 오픈소스 프레임워크 - 로그 관리, 추적, 트랜잭션 관리, 작업 처리 통계, 작업 재시작 등의 다양한 기능을 제공 - Quartz - Quartz는 스프링 프레임워크로 개발되는 응용 프로그램들의 일괄 처리를 위한 다양한 ..
-
[CS] 나만의 간단한 프레임워크 설계 방법CS 2023. 5. 10. 09:18
1. 프레임워크의 정의 Gof의 디자인 패턴으로 유명한 랄프 존슨(Ralph Johnson)은 "프레임워크란, 소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것"이라고 정의 ex) 게임 프레임워크 or 게임 엔진 : 렌더링 모듈, 파일 입출력 모듈, 게임 오브젝트 모듈, 사운드 모듈, 네트워크 모듈, 키 입출력 모듈, UI / 앱 모듈 2. 프레임워크의 구조와 설계 파악하기 - 프레임워크를 초보자 혼자서 만들기에는 상당히 큰 작업 - 기존에 존재하는 여러 프레임워크를 사용해보며 전체적인 구조를 파악하는 것이 핵심 - 여러 프레임 워크 중에 공통적인(중첩적인) 부분은 반드시 존재하며, 그 부분을 자신만의 설계 포인트로 "어떻게" 녹여낼 것..
-
[CS] Unmanaged Language VS Managed LanguageCS 2023. 5. 8. 10:08
1. Unmanaged Language VS Managed Language UnManaged Language TestA(){ class* a = new class() } 힙 영역에 잡혀진 메모리를 직접 관리 가능 블록문 벗어났을 때 수동으로 지우지 않으면 메모리가 남아 있는다. Managed Language TestB(){ class b = new class(); } 힙 영역에 잡혀진 메모리가 Garbage Collector에서 자동으로 관리 블록문 벗어나면 메모리가 남아 있지만 GC가 감지한다. 스택 영역은 Managed / UnManaged 다 동일한 방식으로 구현 TestC(){ class c; } 블록문 벗어나면 알아서 해제가 된다. 힙 영역은 런 타임에 크기가 결정됨 - 사용자의 동적 할당 스택..