1. 구조체
구조체는 클래스와 비슷하게 필드와 메서드를 가질 수 있으며 구조체 생성 시 struct 키워드를 사용합니다.
struct Car
{
public int Speed;
public string Color;
public void Drive()
{
Console.WriteLine($"Speed : {Speed}");
}
}
클래스와 비슷하지만 데이터 형식 자체가 값 형식이며 객체의 추상화를 목적으로 하는 클래스와는 달리 데이터를 구조적으로 담아두기 위한 용도로 많이 사용됩니다. 또한 구조체의 선언만으로 인스턴스가 생성되며 생성자를 완전히 생략할 수는 있으나 매개변수 없는 생성자는 선언할 수 없습니다.
static void Main(string[] args)
{
Car c;
c.Speed = 100;
c.Color = "Red";
c.Drive();
}
만약 생성자가 있고 생성자를 통해 구초체의 인스턴스를 만들려면 new키워드를 사용해야 합니다.
struct Car
{
public int Speed;
public string Color;
public Car(int s, string c)
{
Speed = s;
Color = c;
}
public void Drive()
{
Console.WriteLine($"Speed : {Speed}");
}
}
2. 튜플
튜플은 복합 데이터형식을 담을 수 있는 구조체에 해당합니다.
static void Main(string[] args)
{
var t = (123, "abc");
Console.WriteLine($"{t.Item1}");
}
튜플은 선언할때 var를 사용해야 하며 튜플에 지정한 값은 Item1, Item2... 형식의 필드로 초기화됩니다. 위 에제에서는 초기화될 값을 지정하지 않았는데 이를 '명명되지 않은 튜플'이라고 합니다.
물론 필요한 경우 다음과 같이 초기화될 필드이름을 지정하는 것도 가능합니다.
static void Main(string[] args)
{
var t = (Number : 123, Name : "abc");
Console.WriteLine($"{t.Number}");
}
튜플은 분해도 가능하며 이런 경우 선언할때와 반대로 처리하면 됩니다.
static void Main(string[] args)
{
var t = (Number : 123, Name : "abc");
var (Number, Name) = t;
Console.WriteLine($"{Number}");
}
분해할 때 가져올 필요가 없는 필드의 경우 _로 무시할 수 있으나 순서를 바꿔서는 안 됩니다.
static void Main(string[] args)
{
var t = (Number : 123, Name : "abc");
var (_, Name) = t;
Console.WriteLine($"{Name}");
}
[C#] 인터페이스와 추상클래스 (0) | 2021.01.28 |
---|---|
[C#] 클래스 (0) | 2021.01.26 |
[C#] 구조체와 튜플 (0) | 2021.01.25 |
[C#] 메서드 (0) | 2021.01.22 |
[C#] 제어문 (0) | 2021.01.21 |
[C#] 연산자 (0) | 2021.01.19 |
댓글 영역