Q. enum 으로 형변환이 가능해?
A. Enum.Parse()를 사용하면 변경이 가능하다.
주로, 지금 표시되어있는 함수를 주로 사용하고있는데
internal class Program
{
internal enum EnemyType
{
None = 0,
Skeleton = 1,
Goblin,
Orc,
Crab,
Turtle,
End,
}
static void Main(string[] args)
{
string _str = "Skeleton";
//Enum.Parse()의 반환값은 object 타입이기 때문에 언박싱을해줘야한다.
//언박싱 : 사용하는 타입으로 형변환 하는것
EnemyType _enemyType = (EnemyType)Enum.Parse(typeof(EnemyType), _str);
}
}
하지만 boxing/unboxing(박싱/언박싱)은 최적화에서는 지양해야 되는 기법중 하나이다.
Q.박싱과 언박싱을 왜 지양해야되는데?
A.
박싱과 언박싱은 내부적으로 상당한 오버헤드를 감수하고 사용
박싱
-박싱 순서-
1) 힙 영역에 새로운 메모리를 할당하고,
2) 스택의 값을 힙 메모리로 복사한 뒤
3) 힙 메모리의 주소 값을 갖는 새로운 스택 메모리를 할당하는 과정을 거친다.
박싱은 값 하나 옮기는데 메모리 참조를 많이 하는데, 이로 인해 시간적 오버헤드가 발생한다.
언박싱의 경우도 위와 비슷한 순서로 진행한다.
하지만 언박싱은 새로운 문제를 야기하는데, 바로 가비지를 생성한다는 것이다.
즉 언박싱은 그 자체로도 오버헤드가 있지만 가비지를 생성함으로 인해 GC를 동작시키는 잠재적 오버헤드까지 가진 셈이다.
Q.그럼 박식/언방식의 대안은 있어?
A. 제네릭을 사용하면 박싱 문제를 해결하여 사용 할 수있다.
p.s 박싱/언박싱 관련 정보는 해당 블로그를 참고하여 작성하였으며 , 해당 블로그의 글을 참고하는것이 좋다.
[C#] 박싱(Boxing)과 언박싱(Unboxing)이란?
박싱(Boxing)과 언박싱(Unboxing)의 기본 개념과 사용법, 특징을 정리한다.
velog.io
'내일배움캠프_Unity_6기 > TIL(Today I Learend)' 카테고리의 다른 글
TIL : 2024-10-03(목) :: C# 람다식 , Predicate<T> (1) | 2024.10.03 |
---|---|
TIL : 2024-10-02(수) :: C# 직렬화/역직렬화시 주의할점(접근제한자로 인한 더미데이터 생성 및 데이터가 복사될때) (0) | 2024.10.02 |
TIL : 2024-09-30(월) :: C# .csv 외부파일 읽고 데이터 사용하기 (0) | 2024.09.30 |
TIL : 2024-09-27(금) :: 직렬화,역직렬화 간단 설명 (0) | 2024.09.27 |
TIL : 2024-09-26(목) :: GitHub 협업시 코드컨벤션 (0) | 2024.09.26 |