이제 막 유니티 만지면서 C# 공부 병행하는 중인데 정말 단순해 보이면서 어렵네요
void Boxing(){
int i = 10;
object o = i;
i = 20;
}
요 예제같은 경우 값 변수를 객체로서 힙 영역에 저장해서 저 상태로 i와 o를 대조하면 각각 20과 10이 출력된다는 건 알겠는데, 저 함수 안에서 벗어나도 object o는 힙 영역에 살아있다는 말이 되나요?
void Boxing(){
int i = 10;
object o = i;
i = 20;
}
void UnBoxing(){
int i = (int) o;
}
이런 식으로 말이죠. 어떻게 써야 할 지 모르겠어요
c++이면 살아있겠지만 c#은 GC가 알아서 삭제해버림 유니티 하면서 하는거면 변수의 스코프를 바꾸려고 박싱 언박싱을 하는게 아니라 저런 상황에서 (언)박싱이 일어나니 피하자 정도로 알고있으면 됨
뭔말이냐면 c# 컬렉션에 ArrayList라는 자료구조가 있는데 애가 List<Type> 이랑 다른점은 모든자료를 Object 형으로 박싱해서 저장함 값타입인 자료들을 이 ArrayList에 넣으면 매 입출력마다 (언)박싱이 일어나서 퍼포먼스가 구려짐
결론은 ArrayList말고 List쓰자 왜? 박싱 언박싱때문에! 이거만 알고있으면댐
감사합니다.