본문 바로가기
유니티 공부/C# 문법

C# 문법 - Object(박싱과 언박싱)

by 코딩하는 돼징 2023. 4. 10.
반응형

Object 데이터 타입

모든 데이터 타입의 조상이다. 그러므로 값 형식 (int short) 및 참조 형식(struct, class)등이 Object의 상속 받는다.

그러므로 Object는 데이터 타입의 제한이 없으므로 편리하게 사용할 수 있다.

하지만 Object는 참조 타입으로 실행이 되기 때문에 무분별하게 사용하게 되면 메모리 낭비가 발생하게 된다.


01 boxing

쉽게 택배로 예를 들어보자 만약 유리병을 택배로 보내고 싶으면 유리병을 택배로 포장하고 택배 회사로 보내게된다. 여기에서 유리병은 값타입, 택배 포장은 참조타입으로 포장(박싱), 택배회사에 보냄은 참조 타입만 받는 매개변수에 전달이다.

값 형식을 object를 통해서 참조 형식으로 변환

// boxing
int p = 123; // 값 타입
object o = p; // (자동으로 박싱)박싱 후 o에 들어가는 상황

int i = 123;
object o = i; // i의 값을 객체 o에게 복사, 암시적으로 변환

i에 암시적으로 boxing 연산을 적용

1. 힙에 객체를 할당한다.

2. 힙에 있는 o 형식의 값을 참조하는 int 객체의 참조(객체를 가리키는 주소)가 스택에 생성된다. 이 값은 변수 i에 할당된 값 형식 값의 복사본이다. 


02 unboxing

참조 타입의 값을 값 타입으로 변환, boxing과 달리 명시적으로 변환

//unboxing
int num = (int)obj;
string str = (string)obj2;

int i = 123; // 값 형식 변수
object o = i // boxing
int j = (int)o; // unboxing

1. 개체 인스턴스가 지정한 값 형식을 boxing 한 값인지 확인한다.

2. 인스턴스의 값을 값 형식 변수에 복사한다.

 

반응형

'유니티 공부 > C# 문법' 카테고리의 다른 글

C# 문법 - this 키워드  (0) 2023.04.11
C# 문법 - 생성자  (0) 2023.04.11
C# 문법 - 스택과 힙  (0) 2023.04.11
C# 문법 - 복사(값)와 참조  (0) 2023.04.10
C# 문법 - Generic, Generic Constraints, Where  (0) 2023.04.10

댓글