[말랑 퀴즈] 26/08/20 문제
카테고리: MallangQuiz
태그: Quiz
제 말랑말랑 퀴즈 생성기는 이곳에서 확인하실 수 있습니다.
말랑말랑 퀴즈 📝
날짜: 2026-08-20 문제 수: 5문제
Q1. 🟡 보통
다음 C++ 코드는 마지막 줄에서 컴파일이 거부된다. (string은 std::string이다.)
template <class T>
class NamedObject {
public:
NamedObject(string& name, const T& value);
// 복사 생성자와 복사 대입 연산자는 선언하지 않았다
private:
string& nameValue; // 참조자
const T objectValue; // 상수
};
string newDog("Persephone");
string oldDog("Satch");
NamedObject<int> p(newDog, 2);
NamedObject<int> s(oldDog, 36);
p = s; // ← 컴파일 에러
(1) 컴파일러가 이 클래스의 복사 대입 연산자를 암시적으로 만들어주지 못하는 이유를, nameValue와 objectValue 각각에 대해 설명하시오.
nameValue는 string형을 참조하기에 괜찮다. objectValue는 템플릿 클래스이므로, 컴파일러는 해당 클래스에 대해 정보가 없기에 문제가 발생한다.
(2) 이 에러를 해결하려면 어떻게 해야 하는가?
템플릿 특수화를 사용한다
(3) 한편 이 클래스에 대해 컴파일러는 기본 생성자도 만들어주지 않는다. 그 이유는 무엇인가?
컴파일 시점에서 T에 대해 알고 있는 정보가 없기에 발생한다.
출처:
game_dev/cpp/chapter2/2025-04-22-cpp_2_5.md
📝 내 풀이:
<풀이를 여기에="" 작성하세요=""> --- ## Q2. 🔴 어려움 UE5의 GAS(Gameplay Ability System)로 스킬 쿨다운을 구현하고, 남은 시간을 HUD에 숫자로 표시했다. 쿨다운 GE(GameplayEffect)는 `CommitAbility` 안에서 적용되므로 **예측 대상**이라, 클라이언트에는 자기가 만든 예측본이 먼저 생기고 서버가 만든 것이 나중에 복제로 도착한다. 쿨다운 5.0초, RTT 0.5초인 상황에서 표시값이 이렇게 움직인다. ``` t=0.0 스킬 사용 표시 5.0 t=0.5 (예측본 기준 4.5초 남음) 표시 4.5 t=0.5 서버본 도착 표시 5.0 ← 되돌아감 그 이후는 정상적으로 감소 ``` 되돌아가는 값이 4.7도 4.9도 아니고 **매번 정확히 처음 값(5.0)** 이다. 이 현상의 원인으로 **가장 올바른 것**은? - A. 쿨다운 GE는 예측 대상이 아니어서 클라이언트에는 GE가 생기지 않고, 서버본이 도착하는 순간 처음으로 생성되기 때문이다. - B. 클라이언트가 아는 서버 시각이 다운링크 지연만큼 뒤처져 있어서, 서버본이 도착한 시점에 계산된 경과 시간이 0이 되어 "방금 시작한 것"으로 취급되기 때문이다. - C. 위젯이 예측본과 서버본 중 항상 큰 값을 고르기 때문이며, 작은 쪽을 고르도록 바꾸면 해결된다. - D. 예측 키가 catch-up되기 전까지 두 GE의 지속시간이 합산되어 계산되기 때문이다. > **출처:** `game_dev/devlog/2026-07-26-EP_GAS-6.md` **📝 내 선택:** B --- ## Q3. 🔴 어려움 다음 명제가 참(O)인지 거짓(X)인지 판단하라. > 타르코프식 정보 은닉을 위해 캐릭터의 `HP`에 `COND_OwnerOnly`를 걸어 적의 체력을 볼 수 없게 만들었다. 그러면 다른 클라이언트는 HP가 0이 되는 것을 볼 수 없어 사망 사실도 알 수 없으므로, 아래처럼 사망을 별도로 통보한다. > > ```cpp > UFUNCTION(NetMulticast, Reliable) > void Multicast_Die(); > ``` > > `Reliable`이므로 이 구조에서는 매치 도중 **나중에 접속한 클라이언트**도 이미 죽어 있는 캐릭터를 시체 상태로 올바르게 보게 된다. > **출처:** `game_dev/devlog/2026-03-01-EP_Replication-5.md` **📝 내 답:** X. Multicast는 나중에 접속한 클라이언트에게는 정보를 보내주지 않는다. 그러므로 서버는 따로 처리해준다. --- ## Q4. 🟢 쉬움 빈칸을 채우시오. 연역된 형식을 **실행 시점**에 확인하는 방법으로 `typeid(...).name()`이 있지만, 이 `std::type_info::name`은 믿을 만하지 않다. ```cpp template
댓글남기기