C#의 복합 데이터 형식에는 클래스 말고도 구조체(structure)라는 것이 있습니다.
구조체 선언
struct MyStruct
{
public int MyField1;
public int MyField2;
public void MyMethod()
{
//
}
}
구조체는 클래스와 비슷합니다. struct 키워드를 이용해서 선언합니다.
클래스와 구조체 차이점
특징 | 클래스 | 구조체 |
---|---|---|
키워드 | class | struct |
형식 | 참조 형식 | 값 형식 |
복사 | 얕은 복사(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 |