Rainbow🌈Coder 2022. 2. 14. 14:20
728x90

νŠœν”Œλ„ μ—¬λŸ¬ ν•„λ“œλ₯Ό 담을 수 μžˆλŠ” ꡬ쑰체이닀.

ν•˜μ§€λ§Œ νŠœν”Œμ€ ν˜•μ‹ 이름이 μ—†λ‹€.

κ·Έλž˜μ„œ νŠœν”Œμ€ μ‘μš© ν”„λ‘œκ·Έλž¨ μ „μ²΄μ—μ„œ μ‚¬μš©ν•  ν˜•μ‹μ„ μ„ μ–Έν•  λ•Œκ°€ μ•„λ‹Œ,

μ¦‰μ„μ—μ„œ μ‚¬μš©ν•  볡합 데이터 ν˜•μ‹μ„ μ„ μ–Έν•  λ•Œ μ ν•©ν•˜λ‹€.

νŠœν”Œμ€ κ΅¬μ‘°μ²΄μ΄λ―€λ‘œ κ°’ ν˜•μ‹μ΄λ‹€.

κ°’ ν˜•μ‹μ€ μƒμ„±λœ 지역을 λ²—μ–΄λ‚˜λ©΄ μŠ€νƒμ—μ„œ μ†Œλ©Έλ˜κΈ° λ•Œλ¬Έμ— ν”„λ‘œκ·Έλž¨μ— μž₯기적인 뢀담을 μ£Όμ§€ μ•ŠλŠ”λ‹€λŠ” μž₯점이 μžˆλ‹€. 

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;

namespace Tuple
{ 
    class MainApp
    {
        static void Main(string[] args)
        {
            // λͺ…λͺ…λ˜μ§€ μ•Šμ€ νŠœν”Œ
            //1. μ»΄νŒŒμΌλŸ¬κ°€ νŠœν”Œμ˜ λͺ¨μ–‘을 보고 직접 ν˜•μ‹μ„ κ²°μ •ν•˜λ„λ‘ varλ₯Ό μ΄μš©ν•˜μ—¬ μ„ μ–Έ
            //2. νŠœν”Œμ€ κ΄„ν˜Έ 사이에 두 개 μ΄μƒμ˜ ν•„λ“œλ₯Ό μ§€μ •ν•¨μœΌλ‘œμ¨ λ§Œλ“€μ–΄μ§
            var a = ("슈퍼맨", 9999);
            WriteLine($"{a.Item1}, {a.Item2}"); //슈퍼맨, 9999

            // λͺ…λͺ…λœ νŠœν”Œ
            //1. μ•„λž˜μ™€ 같이 'ν•„λ“œλͺ…: κΌ΄'둜 ν•„λ“œμ˜ 이름을 μ§€μ •ν•˜μ—¬ μ„ μ–Έν•œλ‹€.
            var b = (Name: "λ°•μƒν˜„", Age: 17);
            WriteLine($"{b.Item1}, {b.Item2}"); //λ°•μƒν˜„, 17
            WriteLine($"{b.Name}, {b.Age}"); //λ°•μƒν˜„, 17

            // λΆ„ν•΄
            // μ•„λž˜μ™€ 같이 νŠœν”Œμ„ μ •μ˜ν•  λ•Œμ™€λŠ” λ°˜λŒ€μ˜ λͺ¨μŠ΅μ„ ν•˜κ³  μžˆλ‹€.
            var (name, age) = b; // (var name, var age)=b;
            WriteLine($"{name}, {age}"); //λ°•μƒν˜„, 17

            // λΆ„ν•΄2
            // νŠœν”Œ λΆ„ν•΄λ₯Ό μ΄μš©ν•˜λ©΄ λ‹€μŒκ³Ό 같이 μ—¬λŸ¬ λ³€μˆ˜λ₯Ό λ‹¨λ²ˆμ— μƒμ„±ν•˜κ³  μ΄ˆκΈ°ν™”ν•  수 μžˆλ‹€.
            // μ¦‰μ„μ—μ„œ νŠœν”Œμ„ λ§Œλ“€μ–΄μ„œ λΆ„ν•΄ν•˜λŠ” 것!
            var (name2, age2) = ("λ°•λ¬Έμˆ˜",34);
            WriteLine($"{name2}, {age2}"); //λ°•λ¬Έμˆ˜, 34

            // λͺ…λͺ…λœ νŠœν”Œ = λͺ…λͺ…λ˜μ§€ μ•Šμ€ νŠœν”Œ
            b = a;
            WriteLine($"{b.Name}, {b.Age}"); //슈퍼맨, 9999
            
            //λΆ„ν•΄μ‹œ νŠΉμ • ν•„λ“œλŠ” λ¬΄μ‹œ
            //1. μ•„λž˜μ™€ 같이 _λ₯Ό μ΄μš©ν•˜λ©΄ λœλ‹€.
            var test = (one:"μ†Œλ‚˜κΈ°" , two:999);
            var(_, two) = test; //one ν•„λ“œλŠ” λ¬΄μ‹œ
            WriteLine($"{test.one}"); //μ†Œλ‚˜κΈ°
            WriteLine($"{test.two}"); //999
        }
    }
}

λͺ…λͺ…ν•˜μ§€ μ•Šμ€ νŠœν”Œκ³Ό λͺ…λͺ…λœ νŠœν”ŒλΌλ¦¬ ν•„λ“œμ˜ μˆ˜μ™€ ν˜•μ‹μ΄ κ°™μœΌλ©΄ 할당이 κ°€λŠ₯ν•˜λ‹€.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;

namespace Tuple
{ 
    class MainApp
    {
        static void Main(string[] args)
        {
            var unnamed = ("슈퍼맨",9999); //(string, int)
            var named = (Name: "λ°•μƒν˜„", Age: 17); //(string, int)
            named = unnamed;
            WriteLine($"{named.Name}, {named.Age}");
        }
    }
}

νŠœν”Œμ΄ λΆ„ν•΄κ°€ κ°€λŠ₯ν•œ μ΄μœ λŠ” λΆ„ν•΄μžλ₯Ό κ΅¬ν˜„ν•˜κ³  있기 λ•Œλ¬Έμ΄λ‹€.

λΆ„ν•΄μžλ₯Ό κ΅¬ν˜„ν•˜κ³  μžˆλŠ” 객체λ₯Ό λΆ„ν•΄ν•œ κ²°κ³Όλ₯Ό switch λ¬Έμ΄λ‚˜ switch μ‹μ˜ λΆ„κΈ° 쑰건에 ν™œμš©ν•  수 μžˆλ‹€.

이것을 μ–΄λ €μš΄ 말둜 μœ„μΉ˜ νŒ¨ν„΄ 맀칭이라고 ν•œλ‹€.

μ‹λ³„μžλ‚˜ 데이터 ν˜•μ‹μ΄ μ•„λ‹Œ λΆ„ν•΄λœ μš”μ†Œμ˜ μœ„μΉ˜μ— 따라 값이 μΌμΉ˜ν•˜λŠ”μ§€λ₯Ό νŒλ‹¨ν•˜λŠ” 것이닀.

var alice = (job: "학생", age: 17);
var discountRate = alice switch
	{
    	("학생", int n) when n < 18 => 0.2, //학생 & 18μ„Έ 미만
        ("학생", _)                => 0.1, //학생 & 18μ„Έ 이상
        ("일반", int n) when n < 18 => 0.1, //일반 & 18μ„Έ 미만
        ("일반", _)                 => 0.05, //일반 & 18μ„Έ 이상
        _ =>0,
    };

μœ„ μ½”λ“œμ—μ„œ allice 객체가 switch μ‹μ˜ 인수둜 μ£Όμ–΄μ‘Œκ³ ,

switch 식은 aliceλ₯Ό λΆ„ν•΄ν•΄μ„œ λΆ„κΈ°λ₯Ό μˆ˜ν–‰ν•œλ‹€.

μœ„μΉ˜ νŒ¨ν„΄ λ§€μΉ­ 덕에 if(alice.job=="학생" && alice.age<18) μ΄λž€ μ½”λ“œ λŒ€μ‹ 

κ°„κ²°ν•˜λ©΄μ„œλ„ 읽기 쒋은 μ½”λ“œλ₯Ό μž‘μ„±ν•  수 있게 λ˜μ—ˆλ‹€.

<예제>->νŒ¨ν„΄ λ§€μΉ­ λŒμ•„κ°€μ§€ μ•ŠμŒ

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;

namespace PosisionalPatern
{ 
    class MainApp
    {
        private static double GetDiscountRate(object client)
        {
            return client 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);

            WriteLine($"alice : {GetDiscountRate(alice)}");
            WriteLine($"bob : {GetDiscountRate(bob)}");
            WriteLine($"charlie : {GetDiscountRate(charlie)}");
            WriteLine($"dave : {GetDiscountRate(dave)}");
        }
    }
}

μœ„μ™€ 같은 μ½”λ“œ

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;

namespace PosisionalPatern
{
    class MainApp
    {
        private static double GetDiscountRate(object client)
        {
            switch(client)
            {
                case ("학생", int n) when n < 18: 
                    return 0.2; // 학생 & 18μ„Έ 미만
                case ("학생", _): 
                    return 0.1; // 학생 & 18μ„Έ 이상
                case ("일반", int n) when n < 18: 
                    return 0.1; //일반 & 18μ„Έ 미만
                case ("일반", _):
                    return 0.05; //일반 & 18μ„Έ 이상
                default :
                    return 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);

            WriteLine($"alice : {GetDiscountRate(alice)}");
            WriteLine($"bob : {GetDiscountRate(bob)}");
            WriteLine($"charlie : {GetDiscountRate(charlie)}");
            WriteLine($"dave : {GetDiscountRate(dave)}");
        }
    }
}
728x90