inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

object 형의 박싱 언박싱에 관련해서 궁금합니다.

137

miniyume

작성한 질문수 1

0

안녕하세요. 강습 잘 시청하고 있는데 궁금한 부분이 생겨서요.

object 형을 많이 쓰던데, 실제 게임을 이 상태로 스킬을 구현해서 출시한다고 한다면

박싱 언박싱에 관련해서 성능 이슈는 없을까요?

 

(ex : Stat.cs Dictionary<object, Dictionary<object, float>> bonusValuesByKey .. )

IdentifiedObject.cs 에서 object Clone() => Instantiate(this);

 

무시할 만한 수준일지 , 코드가 더 복잡하게 구현될 요지가 있어서 강의용으로 범용적으로 작업하셨는지 해서요.

아님 object 형이 아닌 좀 더 나은 방향이 있다면 의견 듣고 싶습니다. 감사합니다.

 

 

unity modules

답변 2

0

Developer G

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

object 부분은 강의용이 아닌 실제 개발에서 사용하는 내용이구요, 같은 질문이 있었던지라 답변을 똑같이 드리겠습니다.
(https://www.inflearn.com/community/questions/450293/tasktarget%EC%9D%84-%ED%95%A0%EB%96%84)

 

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


하지만 애초에 heap에 할당된 reference 타입의 변수들은 재할당(박싱/언박싱)이 일어나지 않기 때문에 퍼포먼스에 문제가 없습니다.
이는 char형을 랩핑한 class인 string형도 포함되는 사항입니다.
(마이크로소프트에서 제공하는 Type 정보를 보면 string형은 reference 타입으로 되어있습니다. https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/built-in-types)

그러니 int, float, struct 같은 Value Type의 변수들을 Key 값으로 쓰는 것이 아니라면 퍼포먼스에 대해서는 걱정하지 않으셔도 되구요, 보통 Key 값으로는 string이나 class 객체를 많이 쓰므로 Value Type을 넣을 일은 거의 없습니다.

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

감사합니다.

0

인프런 AI 인턴

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

object 형을 사용하는 경우, 특히 Dictionary 같은 경우에는 박싱과 언박싱이 발생할 수 있어 비용이 발생합니다. 이는 기본적으로 값 형식 (int, float 등)을 사용할 때 발생하는 현상이며, reference 타입을 사용하는 경우에는 문제가 덜할 수 있습니다.

박싱과 언박싱의 주된 문제는 성능 저하입니다. 박싱은 값 형식을 객체 타입으로 변환하기 위해 추가 메모리를 할당하는 작업이고, 언박싱은 그 반대 작업을 통해 값을 재할당하는 과정을 포함합니다. 이러한 과정은 많은 반복 작업을 필요로 하는 경우 성능에 영향을 줄 수 있습니다.

그러나 작은 규모의 프로젝트나, 개별적인 박싱 작업이 아닌 경우에는 대부분의 현대적인 컴퓨터에서는 그 영향이 미미할 수 있습니다. 다만, 대규모의 데이터 구조나 많은 연산이 필요한 게임에서는 이러한 부분이 누적되어 문제가 될 수 있으니, 성능 향상을 위해 고려해볼 만합니다.

유사한 질문 및 자세한 답변 링크:

  1. TaskTarget을 할떄 Object 형식 사용 관련 성능 문제
    • 이 답변에서는 박싱 언박싱에 대한 성능 이슈와 실제 게임 개발에서의 최적화에 대한 논의가 이루어졌습니다.

관련 내용에 대한 더 많은 토론이나 사례가 필요하시다면, 강의를 진행하시면서 의문사항을 질문하여 추가적인 정보를 얻어보시는 것도 좋은 방법입니다.

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

Indicator와 SelectionAction 및 SearchAction 간의 관계에 대해 질문있습니다.

0

70

2

ChargingState에서 질문이 있습니다.

0

49

1

Effect.GetData 함수 질문있습니다.

0

45

2

CanTransitionToSelf 질문 있습니다.

0

53

2

Stat의 MaxValue에 관하여 질문이 있습니다.

0

42

1

Stat vs StatScaleFloat

0

75

4

애니매이션 버그가 있는것 같습니다.

0

65

2

StatsOverride질문이 있습니다.

0

50

2

SetBonusValue함수 질문있습니다.

0

46

2

오늘 수강시작한 취준생입니다.

0

49

1

사소하지만 에디터 관련 질문있습니다

0

69

1

스킬시스템을 데이터 테이블화 하는 법에 대해 감이안잡혀서 질문드립니다.

0

146

2

TargetSearcher에 대해서 질문이 있습니다

0

52

1

돌진해서 몸박을하면 피격자를 날리면서 데미지를 입히는 스킬은 이 시스템에서 어떻게 만들 수 있을까요??

0

116

2

스킬 관련 질문입니다

0

110

2

통일된 Stat을 사용하지 않고 모듈화 방식으로 Stats를 만드신 이유가 궁금합니다.

0

152

1

Effect에 기능 확장에 대해서 질문이 있습니다.

0

149

2

SkillData 구조체 질문

0

122

1

스킬트리 저장 질문입니다

0

135

2

BT와 FSM을 활용해 몬스터 AI 구현

0

350

2

MonoStateMachine을 만든 이유가 잘 이해가 가지 않습니다.

0

128

1

근접 콤보 공격을 만들고 싶습니다.

0

153

1

하나의 스킬 내에서 타겟, 이펙트가 여러번 바뀌게 하는 방법이 궁금합니다.

0

190

1

올해에 예정된 새로운 강의가 있으신지요?

0

115

2