객체지향 생활체조-규칙1

1 분 소요

해당 글은 developerFarm 개발자 블로그의 농장객체지향 생활체조를 참고하여 정리한 글 입니다.

앞서 효과적으로 TDD, 리팩토링, OOP를 연습하는 방법에 대해 정리해 보았다. 해당 글에서 제시해준 객체지향 생활체조의 규칙들을 지켜나감으로서 객체지향 설계 원칙에 부함되는 코드를 작성할 수 있도록 정리해 보겠다.

규칙1. 메서드당 들여쓰기 한 번

응집력이 강한 코드를 작성하기란 쉽지 않다. 객체지향 생활체조-규칙1은 응집력이 강한 코드를 작성할 수 있는 가이드를 명확하게 제시해 주고 있다.

우리는 메서드가 한가지 일만을 담당하는지 확인해 봐야 한다. 쉽게 말해 한 메서드 안에 중첩된 제어구조가 있지는 않은지, 있다면 해당 메서드는 다단계 추상화를 코드로 작성한 것이다.(한 가지 이상의 일을 하고 있다는 것을 의미한다.)

메서드를 작성할 때 한가지 일만을 담당하도록 코드를 작성하면, 재사용 수준이 기하급수적으로 늘어나게 된다.

아래의 중첩 제어구조를 가진 코드를 리팩토링 하는 예제를 확인해 보도록 하자.

class Board {
   ...
   String board() {
      StringBuffer buf = new StringBuffer();
      for (int i = 0; i < 10; i++) {
         for (int j = 0; j < 10; j++)
            buf.append(data[i][j]);
         buf.append("\n");
      }
      return buf.toString();
   }
}
class Board {
   ...
   String board() {
      StringBuffer buf = new StringBuffer();
      collectRows(buf);
      return buf.toString();
   }
 
   void collectRows(StringBuffer buf) {
      for (int i = 0; i < 10; i++)
         collectRow(buf, i);
   }
 
   void collectRow(StringBuffer buf, int row) {
      for (int i = 0; i < 10; i++)
         buf.append(data[row][i]);
      buf.append("\n");
   }
}

위의 리팩토링으로서 발생하는 효과는 재사용성 이외에도 코드의 가독성이 향상 됨으로서 유지보수나 버그의 존재를 판별하기 쉽고, 메소드 명을 통해서 주석을 작성하지 않더라도, 해당기능을 유추할 수 있다는 점이다.

태그: ,

카테고리:

업데이트:

댓글남기기