[TIL] 2025-05-28 알고리즘 문제, UI 구현, 로그라이크의 유물 시스템 구현 고민
2025-05-28 TIL
알고리즘 문제
이번 문제는 시간 복잡도에 대한 고민이 많았는데, 아무래도 아이디어가 쉽게 떠오르지 않아서 아이디어만 살펴보고 직접 풀어보았습니다.
알고리즘에서 가장 핵심이 되는 아이디어는 정렬을 사용해서 조건 중 한가지의 기준을 고정하여 해결하고, 나머지 조건에 대해 비교하여 해결하는 것이었습니다.
이 아이디어는 시간 복잡도를 크게 줄일 수 있었는데, 구현 난이도가 어렵지 않았기 때문에 앞으로도 문제를 풀어보면서 어떻게 문제를 풀어내야할지 생각하는 능력을 기르는게 좋을 것 같습니다.
[프로그래머스][C++] 인사고과
최종 프로젝트
오늘은 게임 중에 보이는 UI를 추가하고 기존에 있던 UI를 수정했습니다.
이외에 로그라이크의 유물 시스템을 구현해야하는데, 어떤 클래스를 생성하고, 관련 로직을 어떻게 구현해야할지에 대해 고민 중에 있습니다.
UI 구현
인 게임에서 메뉴창이 열리도록 UI를 구현해주었습니다.
이때 기존 UI는 보이지 않도록 설정해주어야 했습니다.
기존 UI는 별도의 클래스로 분리하고, 메뉴창또한 별도의 클래스를 생성해주었습니다.
이렇게 생성한 클래스들을 HUD개념의 UI클래스를 생성하여 해당 클래스에서 관리하도록 해주었습니다.
이렇게 클래스를 분리한 이유는 각 클래스의 역할을 명확하게 해주기 위해 위젯을 분리해주었습니다.
또한 기존에는 UI를 업데이트하기 위해 컨트롤러의 델리게이트에 바인딩하는 작업을 컨트롤러에서 작업하였습니다.
이 바인딩 작업을 UI에서 컨트롤러를 참조하여 바인딩하도록 수정해주었습니다.
이렇게 참조 방향을 변경한 이유는 객체지향적으로 좀 더 맞는 구조라고 판단하여 수정해주었습니다.
로그라이크의 유물 시스템 구현 고민
로그라이크의 유물 시스템에 대해 클래스를 어떻게 생성하고 로직을 어떻게 구현할지 고민 중에 있습니다.
생각한 아이디어는 다음과 같습니다.
- 유물의 종류 별로 유물에 대한 C++클래스를 생성한다.
- 유물의 로직을 일반화하여 클래스를 최소화한다.
- 예를 들어, 수치 기반의 변화를 주는 클래스,
PlayerTag
를 사용하여 태그를 부여하는 클래스 등
- 예를 들어, 수치 기반의 변화를 주는 클래스,
- 블루프린트 클래스가 로직을 처리하도록 한다.
UFCUNTION
의BlueprintNativeEvent
를 사용하여, 가상함수를 만들고 블루프린트 클래스에서 가상함수를 오버라이드 합니다.
UObject
클래스를 사용하여 동작만을 분리하고, 이 클래스를 상속받아 구현한다.- 특수한 로직이나 이벤트가 필요한 경우 이벤트 디스패처로 바인딩된 함수를 호출하도록 한다.
다양하고 많은 방법들이 있지만, 어떤 방법이 효율적일지 후에 어떤 문제가 생기게 될지 구체적으로 파악하고 선택하기에 어려움이 있습니다.
현재 TIL을 작성하는 시점에서 가장 효율적이라고 판단되는 것은 2번, 4번, 5번을 이용하여 다음과 같이 구현하는 것이 효율적이라고 느껴집니다.
UObject
클래스를 사용해 동작만을 분리하고, 이 클래스를 상속 받아 로직을 일반화하여 수를 최소화합니다.
이후 특수한 로직이나 이벤트가 필요한 경우에는 이벤트 디스패처를 사용하여 바인딩된 함수를 호출하도록 하여 특수한 로직을 수행하는 것이 그나마 효율적이라고 느껴집니다.
이렇게 구현할 경우 유사한 기능을 가진 클래스의 수를 줄일 수 있고, 새로운 클래스가 필요하더라도 기존 이벤트 디스패처에 바인딩하여 호출하면 되기 때문에 유지보수에도 조금 더 유리하다고 생각됩니다.
일단 조금은 더 고민을 해보고, 팀원과 얘기를 해본 뒤 다른 사람들의 조언도 받아보는 것이 좋을 것 같아 지금 선택하는 것은 좋지 않다고 느낍니다.
하지만 고민하느라 구현을 못하는 것은 좋지 않기 때문에, 내일 결정하여 바로 구현을 시작하고자 합니다.
댓글남기기