728x90
반응형
목차
다음 포스팅에서는 C# 프로그래밍 중 조건문을 만났을 때 어떻게 코드 가독성과 확장성을 향상시킬 수 있는지 살펴본다. 본 포스트는 전통적인 조건문 상황(if-else)에서 이를 개선하기 위해 딕셔너리와 람다식을 도입한 두 예제를 다루고 있다.
1. 단순 값 반환 조건식 개선
- 기존 방식(Calc1): 특정 연산(add, subtract, multiply)을 수행하기 위해 여러 if-else 문을 사용하여 각 조건에 따라 다른 연산을 수행한다.
- 리팩토링 후(Calc2): 연산명을 키로, 해당 연산을 수행하는 람다 함수를 값으로 가지는 Dictionary를 구성한다. 이를 통해 필요한 연산을 딕셔너리에서 찾아 실행함으로써 코드의 유연성과 확장성을 대폭 향상시킨다. 이 접근법은 새로운 연산을 추가하거나 변경할 때 매우 간단하게 딕셔너리 엔트리를 수정하거나 추가함으로써 대응할 수 있다.
using System;
using System.Collections.Generic;
public class Program
{
// 작업 수행
public static void Main()
{
Console.WriteLine(GetWebsite1("네이버")); // www.naver.com
Console.WriteLine(GetWebsite1("구글")); // www.google.com
Console.WriteLine(GetWebsite2("네이버")); // www.naver.com
Console.WriteLine(GetWebsite2("구글")); // www.google.com
}
// BEFORE REFACTORING
public static string GetWebsite1(string name)
{
if (name == "네이버")
{
return "www.naver.com";
}
else if (name == "구글")
{
return "www.google.com";
}
}
// AFTER REFACTORING
static Dictionary<string, string> websites = new Dictionary<string, string>()
{
{"네이버", "www.naver.com"}, // 네이버
{"구글", "www.google.com"} // 구글
};
public static string GetWebsite2(string name)
{
return websites.ContainsKey(name) ? websites[name] : "Unknown";
}
}
2. 함수형 작업 수행하는 조건식 개선
- 기존 방식(GetWebsite1): 웹사이트의 이름(네이버, 구글)을 입력받아 각 이름에 맞는 URL을 반환하기 위해 if-else 문을 사용한다. 특정 이름에 대해 하드코딩된 URL을 반환한다.
- 리팩토링 후(GetWebsite2): 웹사이트의 이름을 키로, 해당 웹사이트의 URL을 값으로 하는 Dictionary를 사용한다. 이 구조를 통해 이름에 해당하는 URL을 효율적으로 조회하고, 이름이 딕셔너리에 없는 경우에는 "Unknown"을 반환한다. 이 방법은 데이터의 추가나 수정이 간단해지며, 코드의 단순화 및 가독성이 향상된다.
using System;
using System.Collections.Generic;
public class Program
{
// 작업 수행
public static void Main()
{
Calc1("add", 5, 3); // 8
Calc1("subtract", 5, 3); // 2
Calc2("add", 5, 3); // 8
Calc2("subtract", 5, 3); // 2
}
// BEFORE REFACTORING
public static void Calc1(string action, int x, int y)
{
if (action == "add")
{
Console.WriteLine(x + y);
}
else if (action == "subtract")
{
Console.WriteLine(x - y);
}
else if (action == "multiply")
{
Console.WriteLine(x * y);
}
}
// AFTER REFACTORING
Dictionary<string, Action<int, int>> actions = new Dictionary<string, Action<int, int>>()
{
{ "", (a, b) => Console.WriteLine(a + b) },
{ "subtract", (a, b) => Console.WriteLine(a - b) },
{ "multiply", (a, b) => Console.WriteLine(a * b) },
};
public static void Calc2(string action, int x, int y)
{
if (actions.ContainsKey(action))
actions[action](x, y);
}
}
두 예제 모두에서 리팩토링은 코드를 더 단순하고 확장 가능하게 만든다. 딕셔너리를 사용하는 방식은 새로운 케이스를 추가할 때 매우 효율적이며, 람다식을 활용함으로써 간결하고 직관적인 코드 작성을 가능하게 한다.
반응형
'프로그래밍 > C#' 카테고리의 다른 글
[C#] 추상클래스와 인터페이스의 비교 및 사용처 분석 (1) | 2024.04.26 |
---|