최대 1 분 소요

[C#03] C# 참조 타입, 값 타입

참조 타입(Reference Type)

참조 타입은 데이터의 메모리 주소를 스택 메모리에 저장합니다. 실제 데이터는 힙 메모리에 저장합니다. 변수에는 메모리 주소가 저장되며, 이 주소를 사용하여 힙 메모리에 저장된 데이터에 접근합니다. 참조 타입은 크기가 크거나 동적으로 변할 수 있는 데이터를 나타낼 때 사용되며, 여려 변수가 같은 데이터를 공유할 수 있습니다.

참조 타입 예시

  • 클래스(class)
  • 인터페이스(interface)
  • 배열(array)
  • 문자열(string)
  • 대리자(delegate)

힙(Heap)

동적으로 할당되는 메모리의 영역으로, 객체 및 데이터 구조의 인스턴스를 저장하는데 사용합니다. 객체의 수명이 스택과 별개로 관리합니다. 힙에 할당된 데이터는 명시적으로 해제되지 않으면 프로그램 종료까지 유지합니다.

값 타입(Value Type)

값 타입은 데이터의 값을 직접 스택 메모리에 저장합니다. 메모리 내에서 별도의 주소를 갖지 않고, 변수에 직접 값이 저장합니다. 보통 작은 크기의 데이터를 나타낼 때 사용되며, 스택 메모리를 사용하므로 데이터 접근이 빠르지만, 크기가 커지거나 복사될 때마다 전체 데이터가 복사되기 때문에 메모리 사용이 더 많아질 수 있습니다.

참조 타입 예시

  • 정수형(int, byte, short 등)
  • 부동 소수점(float, double)
  • Bool형(bool)
  • 문자형(char)
  • 구조체(struct)

스택(Stack)

지역 변수와 메서드 호출을 관리하는데 사용합니다. 메서드가 호출되면 호출 정보, 해당 메서드에 필요한 지역 변수 및 매개 변수가 스택 메모리에 할당합니다. 메서드의 실행이 끝나면 해당 메서드에 할당된 변수와 호출 정보가 스택에서 제거합니다. (LIFO)