객체형 ??? ----------------------------------------------------------------------------------------------------------------------------
C#에는 큰의미로 봐서 다음과 같은 항목들이 존재한다.
값형
참조형
참조형은 말그대로 참조하는 형태를 의미한다. C++에서 익히 들어왔던 Call by Value & Call By Reference 와 비슷하다고 보고 있다.(이해가 좀더 완벽해지면 바뀔 수도 있지만.)
이중 참조형은 다음과 같은 분류로 나뉜다.
클래스형
- 객체형 -> 요녀석이 뭐지?
- 문자열형 -> 문자열주소와 같은 개념으로 보고 있다.
배열형 -> 말그대로 배열
델리게이트형 -> 함수로의 포인터
int a = 0;
object b; -> 이녀석이 객체형이다. .net형으로는 system.object가 된다.
b = a;
이 형에는 말그대로 무엇이든 대입할수가 있다고 하며 이렇게 대입하여 객체형을 값형으로 (object형에 int를 대입함으로서) 변형시키는 것을 박스(boxing)라고 한다.
이게뭐지????? 라고 하니
object형은 메모리상 어디엔가 영역을 확보하고 있고(힙? 코드? 스택? 데이터?) 그 참조가 object에 저장된다.(힙에다가 저장한다고 합니다. 스마트포인터 같은 느낌인가?)
반대로
int a = 0;
object b;
a = (int)b; ->역시 형변환은 필요한가?
이와같이 참조형으로 부터 값형으로 변환시키는 것을 박스화 해제(unboxing)라고 한다.
이녀석 실수할 거리가 많아보인다. 예제로 나온경우에는
long l = 0;
object o;
int i;
o = l;
i = (int)o; -> 롱형을 먼저 대입하고 그걸 인트형에 대입하니 오류.
object o = 1;
int i ;
i = (int)o; -> 값형의 데이터를 object에 대입했지만 참조형의 데이터도 object형에 대입할 수 있다. 이 경우는, 박스화라고는 하지 않는다.
'게임개발공부 > C#공부' 카테고리의 다른 글
C#공부에 대해서... (0) | 2013.12.18 |
---|---|
C#에서 문자열형은? (0) | 2013.12.16 |
@의 의미가 대체 뭐지? C#에서 레퍼런스와 포인터란? 막긁어와! (0) | 2013.12.16 |
C#의 리터럴 (0) | 2013.12.16 |
ToString("") (0) | 2013.12.15 |