CSharp 값 타입 vs 참조 타입(Value Type vs Reference Type)

양승준·2025년 4월 7일
0

CSharp

목록 보기
16/20
post-thumbnail

먼저, 왜 이런 걸 배워야 할까?

컴퓨터는 모든 데이터를 메모리에 저장한다. 그런데 이 데이터를 저장하고 사용하는 방식에는 두 가지 큰 차이가 있다.

  • 📦 값 타입(Value Type): 진짜 데이터를 직접 저장
  • 🔗 참조 타입(Reference Type): 데이터가 있는 주소만 저장

이 두 개념을 잘 알아야 성능 좋은 코드, 버그 없는 코드, 효율적인 메모리 사용이 가능해진다.


📦 값 타입이란?

  • 숫자처럼 간단한 값을 저장할 때 사용
  • 복사하면 진짜 값 자체가 복사
  • 메모리의 스택(Stack) 이라는 공간에 저장

예시

int a = 5;
int b = a;
b = 10;

Console.WriteLine(a); // 5
Console.WriteLine(b); // 10

ab는 서로 독립적인 값


🔗 참조 타입이란?

  • 복잡한 데이터 (예: 객체, 배열 등)를 다룰 때 사용돼요.
  • 복사하면 데이터가 있는 위치(주소)만 복사돼요.
  • 실제 데이터는 힙(Heap)이라는 공간에 저장돼요.

예시

class Person 
{
    public string Name;
}

Person p1 = new Person();
p1.Name = "Alice";

Person p2 = p1;
p2.Name = "Bob";

Console.WriteLine(p1.Name); // Bob
Console.WriteLine(p2.Name); // Bob
[Stack]        [Heap]
p1 ─────┐      ┌────────────┐
        └────> │ Person    │
               │ Name: Bob │
p2 ──────────>  └────────────┘

p1p2같은 것을 가리키고 있다(주소 복사)


값 타입 vs 참조 타입 차이표

항목값 타입참조 타입
저장 위치스택
복사 방식값 복사주소 복사
서로 독립적인가?아니요 (같은 객체 공유)
기본 예시int, floatclass, array, string

구조체 안에 클래스가 있으면?

struct Car 
{
    public int Speed;
    public Engine EngineRef;
}
  • Speed는 값 타입 → 스택에 저장됨
  • EngineRef는 참조 타입 → 힙에 저장됨
  • Car를 복사하면 Engine 은 복사되지 않고 같은 객체를 공유함 → 조심!

profile
지모창말, 미모창.

0개의 댓글