C# 데이터 보관하기 (2)
object 형식
object = 어떤 물건(데이터)이든지 다룰 수 있는 데이터 형식
어떻게 할까?
→ "상속" 효과
우선 상속 관련 클래스는 나중에...
한편, C#은 object가 모든 데이터를 다룰 수 있도록 하기 위해 특별한 조치를 취했다.
모든 데이터 형식(기본 데이터 형식뿐 아니라 모든 복합 데이터 형식도)이 자동으로 object 형식으로부터 상속받게 한 것이다.
다시 말해서 object 형식이 모든 데이터 형식의 조상인 셈.

박싱과 언박싱
object 형식은 참조 형식이기 때문에 힙에 데이터를 저장한다.
그러나 int, double 형식은 값 형식이기 때문에 스택에 데이터를 할당한다.
박싱은 object 형식(참조 형식)에 값 형식의 데이터를 할당 하려고 할 때 수행 된다.
ojbect a = 20;

위 코드에서 20은 그림처럼 박스에 담겨 힙에 할당되고, a는 그 주소를 참조하고 있다.
→ 박싱
이렇게 박싱이 일어나는 경우가 있는 한편, 힙에 있던 값 형식 데이터를 값 형식 객체에 다시 할당해야 하는 경우가 있다.
object a = 20;
int b = (int)a;
위 코드에서 a 는 20이 박싱되어 저장되어 있는 힙을 참조 중
b는 a가 참조하고 있는 메모리로부터 값을 복사하려고 하는 중이다.
이 때 박싱되어 있는 값을 꺼내 값 형식 변수에 저장하는 과정 → 언박싱
문자열을 숫자로, 숫자를 문자열로
int a = 123;
string b = a.ToString();
Console.WriteLine(b);
float c = 3.14f;
string d = c.ToString();
Console.WriteLine(d);
string e = "123456";
int f = Convert.ToInt32(e); // Or int z = int.Parse(e);
Console.WriteLine(f);
string g = "1.2345";
float h = float.Parse(g);
Console.WriteLine(h);
열거 형식 - 여러 개의 상수 정리
만약 두 가지 변수가 같은 값을 가지면 안되는데 그럴 경우 !
→ 컴파일러도 잡아주지 못함
이 때 열거 형식을 사용한다. (실수를 막음)
열거 형식도 상수이긴 하지만 const 키워드를 사용하진 않고 enum 키워드를 사용
enum 열거 형식명 : 기반자료형 { 상수1, 상수2, 상수3, ...}
enum DialogResult { YES, NO, CANCEL, CONFIRM, OK }
위 선언에서 열거 형식 안에서 선언된 상수들이 어떤 값도 할당받지 않았음
선언하고 나면 첫 번째 열거 형식 요소에는 0, 그 다음은 1, 그 다음은 2의 식으로 1씩 증가한 값을 컴파일러가 자동으로 할당함
열거 형식의 각 요소는 서로 중복되지 않는 값을 갖고 있다는 데 의미가 있다
→ 각 요소가 갖고 있는 값보다는 각 요소의 이름을 사용하는 것이 그 의미에 부합함
위에 예제 코드에서 "DialogResult가 0이다"보다는 "DialogResult가 YES다"가 훨씬 의미를 잘 전달함
여기서 DialogResult는 변수가 아니고 새로운 형식이다.
DialogResult result = DialogResult.YES;
이게 DialogResult result = 0; 보다 훨씬 읽기가 좋다!
장점 : 헷갈릴 위험 적고, 나중에 고치기 쉬움.
'ETC > C#' 카테고리의 다른 글
| 데이터를 가공하는 연산자 (0) | 2021.01.11 |
|---|---|
| C# 문자열 다루기 (0) | 2021.01.10 |
| C# 데이터 보관하기 (3) (0) | 2021.01.10 |
| C# 데이터 보관하기 (0) | 2021.01.08 |
| C# 프로그램 뜯어보기 (0) | 2021.01.07 |
댓글