주요글: 도커 시작하기
반응형
좋은 자바 코딩 스타일이란 것이 필요할까? 하지만 코드를 작성할 때, 아이디어와 생각들을 표현한 코드가 깔끔하고 명료할 필요가 있다.

좋은 코딩 스타일이 필요한 이유

많은 소프트웨어 개발자들이 다양한 프로그래밍 언어로 코드를 작성한다. 그 중에는 상당히 명시적하고 깔끔한 코드들도 있지만 많은 경우 보기에 산만하고 명시적이지 못한 코드들이 대부분이다. 사용자 인터페이스나 애플리케이션의 화면 디자인처럼 코딩 스타일에도 신경을 쓸 필요가 있다. 따라서, 좋은 자바 코딩 스타일이 왜 필요하고 어떻게 코드를 작성하면 좋은지 알아본다.

좋은 코딩 스타일이라는 것은 별로 필요하지 않다고 생각하는 사람들도 많다. 그러나 다음과 같은 이유를 생각해보면 아이디어를 코드로 작성할 때 명료하게 만들 필요가 있다는 것을 알 수 있다.

  • 소프트웨어의 설계-제작-유지-보수에서 비용의 80% 정도가 유지-보수에 할당된다.
  • 소프트웨어의 설계자 또는 제작자가 직접 유지-보수하는 경우는 거의 없다.
  • 소프트웨어의 좋은 코딩 스타일은 유지-보수 능력을 향상시킨다.
  • 소프트웨어와 함께 소스 코드도 제품에 포함되는 경우, 소스도 제품의 일부로서 잘 패키지화되고, 명료하며, 프로페셔널 수준의 스타일로 작성되어야 한다.
좋은 코딩 스타일로 작성된 코드는 다음과 같은 장점을 포함한다.

  • 코드가 읽기 쉬우며, 일관성을 가지게 되므로, 이해하기 쉽고, 유지/보수하기에 더욱 쉽다.
  • 코드가 명료하고 일관성이 있으므로, 코드를 트레이싱하고 디버깅하기 쉽다.
  • 한동안 중단되었던 프로그램 개발을 좀 더 쉽게 다시 시작할 수 있다.
  • 코드의 각 부분이 무슨 역할을 하는지 알기 쉬우므로, 코딩을 진행하는데 장점이 많다.
기본 지침

좋은 코딩 스타일로 자바 코드를 작성하는 것이 그렇게 힘들고 어려운 것은 아니며 약간의 세심한 주의만 기울이면 충분하다. 여기 몇 가지 기본적인 지침을 제시하면 다음과 같다.

  • 코드를 명료하고 읽기 쉽게 작성한다.
  • 코드를 일관성 있게 작성한다.
  • 변수나 메소드 이름에 명료한 이름을 사용한다.
  • 파일과 클래스들을 논리적으로 구성한다.
  • 하나의 파일에 하나의 클래스만 작성한다 (inner class 제외)
  • 한 줄에 80여자 이상은 쓰지 않는다.
  • 공백 문자들과 분리기호를 적절하게 잘 사용한다.
공백 문자 - 탭? 아니면 스페이스?

코드를 이해하기 쉽고 보기 좋게 만들려면 공백 문자들을 사용하여 줄을 맞추어 쓰는 것이 중요하다. 보통 탭 또는 스페이스를 사용하지만 둘 중 어느 것이 좋을까? 탭을 사용하면 간편하게 코드의 각 줄들을 들여쓰기에 편리하다. 스페이스를 사용하면 어떤 에디터에서도 똑같이 보이므로 원래의 코드가 다른 컴퓨터나 다른 사람에게도 동일한 형태로 보여지는 장점이 있다. 많은 사람들이 이런 이유로 스페이스를 선호하지만, 둘 중 어느 것을 사용해도 좋다. 단, 둘 중 한가지만 사용하고, 혼합해서 사용하지 않아야 한다.

중괄호와 들여쓰기

들여쓰기 스타일, 즉 코드 블록의 시작과 끝을 나타내는 중괄호('{'와 '}')의 위치와 그 속에 포함된 코드 블록의 들여쓰기는 코드를 보기 좋게 작성하는데 중요한 또 하나의 요소이다. C 언어나 자바 같은 언어는 몇 종류의 들여쓰기 스타일이 있고, 그 중에 어느 것이 특별히 뛰어나다고 할 수는 없다. 많은 사람들이 사용하는 스타일 중에 자신이 보기에 좋은 스타일을 사용하면 좋다. 단, 한가지 스타일을 유지하는 것이 좋다.

주석

자바 코드에서는 크게 두 종류의 주석 스타일이 있다. 하나는 Javadoc 주석 스타일(문서형 주석)이고 다른 하나는 구현부 주석이다. Javadoc 주석은 javadoc 툴을 사용하여 자동으로 API 문서를 생성할 수 있다. 구현부 주석은 코드가 왜 그리고 어떻게 작성되었는지 설명하는 주석이다. 주석은 다음과 같은 지침을 고려해서 작성하는 것이 좋다.

  • 가능하면 Javadoc 주석을 사용한다. (최소한 클래스와 메소드의 주석에는 꼭 작성한다.)
  • 구현부 주석은 코드 줄마다 뒷부분에 주석을 첨부하지 않고 코드 블록에 대하여 주석을 작성하는 것이 좋다. (예외적으로, 변수 선언과 같은 부분에서는 각 줄 뒷부분에 주석을 다는 것도 좋다.)
주석을 첨부할 때 주의할 점은 좋은 주석은 언제나 큰 도움을 주며 나쁜 주석은 오히려 방해만 된다는 사실이다.

나쁜 주석 스타일은 다음과 같다.

   // ISO-8859-1 문자 인코딩을 KSC-5601 문자 인코딩으로 변환
   public static String toKSC(String str) {
      try {
         return new String(str.getBytes("8859_1"), "ksc5601");
      } catch(Exception ex) {
         return str; // 예외시 원래 스트링 반환
      }
   }

Javadoc 주석 스타일을 사용한 좋은 주석 스타일은 다음과 같다.

   /**
    * ISO-8859-1 문자 인코딩을 KSC-5601 문자 인코딩으로 변환하는 메소드.
    *
    * @param str 8859_1(ISO-8859-1) 인코딩 스트링
    * @return String ksc5601(KSC-5601) 인코딩 스트링
    */
   public static String toKSC(String str) {
      try {
         return new String(str.getBytes("8859_1"), "ksc5601");
      } catch(Exception ex) {
         // 예외시 원래의 스트링을 반환한다.
         return str;
      }
   }

코드 블록과 문장

코드 블록과 문장을 작성할 때 다음 지침을 적용하는 것이 좋다.

  • 한 줄에 하나의 문장만 작성한다.
  • 블록의 시작을 나타내는 중괄호('{')는 제어 문장(if, for 등)과 같은 줄에 쓴다.
  • 블록의 끝을 나타내는 중괄호('}')의 뒤에 어느 블록의 끝인지를 알 수 있는 간단한 주석을 첨부한다. 특히 길거나 중첩된 블록에서는 반드시 주석을 첨부한다. 예를 들어 if 블록의 끝이면 } // end if 처럼 표시한다.
  • 변수의 선언은 블록의 맨 처음에 한다.
  • 변수는 항상 초기화한다.
  • switch 블록에서 case 구문도 들여쓰기를 한다.
  • 연산자 앞뒤에 공백을 삽입한다.
  • if, for, while 뒤에 '(' 기호 앞에 공백을 삽입한다.
  • 수식 표현에 공백과 괄호를 사용하여 착오를 피하고 읽기 좋게 만든다.
단, for 문장에서 반복을 위해 사용되는 변수는 예외적으로 블록의 처음에 선언되지 않고 괄호 안에서 선언과 함께 초기화를 한다. 예를 들면,

   for (int i = 0; i < 100; i++) {
      .... 문장들 ....
   } // end for

for 문장의 끝을 나타내는 주석을 첨부하면 코드 블록이 길거나 중첩되었을 때, 혼돈되거나 실수로 지우는 일이 없다. 코드가 긴 소스에서 일일이 어느 것이 코드 블록의 시작이고 어느 것이 블록의 끝인지 자주 확인하는 일은 짜증나는 일이기 때문이다.

나쁜 코딩 스타일의 예를 들어보면 다음과 같다.

   try{
      for(int i=0;i<100;i++){
         sum+=k[i];
         }
      if(max>sum) sum=correctSum(sum);
      int pat=0;
      switch(type){
      case 1: calcOne(); break;
      case 2: calcTwo(); break;
      case 3: calcThree(); break;
      }
   }catch(Exception ex){...}

이 코드 블록에서, 띄어쓰기를 제대로 하지 않아 코드를 읽기가 힘들며, 코드 중간에 변수가 선언되고 switch 문장에서 들여쓰기도 알아보기 힘들며, 한 줄에 문장이 여러개 쓰이고 있다.

좋은 코딩 스타일로 바꾸면 다음과 같다.

   try {
      int pat = 0;

      for (int i = 0; i < 100; i++) {
         sum += k[i];
      } // end for
      
      // 합계가 오버플로우가 발생하지 않도록 최대값으로 보정한다.
      
      if (max > sum) {
         sum = correctSum(sum, max);
      }

      // 타입에 맞는 연산을 호출한다.

      switch (type) {
         case 1:
            calcOne();
            break;
         case 2:
            calcTwo();
            break;
         case 3:
            calcThree();
            break;
      } // end switch
   } catch (Exception ex) {
      ...
   } // end catch

결론

1부에서는 좋은 코딩 스타일이 필요한 이유와 좋은 코딩 스타일을 유지할 경우의 장점에 대해서 살펴보았다. 또한, 7가지의 기본적인 좋은 코딩 스타일을 위한 지침에 대해서 살펴보았다. 2부에서는 파일 헤더 주석과 패키지 선언을 포함한 몇 가지 코딩 스타일에 대해서 추가적으로 살펴보기로 한다.



본 글의 저작권은 이동훈에 있으며 저작권자의 허락없이 온라인/오프라인으로 본 글을 유보/복사하는 것을 금합니다.

+ Recent posts