C# 프로그래밍 - 구조체(Struct)

C# 프로그래밍 - 구조체(Struct)

구조체(Struct)는 C#의 사용자 정의 데이터 형식으로 클래스와 유사한 기능(데이터를 구조화하고 관련 데이터 및 동작을 캡슐화)을 제공하지만 몇 가지 중요한 차이점이 있습니다. 구조체는 값 형식(Value Type)으로 분류되며 상속을 지원하지않습니다. 주로 작은 크기의 데이터를 효율적으로 저장하고 전달하는 데 사용됩니다. 

 

구조체의 몇가지 특징

값 형식(Value Type) - 구조체는 값 형식(value type)으로 분류됩니다. 이는 구조체 변수가 스택(stack)에 직접 저장되며 값 복사 방식으로 동작한다는것을 의미합니다. 반면  클래스(class)는 참조 형식(reference type)으로 분류되어 힙(heap)에 저장되고 변수는 참조를 가지고 있습니다.

구조체는 클래스에 비해 메모리 오버헤드가 적습니다. 이는 구조체 변수가 스택에 직접 저장되고 복사될 때에도 데이터만 복사되기 때문입니다.

멤버 변수 및 메서드 - 구조체는 멤버 변수(fields)와 메서드(methods)를 가질 수 있습니다. 멤버 변수는 구조체 데이터의 속성을 나타내며 메서드는 데이터를 조작하거나 기능을 제공합니다.

상속 미지원 - 구조체는 상속(inheritance)을 지원하지 않습니다. 클래스와는 달리 구조체는 다른 구조체에서 상속받을 수 없으며 상속 계층 구조를 형성할 수 없습니다. 구조체는 sealed상태, 즉 파생될수없는 상태입니다.

 

기타

구조체는 일반적으로 클래스보다 메모리 사용량이 작으며 생성 및 삭제가 빠릅니다. 이러한 이유로 구조체는 간단한 데이터 구조를 나타내거나 작은 크기의 데이터를 효율적으로 관리해야 할 때 유용합니다(벡터, 점, 색상, 기타)

매개변수가 없는 생성자와 소멸자를 선언할수없습니다.

 

 

구조체의 선언

접근제한자 struct 구조체이름
{
맴버변수, 메서드
}

 

 

구조체의 사용 예시1

멤버변수와 메서드를 가지는 Point 구조체를 정의합니다.

 

using System;

public struct Point
{
    public int X; 
    public int Y;

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

    public void Display()
    {
        Console.WriteLine($"X: {X}, Y: {Y}");
    }
}


class Program
{
    static void Main()
    {
        Point p1 = new Point(10, 20);
        Point p2 = new Point(5, 15);

        Console.WriteLine("Point 1:");
        p1.Display();

        Console.WriteLine("Point 2:");
        p2.Display();
    }
}

 

 

구조체의 사용 예시2

구조체는 값 형식이므로 p1을 복사하여 p2에 할당하고 p2의 X 값을 변경해도 p1에 영향을 미치지않습니다.

using System;

public struct Point
{
    public int X; 
    public int Y;

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

    public void Display()
    {
        Console.WriteLine($"X: {X}, Y: {Y}");
    }
}


class Program
{
    static void Main()
    {
        Point p1 = new Point(10, 20);

        Console.WriteLine("Point 1:");
        p1.Display();

        Point p2 = p1;
        p2.X = 100; 

        Console.WriteLine("Point 1:");
        p1.Display();
        Console.WriteLine("Point 2:");
        p2.Display();
    }
}

댓글

Designed by JB FACTORY