캐스팅
캐스팅이란 변수의 자료형을 다른 자료형으로 변환하는 연산을 말한다.
이 캐스팅에는 암시적 캐스팅과 명시적 캐스팅의 두 종류로 나뉘는데, 전자의 경우 단위가 작은 자료형에서 단위가 큰 자료형으로 캐스팅 하는경우 (float에서 double형으로 캐스팅 등등)가 있다.
short a = 20;
int b = a;
이런 형식으로 말이다.
명시적 캐스팅의 경우 자료형의 형태가 다르거나 더 큰 자료형에서 작은 단위의 자료형으로 형 변환하는 경우 주로 사용한다.
double a = 3.14;
float b = (float) a;
float c = 2.17;
int d = (int) c;
두 경우 모두 명시적 캐스팅이지만, 조금의 차이가 존재한다.
전자의 경우 큰 단위(8바이트)에서 작은 단위(4바이트)로 자료형이 작아지기 때문에 범위를 넘은 수의 경우 사라질수 있는 위험성 때문에 명시적 캐스팅을 해준 경우이다.
후자의 경우 실수 자료형에서 정수 자료형으로 명시적 캐스팅을 해주는 경우로, 이 경우 소수점 단위가 사라지고 정수 부분만 남게 된다.
자료를 보면 2.17이 형변환 과정에서 소수점 부분인 0.17이 사라지고 2로 나오게 된 것을 알 수 있다.
박싱 & 언박싱
박싱의 경우에는 조금 다른 이야기인데, 값 형식의 데이터를 참조 형식으로 변환하는 것을 의미한다.
반대로 박싱했던 값들을 다시 원상복귀시키는 것을 언박싱이라고 한다.
값형식과 참조형식을 간단하게나마 설명하자면 변수를 복사했을 때, 값 형식의 경우 데이터를 수정한다고 그것이 연동되는 것은 아니지만, 참조형식의 경우 데이터가 연동된다는 느낌으로 이해하면 좋을 것 같다.
어떻게 박싱과 언박싱을 할수 있을까?
위에서 설명했든 캐스팅과 연관성이 짙은데, object라고 하는 자료형을 이용해보자.
이 object라고 하는 자료형은 참조형식의 모든 자료형의 부모이다.
따라서 모든 자료형을 이 object로 캐스팅이 가능하다.
int a = 314;
object b = a;
이런식으로 말이다.
반대로 언박싱을 하는 경우 다음과 같이 할수 있다.
int a = 314;
object b = (object) a;
int c = (int) b;
c라는 변수에 언박싱이 된 모습이다.
왜 사용하는가?
예를 들어 배열을 만든다고 해보자. int형 배열을 만들었다고 가정할 때, 여기에 string타입을 넣을수는 없다.
그런데 이때! object타입으로 배열을 박싱해준다면 이 배열에 숫자 뿐만 아니라 string타입의 변수도 넣을수 있게 된다.
object[] arr = new object[2]; //C#의 경우 배열을 자료형 옆에 선언한다.
arr[0] = 1;
arr[1] = "C#"
다만 메모리 이슈 때문에 요즘은 제네릭을 더 많이 사용한다.
'Programming > C C# C++' 카테고리의 다른 글
C#) 메서드와 매개변수 (0) | 2024.11.22 |
---|---|
C#) C#에서의 배열 사용 방법 (2) | 2024.11.18 |
C#) 값 형식과 참조 형식 (0) | 2024.11.13 |
C#) Null과 Void의 차이 (0) | 2024.11.13 |
1.1 + 0.1 == 1.2가 false인 이유 (1) | 2024.11.11 |