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