값 타입(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#' 카테고리의 다른 글
C# StringBuilder에 대해서 (0) | 2024.02.21 |
---|---|
C# 웹 인증(Authentication) & 권한(Authorization) 코드 작성하기 (0) | 2024.02.19 |
C# yield return을 이용한 소수 생성기 (1) | 2024.02.14 |
C# yield 이해하기 (1) | 2024.02.14 |
C# 지연 평가(lazy evaluation)에 대해서 (0) | 2024.02.13 |
댓글