C#:
리팩토링
방법:
숫자 배열의 합을 계산하고 출력하는 간단한 C# 메서드를 리팩토링해봅시다:
리팩토링 전:
public class Calculator
{
public void CalculateSum()
{
int[] numbers = { 1, 2, 3, 4, 5 };
int sum = 0;
for (int i = 0; i < numbers.Length; i++)
{
sum += numbers[i];
}
Console.WriteLine("The sum is " + sum);
}
}
리팩토링 후:
public class Calculator
{
private readonly int[] _numbers;
public Calculator(int[] numbers)
{
_numbers = numbers;
}
public int CalculateSum()
{
return _numbers.Sum();
}
public void DisplaySum()
{
Console.WriteLine($"The sum is {CalculateSum()}");
}
}
// 사용법:
var calculator = new Calculator(new[] { 1, 2, 3, 4, 5 });
calculator.DisplaySum();
리팩토링을 통해, 우리는 관심사를 분리하고 Calculator
클래스를 더 유연하게 만들어서 어떤 숫자 배열이든 처리할 수 있게 했으며, LINQ를 활용하여 합계 계산을 더 간결하게 만들었습니다.
깊이 있게 탐구하기
리팩토링은 스몰토크 프로그래밍 커뮤니티에서 그 뿌리를 찾을 수 있으며, 1990년대 마틴 파울러의 책 “Refactoring: Improving the Design of Existing Code"로 널리 알려졌습니다. 이후 수년에 걸쳐 애자일 방법론과 좋은 코딩 관행의 중요한 부분이 되었습니다.
리팩토링에는 테스트 주도 개발(TDD)에서의 Red-Green-Refactor 같은 다양한 접근 방법이 있습니다. 이는 리팩토링이 버그를 도입하지 않도록 실패하는 테스트로 시작하여 테스트를 통과시키고, 그 다음 코드를 정리하는 과정을 보장합니다.
리팩토링을 구현할 때, 프로세스 중에 기능이 손상되지 않도록 하는 포괄적인 테스트 스위트를 가지는 것이 중요합니다. C#에 대한 ReSharper와 같은 자동 리팩토링 도구는 안전한 방법으로 코드 구조를 변경하는 데 도움을 줄 수 있습니다. 그러나 도구는 코드베이스와 코딩 원칙에 대한 깊은 이해를 보완하는 것이어야 합니다.
참고자료
- 마틴 파울러의 대표적인 작업인 리팩토링: Refactoring: Improving the Design of Existing Code
- Visual Studio에서의 리팩토링에 대한 마이크로소프트 가이드: Refactoring (C#)
- 예시를 통한 리팩토링 패턴에 대한 자세한 살펴보기: SourceMaking 리팩토링