inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

Task 구현

TaskTarget을 할떄

361

멍텅구리

작성한 질문수 34

0

Object 형식을 사용하는데 이러면 박싱이 일어나서 안좋지 않을까요?? 

실무에서 최적화를 한다고할때 괜찮은지 궁금합니다.

unity

답변 1

8

Developer G

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

C# 문법서나 강의에서 제대로 설명하지 않아서 가장 많은 오해를 많이 받는게 object형의 퍼포먼스인데요, object형이 퍼포먼스에 안좋다는 이유는 value 타입의 변수를 박싱할 때 heap에 값의 재할당이 일어나고 언박싱을 할 때 캐스팅한 타입으로 박싱한 것인지 확인 후 다시 value 타입으로 값의 재할당이 일어나기 때문입니다.
(마이크로스프트 공식 문서 https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/types/boxing-and-unboxing)

하지만 애초에 heap에 할당된 reference 타입의 변수들은 재할당(박싱/언박싱)이 일어나지 않기 때문에 퍼포먼스에 문제가 없습니다.
이는 char형을 랩핑한 클래스인 string형도 포함되는 사항입니다.
(마이크로소프트에서 제공하는 Type 정보를 보면 string형은 reference 타입으로 되어있습니다. https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/built-in-types)
그러니 int, float, struct 같은 value 타입의 변수들을 Target으로 쓰는 것이 아니라면 퍼포먼스에 대해서는 걱정하지 않으셔도 됩니다.

설사 value 타입을 박싱/언박싱하더라도 저희가 만드는 QuestSystem은 박싱/언박싱이 매 프레임마다 일어나는 것이 아닌 특정 상황에서만 일어나는 것이기 때문에 퍼포먼스 이슈가 생길 가능성은 극히 낮습니다.

Task 구현 28:36 Equals 에서 잘 모르는 부분이 있습니다.

0

20

2

Quest System의 확장성에 대한 질문

0

104

1

공부 방향에 대해 궁금한 점이 있습니다.

0

140

2

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

0

165

2

Target의 value에 Object 자료형 관련 질문입니다!

0

148

2

TaskGroupState에 대하여 질문이 있습니다

0

111

2

Elite와 Normal Germ의 IsTarget()질문입니다.

0

99

2

퀘스트 시스템을 확장하면서 생긴 의문점 입니다.

0

165

2

퀘스트 클리어해도 동일 퀘스트가 노출됩니다

1

128

3

퀘스트 누적 클리어 횟수에 대해 여쭤보고싶습니다.

0

84

1

프로퍼티 사용 질문입니다.

0

117

1

Task 에서 Object 타입 사용

0

119

2

파일 저장방식, 퀘스트 실패에 관하여 여쭤보고싶습니다.

0

217

1

Destroy() 지연 파괴에 관하여

0

139

1

Action & Delegate

0

178

2

강의에서 리워드 관련 언급은 없으셔서 질문드립니다.

0

274

1

궁금한게있습니다

0

293

1

스크립터블 오브젝트 Instantiate?

0

436

1

원하는 타이밍에 퀘스트를 등록하고 싶다면 어떻게 해야할까요

0

338

1

Quest Cancel() 메소드

0

262

2

Task의 IsEqual

0

224

1

실전예제 UI 자료

0

193

1

스크립터블 오브젝트

1

322

1

Task 예시

1

163

1