C#은 Value Type
과 Reference Type
을 지원한다.
struct
를 사용하면 Value Type을 만들고,
class
를 사용하면 Reference Type을 만든다.
C# .NET의 기본 데이터형들은 struct
로 정의되어 있다.
즉, int, double, float, bool 등의 기본 데이터 타입은
모두 struct
로 정의된 Value Type이다.
// System.Int32 (Value Type)
public struct Int32
{
//....
}
// System.String (Reference Type)
public sealed class String
{
//....
}
구현에 있어 어떤 Type을 선택하는가는 해당 Type의 특성을 고려해서 결정해야 하는 문제이다.
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());
}
}
}