C# : 구조체
서론
- 최근 작업하고 있는 주식 프로젝트에서 디비의 체결데이터를 가져와 처리하는 로직이 있었다. 종목코드, 시가, 고가, 저가, 종가 등을 저장해야 하는데 나는 딕셔너리안의 배열을 넣는 구조로 자료구조를 이용하였다. 그런데 팀원 중 한명이 딕셔너리 구조체를 사용해보라고 알려줘서 구조체라는 개념에 대해 공부해보려고 한다.
구조체
- C#은 Value Type과 Reference Type 을 지원한다.
- C#에서는 struct를 사용하면 Value Type을 만들고, Class를 사용하면 Reference Type을 만든다.
- C# .NET의 기본 데이터형들은 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());
}
}
}
-
클래스는 실세계의 객체를 추상화하는데 존재의 이유가 있지만, 구조체는 데이터를 담기 위한 자료구조로 사용된다.
-
특징 클래스 구조체 키워드 class struct 형식 참조 형식 값 형식 복사 얕은 복사 깊은 복사 인스턴스 생성 new 연산자와 생성자 필요 선언만으로 생성 생성자 매개변수 없는 생성자 선언 가능 매개변수 없는 생성자 선언 불가능 상속 가능 모든 구조체는 System.Object 형식을 상속하는 System.Value.Type으로부터 직접 상속받는다. - 구조체는 값 형식이기 때문에 구조체의 인스턴스는 스택에 할당되고 인스턴스가 선언된 블록이 끝나는 지점에서 메모리에서 즉시 제거된다.
- 그러기 때문에 가비지 컬렉터를 호출하지 않아 클래스에 비해 속도가 빠르다.
다른 예제
struct Student {
public string name;
public int std_num;
public int age;
};
using System;
struct Student {
public string name;
public int std_num;
public int age;
};
public class MyStructTest {
public static void Main(string[] args) {
Student std; // 구조체 변수 선언
Student std2;
std.name = "최창현";
std.std_num = 20201121;
std.age = 29;
std2.name = "파덕이";
std2.std_num = 20201122;
std2.age = 30;
Console.WriteLine("Student 1 name : {0}", std.name);
Console.WriteLine("Student 1 std_num : {0}", std.std_num);
Console.WriteLine("Student 1 age : {0}", std.age);
Console.WriteLine("Student 2 name : {0}", std2.name);
Console.WriteLine("Student 2 std_num : {0}", std2.std_num);
Console.WriteLine("Student 2 age : {0}", std2.age);
}
}