상세 컨텐츠

본문 제목

[C#] 구조체와 튜플

.NET/C#

by 클리엘 클리엘 2021. 1. 25. 10:02

본문

728x90

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}");
}

 

728x90

'.NET > C#' 카테고리의 다른 글

[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

관련글 더보기

댓글 영역