2 분 소요

이 글은 한빛미디어의 이것이 C#이다를 보고 공부한 내용을 정리한 글입니다.

헷갈리는 부분 위주로 정리했습니다.

데이터 형식

다양한 데이터 형식

데이터 형식은 크게 두 가지 개념으로 분류할 수 있습니다.

  • 기본 데이터 형식복합 데이터 형식
  • 값 형식참조 형식

변수의 선언

변수의 선언은 데이터 형식을 명시하고 그다음 식별자(이름)을 명시함

  • ex) int num 여기서 int가 데이터 형식 num이 식별자

초기화 : 초기화란 변수에 최초의 데이터를 할당하는 것을 의미. 선언동시에 변수의 값이 대입되는 것이다. ex) int num = 50;

리터럴 : 리터럴은 문자 그대로의 라는 의미로써 고정값을 나타내는 표기법을 말합니다. 즉, 변수에 넣는 변치 않는 데이터 값 그 자체입니다. ex) int num = 50; 에서 50이 리터럴에 해당

값 형식과 참조 형식

스택과 값 형식

  • 스택은 코드블럭{} 안에서만 존재하는 일시적인 메모리이다.
  • 값 형식은 값 자체를 저장 하는 변수이고 스택에서 생긴 값 형식들은 코드 블럭을 닫는 }을 만나면 모두 사라진다.

힙과 참조 형식

  • 힙은 코드 블럭에 따라 삭제되는 것이 아닌 별도의 청소부CLR의 가비지 컬렉터를 가지는 메모리이다.
  • 참조 형식은 힙에 데이터 값을 스택에 데이터 값을 주소를 저장하는 2중 저장 방식을 통해 데이터를 보관한다.
  • 즉, 코드 블럭 안에서 참조 형식 변수가 선언된다고 해도 코드 블럭이 끝날 때 지워지는 것은 스택에 저장된 힙의 주소를 담은 메모리 뿐이다.

object 형식

  • 어떤 데이터든지 다룰 수 있는 형식
  • 기본 데이터 형식부터 모든 복합 데이터 형식, 프로그래머가 정의한 형식까지도 모두 담아 처리할 수 있는 형식.
  • object가 모든 데이터 형식을 다룰 수 있도록 모든 데이터 형식이 object를 상속 받게 된다. 즉, object는 모든 데이터 형식의 부모이다.
  • object의 경우 참조 형식이므로 힙에 저장된다. 하지만 값 형의 데이터는 스택에 저장되기에 object에 저장하려면 박싱이라는 기능이 필요하다.

박싱과 언박싱

박싱

값 형식 데이터를 참조 형식으로 변환하는 것. 원래라면 스택에 저장되어야 했을 값 형식 데이터 참조 형식처럼 힙에 저장하고 스택에서 힙의 주소를 가르키게 하는 것

ex) object obj = 50;

언박싱

참조 형식을 값 형식으로 변환하는 것. ex) object obj = 50; int a = (int)obj;

상수

  • 변하지 않는 값.
  • const를 앞에 붙여 선언하고 한 번 선언한 뒤 값을 변경할 수 없음.
  • 변수 처럼 이름을 정해주고 사용하는 고정된 값이라고 생각하면 편함. ex) const int one = 1

열거 형식 enum

  • 상수의 집합이라고 생각하면 됨.
  • 상수에서의 const 대신 enum을 사용하고 상수와 같이 선언 뒤 값 변경 X.
  • ex) enum DialogResult {YES, NO, CANCLE, CONFIRM, OK}
  • 여기서 중요한 점은 예시에서 선언된 DialogResult는 변수가 아니라 새로운 형식을 선언한 것이라는 것이다.
  • 새로 만든 형식으로 취급하여 변수 선언을 할 수 있다. ex) DialogResult result = DialogResult.YES;
  • 이런 enum과 같은 것을 사용자 정의 데이터 형식이라고 하며 enum외에도 class, struct 등이 있다.

Nullable 형식

  • 어떤 값도 가지지 않는 변수
  • 데이터_형식? 변수_이름; 로 선언 ex) int? a;
  • 모든 Nullable 형식은 HasValue와 Value 두가지 속성을 가지고 있음.
  • Numllable형식은 값 형만 가능하고 참조 형식은 불가능.

    HasValue

  • 해당 변수가 값을 가지고 있는지 아닌지 나타냄
  • 값을 가지고 있다면 true, 아니라면 false

    Value

  • 해당 변수의 값을 추출

var

  • 형식을 딱히 정해주지않고 컴파일러가 추론하게 하는 형식
  • 선언과 동시에 초기화 해주어 컴파일러가 추론하게함.
  • ex) var a = 3; a는 int 형식 ex) var b = "Hello"; b는 string 형식

var는 지역 변수로만 사용 가능

var과 object의 차이

  • object는 object 형식이다. 컴파일돼서 실행되면 CLR은 object를 object형식으로 받아들여 처리하나 var의 경우는 var자체가 사용됐다는 것을 인지하지 못한다.
  • ex)object obj = 20; 은 CLR이 오브젝트 형식이 20을 박싱해서 저장한 것을 알지만 var v = 20;int v = 20;으로 인식하게 된다.
  • 또한 var은 지역 변수로만 사용가능하나 object는 그렇지 않다.

태그:

카테고리:

업데이트:

댓글남기기