연습 - 코드를 보다 쉽게 읽을 수 있도록 공백 사용

완료됨

인쇄 및 웹 디자이너는 작은 공간에 너무 많은 정보를 넣으면 뷰어에 과부하가 발생한다는 사실을 알고 있습니다. 따라서 이들은 작업의 기본 메시지를 사용하는 뷰어의 기능을 최대화하도록 공백이나 여백을 사용하여 정보를 나눕니다.

개발자는 편집기에서 코드를 작성할 때 비슷한 전략을 사용할 수 있습니다. 개발자는 공백을 사용하여 의미를 전달함으로써 코드의 의도를 더 명확하게 나타낼 수 있습니다.

공백이란 무엇인가요?

"공백"이라는 용어는 space bar로 생성된 띄어쓰기, tab 키에 의해 생성된 탭, enter 키에 의해 생성된 줄 바꿈을 나타냅니다.

C# 컴파일러는 공백을 무시합니다. 공백을 무시하는 방법과 공백을 사용하여 명확성을 최대화하는 방법에 대해 알아보기 위해 다음과 같이 연습해 봅니다.

C# 컴파일러에서 공백을 무시하는 방식을 보여주는 코드 추가

  1. Visual Studio Code에서 빈 Program.cs 파일이 열려 있는지 확인합니다.

    필요한 경우 Visual Studio Code를 열고 다음 단계를 완료하여 편집기에서 Program.cs 파일을 준비합니다.

    1. 파일 메뉴에서 폴더 열기를 선택합니다.

    2. 폴더 열기 대화 상자를 사용하여 CsharpProjects 폴더로 이동한 다음 엽니다.

    3. Visual Studio Code EXPLORER 보기에서 Program.cs 선택합니다.

    4. Visual Studio Code 선택 메뉴에서 [모두 선택]을 선택하고 [삭제] 키를 누릅니다.

  2. 다음 코드를 입력합니다.

    // Example 1:
    Console
    .
    WriteLine
    (
    "Hello Example 1!"
    )
    ;
    
    // Example 2:
    string firstWord="Hello";string lastWord="Example 2";Console.WriteLine(firstWord+" "+lastWord+"!");
    
  3. Visual Studio Code 파일 메뉴에서 저장을 선택합니다.

  4. 탐색기 보기에서 TestProject 폴더 위치에서 터미널을 열려면 TestProject를 마우스 오른쪽 단추로 클릭한 다음 통합 터미널에서 열기를 선택합니다.

  5. 터미널 명령 프롬프트에서 dotnet 실행을 입력한 다음 Enter 키를 누릅니다.

    다음 출력이 표시됩니다.

    Hello Example 1!
    Hello Example 2!
    
  6. 코드에서 공백을 사용하는 방법에 대해 이 결과가 알려주는 내용을 생각해 보세요.

    다음 두 코드 예제에서는 두 가지 중요한 개념을 보여줍니다.

    • 컴파일러에서 공백은 중요하지 않습니다. 그러나 ...
    • 공백을 올바르게 사용하는 경우 코드를 읽고 이해하는 능력을 향상시킬 수 있습니다.

    코드는 한 번만 작성할 것이지만 여러 번 읽어야 합니다. 따라서 작성하는 코드의 가독성에 초점을 맞추어야 합니다. 시간이 지남에 따라 공백 문자, 탭, 줄 바꿈 등의 공백을 사용하는 경우와 방법에 대한 감각이 생길 것입니다.

    초기 지침:

    • 각 전체 명령( )은 별도의 줄에 속합니다.
    • 코드 한 줄이 길어지면 이를 나눌 수 있습니다. 그러나 타당한 이유가 있을 때까지 단일 문을 여러 줄로 분할하는 것은 피해야 합니다.
    • 할당 연산자의 왼쪽과 오른쪽에 공백을 사용합니다.
  7. 기존 코드를 다음 코드로 바꿉니다.

    Random dice = new Random();
    int roll1 = dice.Next(1, 7);
    int roll2 = dice.Next(1, 7);
    int roll3 = dice.Next(1, 7);
    int total = roll1 + roll2 + roll3;
    Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}");
    if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3)) {
        if ((roll1 == roll2) && (roll2 == roll3)) {
            Console.WriteLine("You rolled triples!  +6 bonus to total!");
            total += 6; 
        } else {
            Console.WriteLine("You rolled doubles!  +2 bonus to total!");
            total += 2;
        }
    }
    

    이 코드에는 공백이 많이 포함되어 있지 않습니다. 이 코드는 애플리케이션에 공백을 추가하는 방법을 보여 주는 데 사용됩니다. 효과적인 공백을 사용하면 코드가 수행하는 작업을 더 쉽게 이해할 수 있습니다.

    참고

    이 코드는 Random 클래스를 사용하여 시뮬레이션된 주사위 게임을 개발하는 데 도움을 주며, 여기서 세 롤의 총 값은 “승리” 점수를 평가하는 데 사용됩니다. 이 코드는 더블 또는 트리플 롤링에 대한 추가 포인트를 부여합니다. 공백을 포함할 경우의 이점을 확인하기 위해 이 코드를 완전히 이해할 필요는 없습니다.

  8. 이 코드의 가독성을 높이기 위해 공백을 사용하는 방법을 잠시 생각해 보세요.

    이 코드에서는 다음과 같은 두 가지 특징에 주목합니다.

    • 이 코드 예제에는 세로 공백이 없습니다. 즉, 코드 줄을 구분하는 빈 줄이 없습니다. 모든 코드가 하나의 조밀한 코드 목록으로 함께 실행됩니다.
    • 여는 중괄호와 닫는 중괄호 기호로 정의된 코드 블록 { }는 함께 압축되므로 해당 경계를 시각적으로 파악하기가 어렵습니다.

    일반적으로 가독성을 향상시키려면 비슷한 또는 관련 작업을 수행하는 코드의 두 줄, 세 줄 또는 네 줄 사이에 빈 줄을 적용합니다.

    세로 공백을 사용하여 코드를 작성하는 일은 주관적입니다. 두 명의 개발자가 가장 읽기 쉬운 것이나 공백을 추가할 경우에 동의하지 않을 수 있습니다. 가장 적절한 판단을 합니다.

  9. 가독성을 향상시키는 세로 공백을 추가하려면 다음과 같이 코드를 업데이트합니다.

    Random dice = new Random();
    
    int roll1 = dice.Next(1, 7);
    int roll2 = dice.Next(1, 7);
    int roll3 = dice.Next(1, 7);
    
    int total = roll1 + roll2 + roll3;
    Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}");
    
    if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3)) {
        if ((roll1 == roll2) && (roll2 == roll3)) {
            Console.WriteLine("You rolled triples!  +6 bonus to total!");
            total += 6; 
        } else {
            Console.WriteLine("You rolled doubles!  +2 bonus to total!");
            total += 2;
        }
    }
    

    공백의 첫 번째 줄은 dice 변수의 선언과 롤 변수에 값을 할당하는 데 사용되는 코드 줄을 구분하는 데 사용됩니다. 이렇게 분리하면 코드에서 dice를 사용하는 방법을 보다 쉽게 확인할 수 있습니다.

    공백의 다음 줄은 롤 변수의 선언을 total 선언과 구분합니다. 세 가지 롤 변수의 선언을 그룹화하면 두 가지 면에서 유용합니다. 먼저 관련 변수를 포함하는 코드 줄 그룹을 만듭니다. 둘째, 변수 이름은 매우 유사하며 선언은 동일한 패턴을 따릅니다. 그래서 변수 이름을 함께 그룹화하면 유사성에 이목을 끌고 차이점을 노출시키는 데 도움이 됩니다.

    마지막으로 세 번째 공백 줄은 중첩된 if 문과 관련된 다른 문 그룹을 구분합니다. total 선언과 Console.WriteLine() 메서드를 포함하는 문 그룹은 모양이 아닌 목적에 따라 관련됩니다. 코드는 세 개의 주사위에서 달성한 총 값과 롤에 더블 또는 트리플이 포함되어 있는지 여부에 중점을 둡니다. 이러한 줄은 total을 계산하고 롤 결과를 사용자에게 보고해야 하기 때문에 관련이 있습니다.

    일부 개발자는 total 선언과 Console.WriteLine() 사이에 빈 줄을 추가해야 한다고 주장할 수 있습니다. 다시 말하지만, 공백의 선택은 최선의 판단에 달려 있습니다. 사용자가 더 잘 읽을 수 있는 스타일을 결정하고 결정한 스타일을 일관되게 사용해야 합니다.

    남은 것은 if 문뿐입니다. 이제 검사할 수 있습니다.

  10. if 키워드 아래의 코드 줄에 초점을 맞추고 다음과 같이 코드를 수정합니다.

    Random dice = new Random();
    
    int roll1 = dice.Next(1, 7);
    int roll2 = dice.Next(1, 7);
    int roll3 = dice.Next(1, 7);
    
    int total = roll1 + roll2 + roll3;
    Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}");
    
    if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3)) 
    {
        if ((roll1 == roll2) && (roll2 == roll3)) 
        {
            Console.WriteLine("You rolled triples!  +6 bonus to total!");
            total += 6; 
        } 
        else 
        {
            Console.WriteLine("You rolled doubles!  +2 bonus to total!");
            total += 2;
        }
    }
    
  11. 간격을 개선하기 위해 여는 중괄호와 닫는 중괄호를 고유한 줄로 이동했습니다.

    {} 기호는 코드 블록을 만듭니다. 많은 C# 구문에는 코드 블록이 필요합니다. 이러한 기호는 해당 경계를 명확하게 표시하고 읽을 수 있도록 별도의 줄에 배치해야 합니다.

    또한 tab 키를 사용하여 코드 블록 기호가 속한 키워드 아래에 코드 블록 기호를 배치하는 것이 중요합니다. 예를 들어 if 키워드로 시작하는 코드 줄을 주목합니다. 이 줄 아래에 { 기호가 있습니다. 이 맞춤을 통해 { 문이 if 문에 “속한다”는 것을 쉽게 이해할 수 있습니다. 또한 마지막 } 기호는 if 문과 함께 배치됩니다. 맞춤과 들여쓰기의 조합을 사용하면 코드 블록이 시작되고 끝나는 위치를 쉽게 이해할 수 있습니다.

    이 코드 블록 내부의 코드 줄은 들여쓰기 되어 이 코드 블록에 “속한다”는 것을 나타냅니다.

    내부 if 문과 else 문 및 이러한 코드 블록의 내부 코드와 비슷한 패턴을 따릅니다.

모든 사람이 공백을 포함하는 이 스타일 지침에 동의하는 것은 아닙니다. 그러나 코드를 작성할 때 이 지침을 시작점으로 사용하는 것이 좋습니다. 나중에 이 지침에서 벗어나는 결정을 내릴 수 있습니다.

요약

이 연습의 주요 내용은 다음과 같습니다.

  • 공백을 신중하게 사용하여 코드의 가독성을 높입니다.
  • 줄 바꿈을 사용하여 코드의 구를 구분하는 빈 줄을 만듭니다. 구는 유사하거나 함께 작동하는 코드 줄을 포함합니다.
  • 줄 바꿈을 사용하여 코드 블록 기호가 자체적으로 코드 줄에 배치되도록 코드 블록 기호를 분리합니다.
  • tab 키를 사용하여 코드 블록을 연결된 키워드와 맞춥니다.
  • 소유권을 표시하려면 코드 블록 내의 코드를 들여씁니다.