C#에서 코드 정리 4부 서식 지정

Code    formatting 
is a
very important                                           topic 
and                                cannot be  


ignored. 

소개

Just as the initial text in this post might seem "a little weird", code formatting can also have significant effects on those reading your code. When writing code, I find it important to think about those who will maintain your code in the future. Just like writing a book, sending messages through apps, etc. The style of how text is written can have positive or negative effects on the form how we communicate with others.

세로 형식

According to Uncle Bob, almost all code are read from a left to right and top to bottom manner. Each line of code can represent an action or thought and a group of lines exposes a complete action or line of thought. These actions should be separate with a blank line.

Example 1:

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

namespace Application;

public class Startup
{
    public IConfiguration Configuration { get; }

    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers();
    }

    public void Configure(IApplicationBuilder app)
    {
        app.UseStaticFiles();
    }
}


예 2:

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace Application;
public class Startup
{
    public IConfiguration Configuration { get; }
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers();
    }
    public void Configure(IApplicationBuilder app)
    {
        app.UseStaticFiles();
    }
}


코드 예제 2에서 .NET 6으로 작성된 모든 빈 줄이 제거되었습니다. 특히 함께 그룹화된 using 및 namespace 섹션에서 코드를 언뜻 보기에 해석하기가 조금 더 어려울 수 있습니다. 예제 1과 예제 2에서 볼 수 있듯이 작업 구분을 위해 빈 줄을 포함하면 코드의 가독성이 향상될 수 있습니다.

클래스 변수



메서드 외부에 있는 클래스 내에서 선언된 변수는 인스턴스화된 위치를 따라야 합니다. 알려진 위치에서 변수 선언의 일관성은 개발자가 표준 형식을 만드는 데 도움이 될 수 있습니다. Uncle bob은 아래 코드와 같이 어떤 메서드보다 먼저 클래스의 최상위에 있는 클래스 내에서 변수를 생성할 것을 제안합니다.

예 3:

public class WeatherForecastController : ControllerBase
{
    private static readonly string[] Summaries = new[]
    {
        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
    };

    private readonly ILogger<WeatherForecastController> _logger;

    public WeatherForecastController(ILogger<WeatherForecastController> logger)
    {
        _logger = logger;
    }

    [HttpGet(Name = "GetWeatherForecast")]
    public IEnumerable<WeatherForecast> Get()
    {
        return Enumerable.Range(1, 5).Select(index => new WeatherForecast
        {
            Date = DateTime.Now.AddDays(index),
            TemperatureC = Random.Shared.Next(-20, 55),
            Summary = Summaries[Random.Shared.Next(Summaries.Length)]
        })
        .ToArray();
    }
}


예 4를 분석하십시오. 변수가 클래스 내에서 무작위로 선언되면 이 클래스가 커짐에 따라 변수가 있는 위치에 혼란이 발생할 수 있습니다. 변수를 선언할 일관된 위치를 갖는 것이 좋습니다.

예 4:

public class WeatherForecastController : ControllerBase
{
    public WeatherForecastController(ILogger<WeatherForecastController> logger)
    {
        _logger = logger;
    }

    private readonly ILogger<WeatherForecastController> _logger;

    [HttpGet(Name = "GetWeatherForecast")]
    public IEnumerable<WeatherForecast> Get()
    {
        return Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                Date = DateTime.Now.AddDays(index),
                TemperatureC = Random.Shared.Next(-20, 55),
                Summary = Summaries[Random.Shared.Next(Summaries.Length)]
            })
            .ToArray();
    }

    private static readonly string[] Summaries = new[]
    {
        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
    };
}


수업 방법



하나의 클래스는 여러 메서드를 가질 수 있으며 메서드의 권장 위치는 유사한 논리를 가진 메서드를 서로 가까이 두는 것입니다. 예제 5의 코드는 서로 비슷한 논리를 가진 메서드를 표시합니다.

예 5:

public class UserService
{
    public string GetFormattedName(string firstName, string middleName, string lastName)
    {
        return $"{lastName}, {middleName} {firstName}";
    }

    public string GetFormattedName(UserModel userModel)
    {
        return GetFormattedName(userModel.FirstName, userModel.MiddleName, userModel.LastName);
    }
}


수평 정렬



Uncle bob은 모든 줄에 120자를 넘지 않도록 권장합니다. 아래의 코드에는 120자로 된 라인의 예가 있습니다.

string longNameVariable = "WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW";


응용 프로그램에 따라 한 줄의 문자 수를 제한하는 것은 어려울 수 있으며 이 권장 사항은 개발자가 작업하는 범위에 따라 적용 및 수정할 수 있습니다.

수평 공간



코드를 일관된 수평 공간과 올바른 식별로 유지하면 코드에 상당한 영향을 미칠 수 있습니다. 코드를 고려하십시오.

예 6:

public class UserService { public string GetFormattedName(string firstName, string middleName, string lastName) { return $"{lastName}, {middleName} {firstName}"; } public string GetFormattedName(UserModel userModel) { return GetFormattedName(userModel.FirstName, userModel.MiddleName, userModel.LastName); } }


예제 6의 코드는 예제 5에 표시된 코드와 동일합니다. 예제 5를 언뜻 보면 클래스 이름과 메서드를 쉽게 식별할 수 있습니다.

비주얼스튜디오 바로가기



현재 Visual Studio IDE를 사용하여 대부분의 프로젝트를 C#으로 개발하고 있습니다. 이 ide에는 "Crtl + K, Crtl + D"단축키가 있습니다. 이 바로 가기는 가로 공간 서식의 일부를 자동화합니다. 아래 그림에는 편집 > 고급 탭에 있는 관련 바로 가기의 위치가 있습니다.



결론



대부분의 전문 소프트웨어 개발자는 코드 형식화 전략을 갖는 것을 고려해야 합니다. 이 게시물에 제시된 규칙은 대부분 Unun bob의 권장 사항입니다. 여기에 설명되지 않은 현재 내가 사용하는 몇 가지 서식 패턴이 있습니다.

개발 팀 환경에서 이러한 프로젝트의 형식이 유사하거나 아마도 동일한 규칙을 따르는 경우 솔루션에서 작업하는 미래 및 현재 개발자의 삶을 더 좋게 만들 것입니다.

참조


  • 클린 코드: Robert C. Martin의 애자일 소프트웨어 장인 핸드북.
  • 좋은 웹페이지 즐겨찾기