본문 바로가기
ETC/C#

C# 데이터 보관하기 (2)

by 빡구동동 2021. 1. 9.

C# 데이터 보관하기 (2)


object 형식

object = 어떤 물건(데이터)이든지 다룰 수 있는 데이터 형식

 

어떻게 할까?

→ "상속" 효과

 

우선 상속 관련 클래스는 나중에...

 

한편, C#은 object가 모든 데이터를 다룰 수 있도록 하기 위해 특별한 조치를 취했다.

모든 데이터 형식(기본 데이터 형식뿐 아니라 모든 복합 데이터 형식도)이 자동으로 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

댓글