인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

마현호님의 프로필 이미지

작성한 질문수

[유니티 레벨 업!] 모듈식으로 개발하는 퀘스트&업적 시스템

Quest 구현

End()와 Complete() 함수를 따로 구현한 의도

작성

·

67

0

1. TaskGroup

1) End()

-State를 Complete로 변경

-각 task의 task.End() 호출

2) Complete()

- State를 Complete로 변경

-각 task가 Complete가 아니면 task.Compete()

 

2. Task

1) End()

-event 초기화

2) Complete()

-현재 성공 횟수를 완료 요구값으로 변경

 

저는 이렇게 이해했는데 End()와 Complete()를 분리한 의도가 이해가 잘 안됩니다.

답변 2

1

Developer G님의 프로필 이미지
Developer G
지식공유자

수강해주셔서 감사합니다.

Complete 함수는 TaskGroup 혹은 Task를 '완료 상태'로 만들고 싶을 때 호출합니다. 예를 들어, '퀘스트 완료권' 아이템을 캐쉬로 판다고 가정했을 때, 이 아이템을 쓰면 TaskGroup의 Complete 함수를 써서 TaskGroup을 완료 상태로 만들어주는 겁니다. 그리고나서 퀘스트를 준 NPC에게 찾아가 말을 걸면 퀘스트가 완료되겠죠.

End 함수는 현재 TaskGroup이 완전히 종료되어 더 이상 동작할 필요가 없을 때 호출됩니다. Task가 Complete 된 상태라고 하더라도 설정(CanReceiveReportsDuringCompletion)에 따라서 보고를 계속 받을 수 있던걸 기억하시죠? Complete 함수는 Task를 완료 상태로 만들어줄 뿐, Task를 끝내진(End) 않기 때문에 완료 상태에서 언제든지 미완료 상태로 전환될 수 있습니다. 예를 들어, Task의 조건 아이템(=슬라임 점액 5개)을 먹어서 Task가 완료된 상태(Complete)이지만, 조건 아이템을 다시 버린다면 미완료 상태(Running)로 전환되겠죠? End 함수가 호출되기 전까지는 Task는 완료 여부와 상관 없이 계속 동작 중인 상태인 겁니다.


감사합니다.

마현호님의 프로필 이미지
마현호
질문자

Task 완료(갱신 가능)와 종료를 구분한 거였군요

답변 감사합니다!

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 마현호님.

End()Complete() 함수의 분리된 구현은 시스템의 유연성과 유지보수를 고려한 디자인 패턴이라고 볼 수 있습니다. 각 함수는 서로 다른 상황에서 사용되며, 특정 기능이나 상태 변경을 담당합니다.

1. End()

  • 의도: End() 함수는 일반적으로 작업 그룹이나 개별 작업의 종료를 처리할 때 사용됩니다. 상태를 “완료”로 설정하고, 작업 종료 시 필요한 다른 처리를 수행합니다.
  • 세부사항: TaskGroup의 경우엔 그룹 내 모든 작업의 종료를 명시적으로 처리하며, 동일하게 Task에서는 이벤트 리스너를 해제하여 메모리 누수 방지와 더불어 상태 처리 후 클린업을 돕습니다.

2. Complete()

  • 의도: Complete() 함수는 작업이나 작업 그룹이 실제로 완료되었을 때 호출되어야 합니다. 주로 최종 상태에 대해 필요한 특정 변경이나 업데이트를 수행합니다.
  • 세부사항: 작업 완료 조건을 충족하는지 확인하고, 필요한 경우 완료 상태를 명시적으로 설정하여 사용자에게 작업 완료를 알립니다.

이 두 함수를 별도로 유지함으로써, 개발자는 시스템의 어떤 부분이 언제 종료되었는지 명확하게 추적할 수 있으며, 특정 종료 처리 로직을 필요할 때마다 쉽게 수정할 수 있습니다. 이러한 분리는 유지보수를 용이하게 하고, 코드의 사고 가능성을 줄이며, 특정 요구에 쉽게 적응할 수 있도록 돕습니다.

이와 관련된 다른 수강생들의 논의나 질문이 있는 게시글을 통해 더 자세히 알고 싶으시다면, 아래 URL을 참고해 주세요:
- Task 상태 관리와 종합에 대한 논의

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.