[C#] 구조체

Kim Yuhyeon·2022년 4월 1일
0

게임개발

목록 보기
12/135

Value Type vs Reference Type

C#은 Value TypeReference Type을 지원한다.

struct를 사용하면 Value Type을 만들고,
class 를 사용하면 Reference Type을 만든다.

C# .NET의 기본 데이터형들은 struct로 정의되어 있다.
즉, int, double, float, bool 등의 기본 데이터 타입은
모두 struct로 정의된 Value Type이다.

Value Type

  • 상속될 수 없으며, 주로 상대적으로 간단한 데이터 값을 저장하는데 사용된다.
  • 파라미터 전달 : 데이터를 복사(copy)하여 전달한다.

Reference Type

  • class를 정의하여 만들며 상속이 가능하고, 좀 더 복잡한 데이터와 행위들을 정의하는 곳에 많이 사용된다.
  • 파라미터 전달 : Heap 상의 객체에 대한 레퍼런스(reference)를 전달하여 이루어진다.
// System.Int32 (Value Type)
public struct Int32 
{ 
   //....
}

// System.String (Reference Type)
public sealed class String 
{
   //....
}

구현에 있어 어떤 Type을 선택하는가는 해당 Type의 특성을 고려해서 결정해야 하는 문제이다.

struct 구조체

struct는 구조체를 생성하고 Value Type을 정의하기 위해 사용된다.

많은 경우 C#에서 클래스를 사용하지만,
경우에 따라 클래스보다 상대적으로 가벼운 오버헤드를 지닌 구조체가 필요할 수 있다.

C#의 구조체는 클래스와 같이 메서드, 프로퍼티 등 거의 비슷한 구조를 가지고 있지만,
상속은 할 수 없다.

하지만 C# 구조체가 상속(inheritance)은 할 수는 없어도, 클래스와 마찬가지로 인터페이스(interface)를 구현할 수는 있다. (참조: struct 사용시 주의)

using System;

namespace MySystem
{
   class Program
   {
      // 구조체 정의
      struct MyPoint
      {
         public int X;
         public int Y;

         public MyPoint(int x, int y)
         {
            this.X = x;
            this.Y = y;
         }

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

      static void Main(string[] args)
      {
         // 구조체 사용
         MyPoint pt = new MyPoint(10, 12);
         Console.WriteLine(pt.ToString());
      }
   }
}

💡 참고 포스팅

[예제로 배우는 C# 프로그래미밍] 기초 문법 - C# 배열

0개의 댓글