C# 구조체

C#의 복합 데이터 형식에는 클래스 말고도 구조체(structure)라는 것이 있습니다.

구조체 선언


struct MyStruct
{
    public int MyField1;
    public int MyField2;

    public void MyMethod()
    {
        //
    }
}

구조체는 클래스와 비슷합니다. struct 키워드를 이용해서 선언합니다.

클래스와 구조체 차이점


특징클래스구조체
키워드classstruct
형식참조 형식값 형식
복사얕은 복사(Shallow Copy)깊은 복사(Deep Copy)
인스턴스 생성new 연산자와 생성자 필요선언만으로도 생성
생성자매개 변수 없는 생성자 선언 가능매개 변수 없는 생성자 선언 불가능
상속가능모든 구조체는 System.Object 형식을
상속하는 System.ValueType으로부터
직접 상속받음

가장 중요한 차이는 클래스는 참조 형식이고 구조체는 값 형식인 것입니다.

예제


using System;

namespace Structure
{
    struct Point3D
    {
        public int X;
        public int Y;
        public int Z;

        public Point3D(int X, int Y, int Z)
        {
            this.X = X;
            this.Y = Y;
            this.Z = Z;
        }

        public override string ToString()
        {
            return string.Format($"{X}, {Y}, {Z}");
        }
    }

    class MainApp
    {
        static void Main(string[] args)
        {
            // 선언만으로도 인스턴스 생성
            Point3D p3d1;
            p3d1.X = 10;
            p3d1.Y = 20;
            p3d1.Z = 40;

            Console.WriteLine(p3d1.ToString());

            // 생성자를 이용한 인스턴스 생성도 가능
            Point3D p3d2 = new Point3D(100, 200, 300);
            Point3D p3d3 = p3d2; // 깊은 복사
            p3d3.Z = 400;

            Console.WriteLine(p3d2.ToString());
            Console.WriteLine(p3d3.ToString());
        }
    }
}
출력 결과

10, 20, 40
100, 200, 300
100, 200, 400

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다