C#에서 더 깔끔한 코드를 작성하기 위한 5가지 지침

C# 코드는 최대한 읽고 이해하기 쉬워야 하지만 개발자의 코딩 스타일이 다르기 때문에 이것이 어려울 수 있습니다. 그렇기 때문에 우리는 ByteHide에서 팀의 모든 사람이나 향후 프로젝트에서 작업할 사람들이 쉽게 이해할 수 있는 더 읽기 쉬운 C# 코드를 작성하는 데 도움이 되는 이 5가지 지침을 가져오기로 결정했습니다.

작성해야 하는 코드 줄 수는 잘 디자인된 C# 클래스 및 함수를 사용하여 줄일 수도 있습니다. 메서드가 짧고 줄 수가 적을수록 일반적으로 코드 이해도가 향상되기 때문입니다.

이 팁은 Clean Code Javascript 에서 수정되었습니다. 큰 기여를 해주셔서 감사합니다Ryan McDermott!


항상 조건을 캡슐화하십시오.



캡슐화는 다른 클래스의 클라이언트에 노출된 동작에서 구현 세부 정보를 격리하는 데 도움이 되는 방법입니다.

나쁜 방법:

if (website.state == "down")
{
    // ...
}


좋은 방법:

if (website.IsDown())
{
    // ...
}


또한 캡슐화를 통해 작성 중인 코드의 결합을 더 잘 제어할 수 있습니다.


개인/보호 멤버 사용



개인/보호된 멤버를 사용하지 않으면 실수로 또는 의도하지 않게 수정될 수 있으며 이로 인해 코드에 오류가 발생할 수 있습니다.

코드에서 부여한 권한에 대한 책임은 우리에게 있음을 명심해야 합니다. 다소 추상적으로 보일 수 있지만 문자열이 읽기 전용이어야 하는 경우 쓰기가 아닌 읽기 전용임을 지정하는 것은 귀하의 의무입니다.

나쁜 방법:

class Car
{
    public string Brand { get; set; }

    public Car(string brand)
    {
        Brand = brand;
    }
}

var car = new Car("Porsche");
Console.WriteLine(car.Brand); // Car brand: Porsche


좋은 방법:

class Car
{
    public string Brand { get; }

    public Car(string brand)
    {
        Brand = brand;
    }
}

var car = new Car("Porsche");
Console.WriteLine(car.Brand); // Car brand: Porsche

set;를 사용하지 않음으로써 나중에 실수로 수정되는 것을 방지합니다.


세터 및 게터 사용 방법 알아보기



공개, 비공개 또는 보호된 메서드를 설정하지 않는 경우가 많습니다. 이로 인해 개체 속성 수정을 더 잘 제어할 수 없습니다.

나쁜 방법:

class BankAccount
{
    public double Balance = 5000;
}

var bankAccount = new BankAccount();

// Buy a cappuccino ☕️ ...
bankAccount.Balance -= 15;


좋은 방법:

class BankAccount
{
    private double _balance = 0.0D;

    pubic double Balance {
        get {
            return _balance;
        }
    }

    public BankAccount(balance = 1000)
    {
       _balance = balance;
    }

    public void WithdrawBalance(int amount)
    {
        if (amount > _balance)
        {
            throw new Exception('Amount greater than available balance.');
        }

        _balance -= amount;
    }

    public void DepositBalance(int amount)
    {
        _balance += amount;
    }
}

var bankAccount = new BankAccount();

// Buy a cappuccino ☕️ ...
bankAccount.WithdrawBalance(price: 15);

balance = bankAccount.Balance;


또한 해당 클래스를 상속할 때 기본적으로 해당 기능을 재정의할 가능성이 있습니다. 이것이 당신에게 허용하는 가능성은 많습니다.


구성이 상속보다 낫다



많은 사람들이 상속을 사용할지 컴포지션을 사용할지 알지 못하지만 컴포지션을 사용하는 것이 더 낫다는 점을 알려드립니다.

처음에는 많은 프로그래머가 상속이 더 낫다고 생각하지만 구성이 어떻게든 문제를 더 잘 모델링할 수 있는지 항상 자문해야 합니다.

나쁜 방법:

class Car
{
    private string Model { get; set; }
    private string Brand { get; set; }

    public Car(string model, string brand)
    {
        Model = model;
        Brand = brand;
    }

    // ...
}

// Bad because Car "have" engine data.
// CarEngineData is not a type of Car

class CarEngineData : Car
{
   private string Model { get; set; }
   private string Brand { get; set; }

   public CarEngineData(string model, string brand, string displacement, string horses)
    {
         // ...
    }

    // ...
}


좋은 방법:

class CarEngineData
{
    public string Displacement { get; }
    public string Horses { get; }

    public CarEngineData(string displacement, string horses)
    {
        Displacement = displacement;
        Horses = horses;
    }

    // ...
}

class Car
{
    public string Model { get; }
    public string Brand { get; }
    public CarEngineData EngineData { get; }

    public Car(string model, string brand)
    {
        Model = model;
        Brand = brand;
    }

    public void SetEngine(string displacement, double horses)
    {
        EngineData = new CarEngineData(displacement, horses);
    }

    // ...
}


언제 어떤 것을 사용하는 것이 가장 좋은지 알기 위해 aquick example를 살펴보겠습니다.
  • 관계 "is-a"(인간-동물)
    "has-a"관계(User-UserDetails)



  • 마법의 사슬을 사용하지 마세요



    이를 모르시는 분들을 위해 매직스트링은 코드에 명시되어야 하는 문자열 값입니다. 그들은 항상 코드에 영향을 미칩니다. 대부분의 경우 매직 문자열은 거의 항상 복제되며 자동으로 업데이트할 수 없기 때문에 오류의 원인이 되기 쉽습니다.

    나쁜 방법:

    if (userRole == "Admin")
    {
        // logic in here
    }
    


    좋은 방법:

    const string ADMIN_ROLE = "Admin"
    if (userRole == ADMIN_ROLE)
    {
        // logic in here
    }
    


    이러한 방식으로 이러한 문자열이 복제되어 변경된 경우 오류가 발생하는 것을 방지합니다.

    이러한 예는 단순화되어 있으므로 더 자세히 보려면 ​​Cleaner Code in C#으로 이동하는 것이 좋습니다.

    좋은 웹페이지 즐겨찾기