[C# 7.0] ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ (1) - ํŒจํ„ด ๋งค์นญ

2023. 1. 14. 17:56ยท๐Ÿ“ Language/โœ C#

C# 7.0์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ

 

  • ํŒจํ„ด ๋งค์นญ
  • ํŠœํ”Œ (Tuple)
  • ๋กœ์ปฌ ํ•จ์ˆ˜ (Local Function)
  • out ํŒŒ๋ผ๋ฏธํ„ฐ
  • ์ž๋ฆฟ์ˆ˜ ๋ถ„๋ฆฌ์ž์™€ ์ด์ง„ ๋ฆฌํ„ฐ๋Ÿด
  • Deconstructor
  • ref local๊ณผ ref return
  • async ์ปค์Šคํ…€ ๋ฆฌํ„ด ํƒ€์ž…
  • ํ–ฅ์ƒ๋œ Expression-bodied ํ‘œํ˜„
  • throw expression

 

https://www.csharpstudy.com/Latest/CS7-new-features.aspx

 

C# 7.0 ์ƒˆ๊ธฐ๋Šฅ - C# ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฐ์šฐ๊ธฐ (Learn C# Programming)

๋ณธ ์›น์‚ฌ์ดํŠธ๋Š” ๊ด‘๊ณ ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ด‘๊ณ  ํด๋ฆญ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ˆ˜์ต๊ธˆ์€ ๋ชจ๋‘ ์›น์‚ฌ์ดํŠธ ์„œ๋ฒ„์˜ ์œ ์ง€ ๋ฐ ๊ด€๋ฆฌ, ๊ทธ๋ฆฌ๊ณ  ๊ธฐ์ˆ  ์ฝ˜ํ…์ธ  ํ–ฅ์ƒ์„ ์œ„ํ•ด ์“ฐ์—ฌ์ง‘๋‹ˆ๋‹ค.

www.csharpstudy.com

 

1. ํŒจํ„ด(Pattern) ๋งค์นญ

ํŒจํ„ด ๋งค์นญ์ด๋ž€ ์ถ”์ƒ์  ์˜๋ฏธ์—์„œ ์–ด๋–ค ๋Œ€์ƒ์ด ํŠน์ •ํ•œ ํŒจํ„ด์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๊ฐ€๋ฅผ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์–ด๋– ํ•œ ๊ฐ์ฒด ๋ฆฌ์ŠคํŠธ์—์„œ ํŠน์ •ํ•œ ์„ฑ๊ฒฉ์„ ๊ฐ–๋Š” ๊ฐ์ฒด๋“ค์„ ์ถ”์ถœํ•ด ๋‚ผ ๋•Œ ํŒจํ„ด ๋งค์นญ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

C# 7.0์—์„œ๋Š” ์•„๋ž˜ 3๊ฐ€์ง€ ํŒจํ„ด์„ ์ง€์›ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ is ์—ฐ์‚ฐ์ž์™€ switch ๋ฌธ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

  • ์ƒ์ˆ˜ ํŒจํ„ด(const pattern): ํŠน์ • ์ƒ์ˆ˜๊ฐ’์„ ์‚ฌ์šฉํ•ด์„œ ํŒจํ„ด์„ ์ฒดํฌํ•œ๋‹ค.
  • ํƒ€์ž… ํŒจํ„ด(type pattern): ์–ด๋–ค ๊ฐ์ฒด๊ฐ€ ํ•ด๋‹น ํƒ€์ž…์˜ ํ˜น์€ ๊ทธ ํŒŒ์ƒํด๋ž˜์Šค์˜ ๊ฐ์ฒด์ธ์ง€, ๋˜๋Š” ์–ด๋–ค ์ธํ„ฐํŽ˜์ด์Šค ํƒ€์ž…์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ๋“ฑ์„ ์ฒดํฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถ”๊ฐ€๋กœ C# 7.0์—์„œ๋Š” ํ•ด๋‹น ํƒ€์ž…์— ์ƒ์‘ํ•˜๋Š” ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜๋ฅผ ์ œ๊ณตํ•˜์—ฌ ํ•ด๋‹น ํƒ€์ž…์˜ ์†์„ฑ์„ ์บ์ŠคํŒ… ์—†์ด ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • var ํŒจํ„ด(var pattern): ํƒ€์ž… ๋Œ€์‹  var๋ฅผ ์“ฐ๋Š” ๊ฒƒ์ด๋‹ค.

 

1) is ์—ฐ์‚ฐ์ž

์ด์ „์—๋Š” ์–ด๋–ค ๊ฐ์ฒด๊ฐ€ ์ง€์ •๋œ ํƒ€์ž…์˜ ๊ฐ์ฒด์ธ์ง€๋ฅผ ์ฒดํฌํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉ๋˜์—ˆ์œผ๋ฉฐ is ์—ฐ์‚ฐ์ž ๋’ค์—๋Š” ํ•ญ์ƒ ํƒ€์ž…์„ ์ง€์ •ํ•ด์•ผ ํ–ˆ๋‹ค. C# 7.0์—์„œ๋Š” ํƒ€์ž… ์ด์™ธ์— ํŒจํ„ด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

object[] data = { 1, null, 10, new Circle(5), new Person("Lee"), "" };

foreach (var item in data)
{
    // 1. ์ƒ์ˆ˜ ํŒจํ„ด(const pattern)
    if (item is null)
    {
        Console.WriteLine("NULL ์ฐพ์•˜์Œ");
    }
    else if (item is 10)
    {
        Console.WriteLine("10 ์ฐพ์•˜์Œ");
    }
    
    // 2. ํƒ€์ž… ํŒจํ„ด(type pattern)
    if (item is Circle circ)
    {
        WriteLine(circ.Radius);
    }    
}

 

2) switch ๋ฌธ

์ด์ „์—๋Š” int, string, bool ๋“ฑ์˜ ๊ธฐ๋ณธ ํƒ€์ž…๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. C# 7.0์—์„œ๋Š” ํŒจํ„ด ๋งค์นญ์„ ์œ„ํ•ด ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

private void PrintArea(List<Shape> shapes)
{
    foreach (var shape in shapes)
    {
        switch (shape)
        {
            // 1. ์ƒ์ˆ˜ ํŒจํ„ด(const pattern)
            case null:
                WriteLine("Skip");
                break;

            // 2. ํƒ€์ž… ํŒจํ„ด(type pattern)
            case Circle c:
                WriteLine($"์›: {c.Radius * c.Radius * Math.PI}");
                break;
            case Rect r when r.Width == r.Height:
                WriteLine($"์ •์‚ฌ๊ฐํ˜•: {r.Width * r.Width}");
                break;
            case Rect r:
                WriteLine($"์‚ฌ๊ฐํ˜•: {r2.Width * r2.Height}");
                break;

            default:
                WriteLine("๋ชจ๋ฅด๋Š” ๋ชจ์–‘");
                break;
        }
    }
}

class Shape {}
class Circle : Shape { /* ์ƒ๋žต */ }
class Rect : Shape { /* ์ƒ๋žต */ }
List<int> vip = new List<int> { 1, 3, 5, 9 };
List<int> active = new List<int> { 10, 13, 15, 19 };
List<int> blacklist = new List<int> { 7, 14, 12, 133 };

private void CheckCustomer(int id)
{
    switch(id)
    {
        // 3. var ํŒจํ„ด(var pattern)
        case var _id when (vip.Contains(_id)):
            WriteLine("VIP");
            // VIP 
            break;
        case var _id when (active.Contains(_id)):
            //...
            break;
        case var _id when (blacklist.Contains(_id)):
            //...
            break;
        default:
            //...
            break;
    }
}
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)
'๐Ÿ“ Language/โœ C#' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [C# 7.0] ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ (3) - out ํŒŒ๋ผ๋ฏธํ„ฐ, ๋ฆฌํ„ฐ๋Ÿด ํ‘œํ˜„
  • [C# 7.0] ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ (2) - ํŠœํ”Œ(Tuple), ๋กœ์ปฌ ํ•จ์ˆ˜(Local Function)
  • [C# 6.0] ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ (2) - ๋ฌธ์žฅ ๋ ˆ๋ฒจ, ํด๋ž˜์Šค ๋ฉค๋ฒ„ ๋ ˆ๋ฒจ
  • [C# 6.0] ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ (1) - ํ‘œํ˜„์‹ ๋ ˆ๋ฒจ
Blxxming
Blxxming
CS ์ง€์‹๊ณผ ๊ณต๋ถ€ํ•˜๋‹ค ๋ฐฐ์šด ๊ฒƒ, ๊ฒฝํ—˜ํ•œ ๊ฒƒ ๋“ฑ์„ ๊ธฐ๋กํ•˜๋Š” ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
  • Blxxming
    ๐Ÿ’ก๋ฒˆ๋œฉ๐Ÿ’ก
    Blxxming
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
  • ๊ณต์ง€์‚ฌํ•ญ

    • Tech Interview
    • ๐Ÿ“š Tech (246)
      • ๐Ÿ“ Computer Science (96)
        • โœ OS (12)
        • โœ Network & Web (10)
        • โœ Database (11)
        • โœ Data Structure (6)
        • โœ Algorithm (40)
        • โœ Design Pattern (9)
        • โœ Cloud Computing (3)
        • โœ (5)
      • ๐Ÿ“ Language (73)
        • โœ Language (6)
        • โœ C & C++ (11)
        • โœ C# (19)
        • โœ JAVA (37)
      • ๐Ÿ“ Game (43)
        • โœ Computer Graphics (2)
        • โœ Unity (14)
        • โœ Unreal (26)
        • โœ (1)
      • ๐Ÿ“ Book (34)
        • โœ Effective (3)
        • โœ Game Server (16)
        • โœ Clean Code (14)
        • โœ (1)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.0
Blxxming
[C# 7.0] ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ (1) - ํŒจํ„ด ๋งค์นญ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”