코드 리뷰는 팀의 코드 품질을 향상시키고 유지 보수성을 높이는 데 중요한 활동입니다. 특히 C#에서는 다양한 리팩터링 기법을 활용하여 코드의 가독성을 높이고 유연성을 개선할 수 있습니다. 아래에서 몇 가지 중요한 C# 코드 리팩터링 기법을 살펴보겠습니다.
1. Extract Method
코드에서 반복되는 부분을 찾아 해당 부분을 별도의 메서드로 추출하는 기법입니다. 이를 통해 코드를 간결하게 만들고 가독성을 높일 수 있습니다.
Before Refactoring:
public void CalculateTotalPrice(double price, int quantity)
{
double totalPrice = price * quantity;
Console.WriteLine("Total price: " + totalPrice);
}
public void CalculateTax(double price, int quantity)
{
double tax = price * quantity * 0.1;
Console.WriteLine("Tax: " + tax);
}
After Refactoring:
public void CalculateTotalPrice(double price, int quantity)
{
double totalPrice = CalculatePrice(price, quantity);
Console.WriteLine("Total price: " + totalPrice);
}
public void CalculateTax(double price, int quantity)
{
double tax = CalculatePrice(price, quantity) * 0.1;
Console.WriteLine("Tax: " + tax);
}
private double CalculatePrice(double price, int quantity)
{
return price * quantity;
}
2. Replace Conditional with Polymorphism
조건문을 다형성으로 대체하여 코드를 간결하고 유연하게 만드는 기법입니다.
Before Refactoring:
public double CalculateArea(Shape shape)
{
if (shape is Circle)
{
var circle = (Circle)shape;
return Math.PI * circle.Radius * circle.Radius;
}
else if (shape is Rectangle)
{
var rectangle = (Rectangle)shape;
return rectangle.Width * rectangle.Height;
}
// more shapes...
}
After Refactoring:
public abstract class Shape
{
public abstract double CalculateArea();
}
public class Circle : Shape
{
public double Radius { get; set; }
public override double CalculateArea()
{
return Math.PI * Radius * Radius;
}
}
public class Rectangle : Shape
{
public double Width { get; set; }
public double Height { get; set; }
public override double CalculateArea()
{
return Width * Height;
}
}
위의 예시에서는 Replace Conditional with Polymorphism를 사용하여 조건문을 다형성으로 대체하여 코드를 개선하였습니다.
3. Introduce Parameter Object
여러 개의 매개변수를 하나의 객체로 묶어서 전달하는 기법입니다. 이를 통해 매개변수의 개수를 줄이고 가독성을 높일 수 있습니다.
Before Refactoring:
public void SendEmail(string subject, string body, string recipient, bool isImportant)
{
// send email
}
After Refactoring:
public class EmailMessage
{
public string Subject { get; set; }
public string Body { get; set; }
public string Recipient { get; set; }
public bool IsImportant { get; set; }
}
public void SendEmail(EmailMessage message)
{
// send email
}
위의 예시에서는 Introduce Parameter Object를 사용하여 여러 개의 매개변수를 하나의 객체로 묶어 전달하여 가독성을 높였습니다.
이렇게 C# 코드 리뷰 시에는 Extract Method, Replace Conditional with Polymorphism, Introduce Parameter Object 등의 리팩터링 기법을 적용하여 코드의 가독성과 유연성을 향상시킬 수 있습니다.
참고 문헌:
- Martin Fowler, “Refactoring: Improving the Design of Existing Code”, Addison-Wesley Professional, 1999.
- Joshua Kerievsky, “Refactoring to Patterns”, Addison-Wesley Professional, 2004.