반응형
C#
을 배우다 보면 값 형식(Value Type
)과 참조 형식(Reference Type
)의 차이에 대해 궁금해하는 경우가 많습니다.- 이는
C#
뿐만 아니라 대부분의 프로그래밍 언어에서 중요한 개념이며, 성능 및 메모리 관리와도 밀접한 관련이 있습니다. - 이번 글에서는 값 형식과 참조 형식의 차이를 이해하고, 이를 올바르게 사용하는 방법을 알아보겠습니다.
C#
에서 데이터 형식은 크게 값 형식 과 참조 형식 으로 나뉩니다.
Stack
메모리 에 저장됩니다.- 변수를 할당하면 값 자체를 복사 합니다.
- 변경 시 원본 데이터에는 영향을 주지 않습니다.
- 대표적인 값 형식:
int
,double
,char
,bool
,struct
,enum
-
csharp
int a = 10; int b = a; // a의 값을 b에 복사 b = 20; Console.WriteLine(a); // 10 Console.WriteLine(b); // 20
-
위 코드에서
a
의 값을b
에 복사했기 때문에b
의 값을 변경해도a
에는 영향을 주지 않습니다.
Heap
메모리 에 저장됩니다.- 변수를 할당하면 참조(메모리 주소)를 복사 합니다.
- 변경 시 원본 데이터에도 영향을 줍니다.
- 대표적인 참조 형식:
string
,array
,class
,interface
,delegate
-
csharp
class Person { public string Name; } Person p1 = new Person(); p1.Name = "Alice"; Person p2 = p1; // p1의 참조를 p2에 복사 p2.Name = "Bob"; Console.WriteLine(p1.Name); // Bob Console.WriteLine(p2.Name); // Bob
- 여기서
p1
과p2
는 같은 객체를 참조하므로p2.Name
을 변경하면p1.Name
도 영향을 받습니다.
형식 | 저장 위치 | 저장 내용 |
---|---|---|
값 형식 | Stack |
데이터 값 자체 |
참조 형식 | Heap |
메모리 주소 (참조) |
Stack
은 속도가 빠르고 작은 크기의 데이터 를 저장하는 데 적합.Heap
은 크기가 큰 객체를 저장에 적합 하고 가비지 컬렉터(GC
)에 의해 관리.
- (1) 값 형식은 변경되지 않는 데이터를 저장할 때 사용
- 예: 좌표 값(
struct
), 간단한 설정 값(enum
)
- 예: 좌표 값(
- (2) 참조 형식은 크기가 크고 변경이 필요한 데이터를 저장할 때 사용
- 예: 사용자 정보(
class
), 데이터 목록(List<T>
,Dictionary<K,V>
)
- 예: 사용자 정보(
struct
는 값 형식,class
는 참조 형식입니다.- 작은 크기의 데이터는
struct
로 만들고, 큰 객체는class
로 사용하는 것이 좋습니다.
-
csharp
struct Point { public int X; public int Y; } Point p1 = new Point { X = 10, Y = 20 }; Point p2 = p1; // 값 복사 p2.X = 30; Console.WriteLine(p1.X); // 10 Console.WriteLine(p2.X); // 30
- 값 형식과 참조 형식의 차이를 이해하면 성능 최적화 및 버그 방지 에 큰 도움이 됩니다.
- 값 형식은 독립적인 데이터 복사가 필요할 때 사용합니다.
- 참조 형식은 공유 및 변경이 필요한 데이터를 관리할 때 사용합니다.
728x90
반응형
'C# .Net' 카테고리의 다른 글
C# 인덱서(Indexer) 이해하기 (0) | 2024.11.20 |
---|---|
Ubuntu와 CentOS에서 최신 버전의 .NET 설치 방법 (0) | 2024.11.15 |
C#의 상속, 다형성, virtual, override (0) | 2024.11.11 |
C#에서의 unsafe와 fixed 키워드 사용법 (2) | 2024.11.11 |
.NET 콘솔 프로그램에서 .exe와 .dll의 차이점 및 관계 (0) | 2024.09.12 |