Programing/C#

C# 프로그래밍의 기초: 구조체(Struct) 이해하기

유니얼 2024. 8. 24. 14:40
728x90

C# 프로그래밍 언어에서 구조체(struct)는 특정 유형의 데이터를 하나의 논리적 단위로 그룹화하는 데 사용되는 값 타입(Value Type)입니다. 이 블로그 글에서는 구조체의 기본 개념, 특징, 그리고 C#에서의 활용 방법에 대해 자세히 살펴보겠습니다. 구조체는 클래스와 유사하지만, 몇 가지 중요한 차이점이 있습니다. 이를 이해하는 것은 효율적인 C# 프로그래밍에 매우 중요합니다.

구조체의 기본 개념

구조체는 C#에서 System.ValueType을 상속받으며, 주로 작은 데이터 그룹을 표현하는 데 사용됩니다. 구조체의 인스턴스는 스택 메모리에 저장되어, 힙 메모리를 사용하는 클래스에 비해 일반적으로 성능상의 이점을 제공합니다.

구조체의 주요 특징

  1. 값 타입: 구조체는 인스턴스가 직접 데이터를 저장하므로, 변수 간에 구조체를 복사할 때 데이터 자체가 복사됩니다. 이는 참조 타입과는 대조적으로, 참조 타입의 경우 변수 간에 데이터의 참조만이 복사됩니다.
  2. 불변성(Immutability): 구조체는 불변하게 설계하는 것이 좋습니다. 이는 구조체가 작은 데이터 묶음으로 사용되며 값이 자주 변하지 않을 때 최적화된 성능을 제공하기 때문입니다.
  3. 상속 불가: 구조체는 다른 클래스나 구조체를 상속받을 수 없습니다. 이는 구조체가 독립적인 단위로 설계되어야 함을 의미합니다. 하지만 인터페이스는 구현할 수 있습니다.
  4. 매개변수 없는 생성자 없음: C#에서 구조체는 매개변수가 없는 생성자를 가질 수 없으며, 모든 필드를 초기화해야 합니다. 이는 구조체의 데이터 무결성을 보장하는 데 도움이 됩니다.

구조체 사용 예

구조체는 좌표, 색상, 복소수 등 작은 데이터 집합을 표현할 때 주로 사용됩니다. 예를 들어, 2D 좌표를 나타내는 구조체를 다음과 같이 정의할 수 있습니다.

예제 코드:

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

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

    public double DistanceTo(Point other)
    {
        int dx = X - other.X;
        int dy = Y - other.Y;
        return Math.Sqrt(dx * dx + dy * dy);
    }
}

이 구조체는 X와 Y 좌표를 포함하고 있으며, 다른 점과의 거리를 계산하는 메서드를 제공합니다.

전체 예제 코드:


using System;

namespace CSharp_ProgramingStudy.Chapter5_OOP
{
    public class Class2
    {
        // 2D 좌표를 나타내는 구조체 정의
        public struct Point
        {
            public int X { get; } // X 좌표
            public int Y { get; } // Y 좌표

            // 생성자를 통해 좌표 초기화
            public Point(int x, int y)
            {
                X = x;
                Y = y;
            }

            // 두 점 간의 거리를 계산하는 메서드
            public double DistanceTo(Point other)
            {
                int dx = X - other.X;
                int dy = Y - other.Y;
                return Math.Sqrt(dx * dx + dy * dy);
            }
        }

        public void Run()
        {
            // Point 구조체의 인스턴스 생성
            Point p1 = new Point(0, 0); // 원점 (0, 0)
            Point p2 = new Point(3, 4); // (3, 4) 위치

            // 두 점 사이의 거리 계산
            double distance = p1.DistanceTo(p2);
            Console.WriteLine($"Distance between p1 and p2: {distance}"); // 출력: 5
        }
    }
}

결론

구조체는 값 타입 데이터를 효율적으로 관리하고, 메모리 사용을 최적화하는 데 유용합니다. 작은 크기의 데이터를 빠르게 처리해야 할 때 구조체를 활용하면 클래스를 사용하는 것보다 성능상의 이점을 누릴 수 있습니다. 그러나 크기가 큰 데이터나 자주 변경되는 데이터를 다룰 때는 클래스를 사용하는 것이 더 적합할 수 있습니다. C#에서 구조체와 클래스를 적절히 선택하여 사용하는 것은 효과적인 프로그래밍을 위해 중요합니다.

 

반응형