[c#] C# 코드 리뷰 시 리팩터링 기법

코드 리뷰는 팀의 코드 품질을 향상시키고 유지 보수성을 높이는 데 중요한 활동입니다. 특히 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 등의 리팩터링 기법을 적용하여 코드의 가독성과 유연성을 향상시킬 수 있습니다.


참고 문헌: