본문 바로가기
프로그래밍/C#

C# Value Type vs Reference Type

by bantomak 2024. 2. 15.

값 타입(Value Type)

  • 스택 메모리에 저장
  • 데이터를 직접 가지고 있음
  • 기본 타입들 대부분이 값 타입 (Booleans, Characters, DateTime, TimeSpan, 구조체)
  • 값 타입 변수를 복사하면 완전히 새로운 변수가 생기고 이는 기존 변수와 연관이 없다.

 

값 타입 예제

int a = 10;
int b = a;

b = 20;

Console.WriteLine(a);  // Output : 10
Console.WriteLine(b);  // Output : 20

 

참조 타입(Reference Type)

  • 힙 메모리에 저장
  • 참조 타입 생성 시 힙에 메모리가 할당되며 변수의 메모리 주소가 저장됨
  • Class, Interfaces, Delegates, 배열 등
  • 참조 타입 변수를 복사하면 같은 데이터를 참조하는 변수가 생성됨, 동일한 메모리 주소를 가리키기 때문에 실제 데이터에 변경이 일어나면 이를 똑같이 공유함

 

참조 타입 예제

StringBuilder sb1 = new StringBuilder("Hello");
StringBuilder sb2 = sb1;

sb2.Append(", World");

Console.WriteLine(sb1); // Output : Hello, World
Console.WriteLine(sb2); // Output : Hello, World

 

정리하자면

값 타입은 일반적으로 메모리나 성능 측면에서 더 효율적이다. 하지만 참조 타입 대비, 유연성과 기능성이 부족하다.

참조 타입은 더 유연하고 강력하다. 하지만 올바르게 사용하지 못하면 예상치 못한 사이드 이펙트를 초래한다.

 

함께 읽으면 좋은 글

 

C# Call by value와 Call by reference에 대해서

먼저 읽고 오면 좋은 글 C# Value Type vs Reference Type 값 타입(Value Type) 스택 메모리에 저장 데이터를 직접 가지고 있음 기본 타입들 대부분이 값 타입 (Booleans, Characters, DateTime, TimeSpan, 구조체) 값 타입

jettstream.tistory.com

 

메모리 구조(Memory Structure)에 대해서

메모리 구조 우리가 exe 파일을 실행하면 운영체제는 프로그램에 정의된 명령어(코드)를 바탕으로 메모리에 프로세스를 적재한다. 해당 프로세스를 위한 Code, Data, Heap, Stack 영역이 생성된다. 메

jettstream.tistory.com

 

참조 사이트

 

Value vs Reference Types In C#

#csharpinterview #juniordeveloper In C#, data types are divided into two categories Value Types and Reference Types. Understanding the difference between value types and reference types, and how they behave, is key to being proficient in C#, particularly w

www.linkedin.com

댓글