객체지향 생활체조-규칙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");
}
}
위의 리팩토링으로서 발생하는 효과는 재사용성 이외에도 코드의 가독성이 향상 됨으로서 유지보수나 버그의 존재를 판별하기 쉽고, 메소드 명을 통해서 주석을 작성하지 않더라도, 해당기능을 유추할 수 있다는 점이다.
댓글남기기