ํํ (Tuple)
์ฌ๋ฌ ํ๋๋ฅผ ๋ด์ ์ ์๋ ๊ตฌ์กฐ์ฒด๋ก, ์ญ์ ๊ฐ ํ์์ด๋ค.
์ฝ๊ธฐ ์ ์ฉ์ด ์๋๋ฏ๋ก, ํํ ๊ตฌ์ฑ ํ๋์ ๊ฐ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค.
๊ตฌ์กฐ์ฒด์ ๋ฌ๋ฆฌ, ํํ์ ํ์ ์ด๋ฆ์ด ์๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฆ์์์ ์ฌ์ฉํ ๋ณตํฉ ๋ฐ์ดํฐ ํ์์ ์ ์ธํ ๋ ์ ํฉํ๋ค.
๋ช ๋ช ๋์ง ์์ ํํ(Unnamed Tuple)
๋ค์๊ณผ ๊ฐ์ด ํ๋์ ์ด๋ฆ์ ์ง์ ํ์ง ์๋ ํํ์ ๋ช ๋ช ๋์ง ์์ ํํ(Unnamed Tuple)์ด๋ผ๊ณ ํ๋ค.
var tuple = (123, 789);
ํํ์ ๊ดํธ ์ฌ์ด์ ๋ ๊ฐ ์ด์์ ํ๋๋ฅผ ์ง์ ํจ์ผ๋ก์จ ๋ง๋ค์ด ์ง๋ค. ์ ์์ ์ฒ๋ผ ์์ฑํ ๊ฒฝ์ฐ,
C# ์ปดํ์ผ๋ฌ๋ ์๋์ ์ผ๋ก 123์ Item1์ด๋ผ๋ ํ๋์ ๋ด๊ณ , 789๋ฅผ Item2๋ผ๋ ํ๋์ ๋ด๋๋ค.
var tuple = (123, 789);
Console.WriteLine($"{tuple.Item1}, {tuple.Item2}"); // 123, 789 ์ถ๋ ฅ
ํํ์ด System.ValueTuple ๊ตฌ์กฐ์ฒด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง๊ธฐ ๋๋ฌธ์ ์์ ๊ฐ์ด ๋ด๊ธด๋ค๊ณ ํ๋ค.
๋ช ๋ช ๋ ํํ(Named Tuple)
ํ๋๋ช :์ ๊ผด๋ก ํ๋์ ์ด๋ฆ์ ์ง์ ํ์ฌ ์ ์ธํ ์๋ ์๋ค.
var tuple = (Name:"DaekYou", Age: 25);
Console.WriteLine($"{tuple.Name}, {tuple.Age}"); // DaekYou, 25 ์ถ๋ ฅ
ํํ ๋ถํดํ๊ธฐ
๋ค์๊ณผ ๊ฐ์ด ํํ์ ๋ถํดํ ์๋ ์๋ค.
var tuple = (Name:"DaekYou", Age: 25);
var (name, age) = tuple; // ๋ถํด
Console.WriteLine($"{name}, {age}"); // DaekYou, 25 ์ถ๋ ฅ
ํน์ ํ๋๋ฅผ ๋ฌด์ํ๊ณ ์ถ๋ค๋ฉด, _๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
var tuple = (Name:"DaekYou", Age: 25);
var (name, _) = tuple; // Age ํ๋๋ ๋ฌด์
Console.WriteLine($"{name}"); // DaekYou ์ถ๋ ฅ
๋ค์๊ณผ ๊ฐ์ด ์ฌ๋ฌ ๋ณ์๋ฅผ ๋จ ๋ฒ์ ์์ฑํ๊ณ ์ด๊ธฐํํ์ฌ ๋ถํดํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
var (name, age) = ("DaekYou", 25);
Console.WriteLine($"{name}, {age}"); // DaekYou, 25 ์ถ๋ ฅ
switch ๋ฌธ ๋๋ switch ์์ ๋ถ๊ธฐ ์กฐ๊ฑด์ ํ์ฉ ํด๋ณด๊ธฐ
ํํ์ด ๋ถํด๊ฐ ๊ฐ๋ฅํ ์ด์ ๋ ๋ถํด์(Deconstructor)๋ฅผ ๊ตฌํํ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ถํด์๋ฅผ ๊ตฌํํ๊ณ ์๋ ๊ฐ์ฒด๋ฅผ ๋ถํดํ ๊ฒฐ๊ณผ๋ฅผ switch ๋ฌธ์ด๋ switch ์์ ๋ถ๊ธฐ ์กฐ๊ฑด์ ํ์ฉํ ์ ์๋ค.
์ด๊ฒ์ ์์น ํจํด ๋งค์นญ(Positional Pattern Matching)์ด๋ผ๊ณ ํ๋ค.
์๋ณ์๋ ๋ฐ์ดํฐ ํ์์ด ์๋, ๋ถํด๋ ์์์ ์์น์ ๋ฐ๋ผ ๊ฐ์ด ์ผ์นํ๋์ง๋ฅผ ํ๋จํ๋ ๊ฒ์ด๋ค.
var daekYou = (job:"ํ์", age: 17);
var discountRate = daekYou switch
{
("ํ์", int n) when n < 18 => 0.2, // ํ์ & 18์ธ ๋ฏธ๋ง
("ํ์", _) => 0.1, // ํ์ & 18์ธ ์ด์
("์ผ๋ฐ", int n) when n < 18 => 0.1, // ์ผ๋ฐ & 18์ธ ๋ฏธ๋ง
("์ผ๋ฐ", _) => 0.05, // ์ผ๋ฐ & 18์ธ ์ด์
_ => 0,
};
/* C# 8.0 ์ด์ ๋ฒ์ ์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฌธ๋ฒ์ธ ๊ฒ ๊ฐ๋ค. */
๋ค์๊ณผ ๊ฐ์ด ๋ฉ์๋๋ฅผ ํตํด ํ์ฉํ ์๋ ์๋ค.
static double GetDiscountRate(object client)
{
return cleint switch
{
("ํ์", int n) when n < 18 => 0.2, // ํ์ & 18์ธ ๋ฏธ๋ง
("ํ์", _) => 0.1, // ํ์ & 18์ธ ์ด์
("์ผ๋ฐ", int n) when n < 18 => 0.1, // ์ผ๋ฐ & 18์ธ ๋ฏธ๋ง
("์ผ๋ฐ", _) => 0.05, // ์ผ๋ฐ & 18์ธ ์ด์
_ => 0,
};
}
static void Main(string[] args)
{
var alice = (job:"ํ์", age: 17);
var bob = (job:"ํ์", age: 23);
var charlie = (job:"์ผ๋ฐ", age: 15);
var dave = (job:"์ผ๋ฐ", age: 21);
Console.WriteLine($"alice : {GetDiscountRate(alice)}"); // alice : 0.2
Console.WriteLine($"bob : {GetDiscountRate(bob)}"); // bob : 0.1
Console.WriteLine($"charlie : {GetDiscountRate(charlie)}"); // charlie : 0.1
Console.WriteLine($"dave : {GetDiscountRate(dave)}"); // dave : 0.05
}
๋ช ๋ช ๋์ง ์์ ํํ๊ณผ ๋ช ๋ช ๋ ํํ์ ํ๋์ ์์ ํ์์ด ๊ฐ์ผ๋ฉด ํ ๋น ๊ฐ๋ฅํ๋ค.
var unnamed = ("DaekYou", 25); // (string, int)
var named = (Name: "CoCo", Age: 1); // (string, int)
named = unnamed;
Console.WriteLine($"{named.Name}, {named.Age}"); // DaekYou, 25 ์ถ๋ ฅ
named = ("Rengar", 5);
unnamed = named;
Console.WriteLine($"{unnamed.Item1}, {unnamed.Item2}"); // Rengar, 5 ์ถ๋ ฅ
- ์ด ๊ธ์ <์ด๊ฒ์ด C#์ด๋ค> ์ฑ ์ ๋ฐํ์ผ๋ก ๊ณต๋ถํ ๊ธ์ ๋๋ค.
'๐ฏ๏ธLanguage > C#' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C#] ๊ฐ์ฒด์งํฅ์ ๊ฝ, ์ธํฐํ์ด์ค(Interface) - 2ํธ (0) | 2022.03.22 |
---|---|
[C#] ๊ฐ์ฒด์งํฅ์ ๊ฝ, ์ธํฐํ์ด์ค(Interface) - 1ํธ (2) | 2022.03.22 |
[C#] ๊ตฌ์กฐ์ฒด(Structure)์ ๋ํด ์์๋ณด์! (0) | 2022.03.21 |
[C#] ํ์ฅ ๋ฉ์๋ (Extension Method) (0) | 2022.03.21 |
[C#] ์ค์ฒฉ ํด๋์ค(Nested Class)์ ๋ถํ ํด๋์ค(Partial Class) (2) | 2022.03.21 |