인프런 커뮤니티 질문&답변
퀘스트 시스템에 관련된 질문입니다.
작성
·
317
0
선생님. 강의 잘 듣고 있습니다. 강의를 듣던 중에 궁금증이 생겨 질문 드립니다.
만약 특정 시간 이후에 리셋 되는 일일,주간, 월간 퀘스트 등의 반복 퀘스트 와 같은 경우에는
기존에 작성된 Task , Quest 클래스 에서 변수들을 모두 protected 로 변경하여 상속을 통해 새로운 클래스에 추가하는 것이 좋을까요? 아니면 기존에 작성된 Task , Quest 클래스에서 직접 코드를 수정하여 추가하는 것이 좋을까요?
답변 1
1
수강해주셔서 감사합니다.
기능 확장을 위해서 새로운 클래스를 만들 이유는 없을거 같구요, Task와 Quest, QuestSystem들을 수정하는 방향으로 확장하시는게 좋습니다. 만드실려는 기능은 강의에서 만들어지는 QuestSystem선에서 크게 확장을 안해도 쉽게 구현이 가능합니다.
일일, 주간, 월간 Quest의 경우, Quest의 Category에 Daily, Weekly, Monthly와 같은 명칭의 Category를 만들어 넣고, QuestSystem이나 별도의 System에서 QuestDatabase를 훓으며 날짜에 따라 해당하는 Category를 가진 Quest를 Register해주는 방식으로 매우 쉽게 구현이 가능합니다.
반복 Quest의 경우에도 Quest의 변수로 isRepeatQuest와 같은 bool형 변수를 만들어서 이 변수를 확인하여 Quest를 보여준다던가, 변수를 따로 만들지 않고 RepeatQuest와 같은 명칭의 Category를 만들어 넣어서 해당 Category가 있으면 Quest를 보여주 식으로 매우 쉽게 구현이 가능합니다.
더 단순하게는 그냥 위의 것들을 하나로 묶어 enum으로 만들어서 Quest 클래스에 변수로 추가하여 enum값을 확인해서 동작하게 만드는 것도 하나의 방법이 될 수 있겠습니다.
흔히 기능을 확장한다고하면 Item -> EquipmentItem, ConsumeItem 이런 식으로 상속으로 구현하려는 경우가 많은데요, 상속은 언제나 신중하게 할 필요가 있습니다. 앞선 예시에서 장착하는 아이템(EquipmentItem), 소비하는 아이템(ConsumeItem) 두 개의 class를 만들었는데, 만약 장착도 가능하고 소비도 가능한 아이템이 필요하다면 어떨까요? EquipmentAndConsumItem이라고 또 새로운 class를 만들 수 없는 노릇이죠. 애초에 상속을 안하고 Item class 자체를 확장해서 장착과 소비 기능을 만들었다면 문제가 없었을겁니다. 이처럼 상속은 만능이 아니라 그 만큼의 리스크가 있기 때문에 신중할 필요가 있습니다.
감사합니다.






친절한 답변 감사드립니다.
적어주신 답변이 저의 고민을 말끔히 해결해주었어요.
다음 강의도 많이 기대하고 있습니다.
감사합니다.