값 타입(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
'프로그래밍 > 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 |
댓글