박싱과 언박싱 struct와 class의 차이점에 대해서

2021. 8. 6. 12:21기술/C#

반응형

박싱과 언박싱

 

C언어의 포인터 개념, 메모리 할당등 기본기에 대해 충분히 알고 있음에도

면접을 볼 때, C#의 어떤 개념에 대해서 물어보면 막히거나 할 때가 종종있어서 당황스럽다.

깊은 복사와 옅은 복사의 개념에 대해서도 알고 있긴 한데 막상 설명해 보라고 하면 어버버 할 때가 있다.

달리고 있는 사람한테 "걷는게 무엇이죠?"라는 질문을 받는거 같은 상황..

 

아무튼 박싱과 언박싱 자주 사용하지 않는다.

CODE COMPLETE라는 책에서 가장 빠른 코드는 '실행되지 않는 코드이다'라는 글을 읽은적이 있는데

그렇다고 생각한다.

 

프로그래머는 코드를 작성할 때 어느정도 성능을 생각하며 작성해야 한다.

CPU나 GPU가 어느정도 계산을 할지 어느정도는 예상을 하고 최소 사양 권장 사양을 생각해야한다.

 

박싱과 언박싱 개념은 방금 인터넷에서 정보를 얻어본 결과 요점이 'object 자료형 변환에 비용이 발생한다.'

간혹 int형을 object형으로 변환해야 할 때가 있을 것이지만 나는 자주 사용하지 않는다.

다른 방법으로도 문제를 풀 수 있는데 굳이 박싱 언박싱 하지 않는다.

 

내가 가장 좋아하는 코딩 스타일은 C, C++, JAVA, C#를 모두 다루어 보아서 그런지

거의 공통적으로 사용할 수 있는 코딩 스타일을 좋아하는 편이다.

 

C#책을 하나 사서 읽어보려고 했으나.. 현재로서는 아닌거 같고

유니티에서 모바일 최적화 이슈가 상당히 많아서 C#만 본다고 해서 해결될 이슈는 아닌거 같다.

 

그러니까 코드를 조금 신경써서 최적화 해야 할 부분은

Update() 함수같이 프레임에 영향을 주는 코드이다. 

 

이런 함수에서 고비용 탐색 자료찾기를 한다던가 GetComponent() 등의 함수를 사용하지 않으면

아주 심각한 문제는 발생하지 않을 것이라고 생각한다.


struct와 class의 차이점

나는 class만 사용해서 struct를 왜 사용하지?라고 생각하고 있었는데

 

그냥 일반적으로 변수들의 모음 정도로 사용할 때는 struct가 좋은거 같다. 그 이유는 struct는 값 타입이라

stack 영역에 메모리가 할당이 되어 가비지컬렉터가 관리하지 않아 성능상 이점이 있는거 같다.

 

스택 영역에 메모리가 할당 되므로 너무 많은 데이터를 struct로 만들 필요는 없고

'빠른처리에 필요한 데이터'를 struct로 만들어야겠다.

 

struct는 16byte 이상 넘어가면 힙 영역에 메모리를 할당하므로 class와 별 차이점이 없는거 같다.

그러므로 int형 변수 4개 이상 넘어가면 struct로 만드는 의미가 없어진다.

예를들어, 유니티의 position같은 자료를 struct로 만들어야 한다.


관련 이슈는 구글 검색하면 정보가 많이 나오므로 따로 작성하지는 않겠습니다.

 

 

 

 

반응형

'기술 > C#' 카테고리의 다른 글

C# ICloneable 얕은 복사(Shallow Copy), 깊은 복사(Deep Copy)  (0) 2021.06.16