[C# 7.0] μƒˆλ‘œμš΄ κΈ°λŠ₯ (2) - νŠœν”Œ(Tuple), 둜컬 ν•¨μˆ˜(Local Function)

2023. 1. 21. 12:32Β·πŸ“ Language/✏ C#

C# 7.0의 μƒˆλ‘œμš΄ κΈ°λŠ₯

2. νŠœν”Œ(Tuple)

이전 λ²„μ „μ—μ„œλŠ” λ©”μ„œλ“œμ—μ„œ ν•˜λ‚˜μ˜ κ°’λ§Œμ„ 리턴할 수 μžˆμ§€λ§Œ, C# 7.0μ—μ„œλŠ” νŠœν”Œμ„ μ‚¬μš©ν•˜μ—¬ λ©”μ„œλ“œλ‘œλΆ€ν„° 볡수 개의 값듀을 리턴할 수 있게 λ˜μ—ˆλ‹€.

  • λ©”μ„œλ“œλ₯Ό μ •μ˜ν•  λ•Œ 리턴 νƒ€μž…μ΄ 볡수 κ°œμ΄λ―€λ‘œ νŠœν”Œ 리턴 νƒ€μž…(tuple return type) ν‘œν˜„μ„ μ‚¬μš©ν•˜κ²Œ λ˜λŠ”λ°, μ΄λŠ” κ΄„ν˜Έ ( ) μ•ˆμ— μ—¬λŸ¬ λ¦¬ν„΄νƒ€μž…λ“€μ„ μˆœμ„œλŒ€λ‘œ λ‚˜μ—΄ν•˜λ©΄ λœλ‹€.
  • λ©”μ„œλ“œ μ•ˆμ—μ„œ μ‹€μ œ μ—¬λŸ¬ 값듀을 리턴할 λ•ŒλŠ” κ΄„ν˜Έ ( ) μ•ˆμ— 콀마둜 λΆ„λ¦¬ν•˜λŠ” νŠœν”Œ λ¦¬ν„°λŸ΄(tuple literal) ν‘œν˜„μ„ μ‚¬μš©ν•˜μ—¬ μˆœμ„œλŒ€λ‘œ λ¦¬ν„°λŸ΄ κ°’ ν˜Ήμ€ λ³€μˆ˜λ“€μ„ λ‚˜μ—΄ν•˜λ©΄ λœλ‹€.
(int count, int sum, double average) Calculate(List<int> data) // νŠœν”Œ 리턴 νƒ€μž…(tuple return type)
{
    int cnt = 0, sum = 0;
    double avg = 0;

    foreach (var i in data)
    {
        cnt++;
        sum += i;
    }

    avg = sum / cnt;

    return (cnt, sum, avg); // νŠœν”Œ λ¦¬ν„°λŸ΄(tuple literal)
}

private void Run()
{
    var list = new List<int> { 1, 2, 3, 4, 5 };
            
    var r = Calculate(list); // νŠœν”Œ κ²°κ³Ό
    Console.WriteLine($"{r.count}, {r.sum}, {r.average}");
    Console.WriteLine($"{r.Item1}, {r.Item2}, {r.Item3}");
}

 

νŒŒλΌλ―Έν„°λ‘œ out, refλ₯Ό μ‚¬μš©ν•˜μ—¬ 리턴 값을 μ €μž₯ν•  수 μžˆμ§€λ§Œ, νŠœν”Œμ΄ 더 νŽΈλ¦¬ν•  λ•Œκ°€ μžˆλ‹€.
κ²½μš°μ— 따라 μ„ νƒν•˜μ—¬ μ‚¬μš©ν•˜λ©΄ 될 것 κ°™λ‹€.

 

3. 둜컬 ν•¨μˆ˜(Local Function)

둜컬 ν•¨μˆ˜λŠ” λ©”μ„œλ“œ μ•ˆμ—μ„œλ§Œ μ‘΄μž¬ν•˜λ©° κ·Έ λ©”μ„œλ“œμ—μ„œλ§Œ μ‚¬μš©ν•  수 μžˆλŠ” ν•¨μˆ˜μ΄λ‹€.

  • μžμ‹ μ˜ λ©”μ„œλ“œ μ΄μ™Έμ—μ„œ ν˜ΈμΆœν•  μˆ˜ μ—†μœΌλ©°, ν•˜λ‚˜μ˜ λ©”μ„œλ“œ μ•ˆμ—λŠ” μ—¬λŸ¬ κ°œμ˜ λ‘œμ»¬ ν•¨μˆ˜λ“€μ„ λ§Œλ“€ μˆ˜ μžˆλ‹€.
  • 클둜져(Closure)λ₯Ό μ‚¬μš©ν•  수 μžˆμ–΄ μžμ‹ μ„ μ •μ˜ν•œ λ©”μ„œλ“œμ˜ λ³€μˆ˜λ“€μ„ 둜컬 ν•¨μˆ˜μ—μ„œ μ‚¬μš©ν•  수 μžˆλ‹€.
  • μ»΄νŒŒμΌλŸ¬κ°€ λ‹€λ₯Έ λ©”μ„œλ“œμ™€ λ™μΌν•˜κ²Œ λ©”μ„œλ“œ ν˜•νƒœλ‘œ μ·¨κΈ‰ν•˜λ©° μ΄λŠ” λžŒλ‹€μ‹μ²˜λŸΌ 컴파일 μ‹œ 읡λͺ… νƒ€μž…μ„ μžλ™μœΌλ‘œ μƒμ„±ν•˜λŠ” λ“±μ˜ 일을 ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€.
  • 클래슀의 λ‹€λ₯Έ λ©”μ„œλ“œλ₯Ό 잘λͺ» ν˜ΈμΆœν•  κ°€λŠ₯성을 쀄여쀀닀.
private int MyCalc(int a, int b, int c)
{
    int factor = 10;
    int ab = MyFormula(a, b);
    int ac = MyFormula(a, c);
    return Math.Max(ab, ac);

    // 둜컬 ν•¨μˆ˜
    int MyFormula(int x, int y)
    {
        int res = 2 * x + 7 * y - 5;
        return res % factor; // 클둜져(Closure)
    }
}
μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)
'πŸ“ Language/✏ C#' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [C# 7.0] μƒˆλ‘œμš΄ κΈ°λŠ₯ (4) - μ’…λ£Œμž(Deconstructor), ref local, ref return
  • [C# 7.0] μƒˆλ‘œμš΄ κΈ°λŠ₯ (3) - out νŒŒλΌλ―Έν„°, λ¦¬ν„°λŸ΄ ν‘œν˜„
  • [C# 7.0] μƒˆλ‘œμš΄ κΈ°λŠ₯ (1) - νŒ¨ν„΄ λ§€μΉ­
  • [C# 6.0] μƒˆλ‘œμš΄ κΈ°λŠ₯ (2) - λ¬Έμž₯ 레벨, 클래슀 멀버 레벨
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] μƒˆλ‘œμš΄ κΈ°λŠ₯ (2) - νŠœν”Œ(Tuple), 둜컬 ν•¨μˆ˜(Local Function)
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”