반응형
구조체(struct)'값 타입 vs 참조 타입'
• C#은 Value Type Reference Type을 지원한다. 
• C#에서는 struct를 사용하면 Value Type을 만들고, class 를 사용하면 Reference Type을 만든다.
• C# .NET의 기본 데이타형들은 struct로 정의되어 있다. 즉, int, double, float, bool 등의 기본 데이타 타입모두 struct로 정의된 Value Type이다. Value Type은 상속될 수 없으며, 주로 상대적으로 간단한 데이타 값을 저장하는데 사용된다. 반면에  Reference Typeclass를 정의하여 만들며 상속이 가능하고, 좀 더 복잡한 데이타와 행위들을 정의하는 곳에 많이 사용된다. 

구조체의 특징
1. 값 타입 (Value Type)
2. 스택 메모리(Stack Memroy)에 할당
3. 매개변수로 전달 시 값이 복사
4. 생성자, 메서드, 프로퍼티를 가질 수 있다.
5. 상속을 지원하지 않는다.

 

1. 구조체 예시
public struct Point
{
    public int X { get; set; }
    public int Y { get; set; }

    public Point(int x, int y)
    {
        X = x;
        Y = y;
    }
}​

 

2. 값 타입 vs 참조 타입
C#의 타입은 크게 값 타입참조 타입으로 나눌 수 있습니다.

값 타입 (Value Types)
• 직접 값을 저장
• 스택 메모리에 할당
• 복사 시 실제 값이 복사됨
• 예: int, float, bool, struct 등

참조 타입 (Reference Types)
• 값에 대한 참조(메모리 주소)를 저장
• 힙 메모리에 할당
• 복사 시 참조가 복사됨
• 예: class, interface, delegate, string 등

 

3. 값 타입(Value Type)과 참조 타입(Reference Type)의 차이점
• 메모리 할당
    ⸰ 값 타입: 스택 (Stack Memory)
    ⸰ 참조 타입: 힙 (Heap Memory)

• 복사 동작
    ⸰ 값 타입: 깊은 복사
    ⸰ 참조 타입: 얕은 복사

• 성능
    ⸰ 값 타입: 작은 데이터에 대해 더 효율적
    ⸰ 참조 타입: 큰 데이터나 복잡한 객체에 적합

• null 허용
    ⸰ 값 타입: 기본적으로 null을 가질 수 없음 (Nullable 타입 제외)
    ⸰ 참조 타입: null 가능

struct ValueTypeExample
{
    public int Value;
}

class ReferenceTypeExample
{
    public int Value;
}

class Program
{
    static void Main()
    {
        // 값 타입
        ValueTypeExample v1 = new ValueTypeExample { Value = 10 };
        ValueTypeExample v2 = v1;
        v2.Value = 20;
        Console.WriteLine($"v1.Value: {v1.Value}, v2.Value: {v2.Value}");
        // 출력: v1.Value: 10, v2.Value: 20

        // 참조 타입
        ReferenceTypeExample r1 = new ReferenceTypeExample { Value = 10 };
        ReferenceTypeExample r2 = r1;
        r2.Value = 20;
        Console.WriteLine($"r1.Value: {r1.Value}, r2.Value: {r2.Value}");
        // 출력: r1.Value: 20, r2.Value: 20
    }
}​


값 타입(
Value Type) 파라미터 전달은 데이타를 복사(copy)하여 전달
참조 타입(
Reference Type) Heap 상의 객체에 대한 레퍼런스(reference)를 전달

 

 

[정리하며]

구조체 값 타입작은 크기의 데이터를 효율적으로 처리하는 데 유용하며, 참조 타입복잡한 객체나 큰 데이터를 다룰 때 적합합니다. 각 타입의 특성을 이해하고 상황에 맞게 적절히 사용하는 것이 중요합니다.

반응형

+ Recent posts