C#/.NET(5): 값 타입과 참조 타입의 차이
값 타입과 참조 타입 비교
값 타입과 참조 타입은 사실 학부 수업에서 sub-program을 배울 때, 배웠던 내용이다. 정확히 말하면, 학교에서 변수 바인딩과 참조 바인딩으로 프로그래밍 언어 수업시간에 배웠었다.
둘의 결정 적인 차이는 데이터를 복사하느냐 하지 않고 참조하느냐의 차이이다.
아래는 값 타입과 참조 타입을 보기 쉽게 비교한 테이블과 그래프이다.
| 값 타입 | 참조 타입 |
|---|---|
| System.ValueType 에서 상속 | System.Object에서 상속 |
| 복사 전달 | 참조 전달 |
| 할당 시, 값이 복사 | 할당 시, 참조(주소값)가 복사 |
| Sealed | |
| stack 영역에 저장 | heap 영역에 저장 |
| Int, Double, DateTime, Bool … Structs | Object, String, List |

[그림 출처: C#/.NET - 50 Essential Interview Questions (Junior Level) > section 4 중]
값 타입과 참조 타입 예시
- 값 타입-C#코드
using System;
namespace _2022_06_28
{
internal class Class1
{
static void Main(string[] args)
{
var num1 = 55;
var num2 = num1;
num1++;
Console.WriteLine(num1); // 56
Console.WriteLine(num2); // 55
}
}
}
- 참조 타입-C#코드
using System;
namespace _2022_06_28
{
internal class Class1
{
static void Main(string[] args)
{
var num1 = new int[] { 1 };
var num2 = num1;
num1[0] = 99;
Console.WriteLine(num1[0]); // 99
Console.WriteLine(num2[0]); // 99
}
}
}
댓글남기기