객체지향 생활 체조 - 규칙 4: 한 줄에 한 점만 사용

Photo by Xiaofen P on Unsplash

한 줄에 점 하나만 찍는다.

"한 줄에 한 점만 사용"이라는 규칙은 코드를 작성할 때 한 줄(Line)에 "." 하나만 사용하자는 이야기입니다. 단순하게 코드 한 라인에 "." 하나를 사용하는 규칙을 적용하면 코드의 가독성이 좋아집니다. 간단하게 예를 들면 자바에서 람다식을 무자비하게 사용한 코드들에 "한 줄에 한 점만 사용" 이 규칙을 적용하면 코드를 이해하기 쉬워집니다.

 

 하지만 "한 줄에 한 점만 사용" 규칙은 디미터의 법칙이 말하는 "Don't talk to stranger"(낯선 사람과 대화하지 마라), 바꿔 말하면 친구 하고만 말을 하라는 의미도 가지고 있습니다.

 

 일반적으로 한 줄에서 "."이 하나 이상인 경우에는 한 가지 이상의 일을 하고 있다는 것을 알 수 있습니다. 한 가지 이상의 일을 한다면 문제가 없을 수 있지만 대체적으로 A -> B -> C의 형태로 A가 B를 통해 C를 부르는 모습을 볼 수 있습니다. 이러한 형태는 A가 B뿐만 아니라 C까지 알고 있어야 한다는 것을 말하고 결론적으로는 강한 결합도(Strong Coupling)를 가지고 있다는 것을 뜻합니다.

 

 "한 줄에 한 점만 사용"이라는 규칙은 코드의 가독성을 높여 줄 뿐만 아니라 객체 간의 불필요한 결합도를 낮춰줍니다.

예제 코드

public class Board {
    ...

    Post post;
}

public class Post {
    ...

    String message;
}

public class BoardViewer {
    ...

    String boardPrintPreviewAll() {
        StringBuffer stringBuffer = new StringBuffer();

        for (Board board : boards) {
           stringBuffer.append(board.post.message);
        }

        return stringBuffer.toString();
    }
}

 위의 예제는 강한 결합도를 가지고 있는 코드를 예를 들어 작성한 내용입니다. BoardViewer는 Board를 통해서 Post에 접근해 message를 가져와서 사용합니다. BoardViewer가 message를 출력하기 위해서는 Post가 message를 가지고 있다는 사실을 알아야 하고 직접 Post의 Message를 가져와야지만 사용할 수 있습니다.

public class Board {
    ...

    Post post;

    void addTo(StringBuffer stringBuffer) {
        post.addTo(stringBuffer);
    }
}

public class Post {
    ...

    public String message;

    void addTo(StringBuffer stringBuffer) {
        stringBuffer.append(message);
    }
}

public class BoardViewer {
    ...

    String boardPrintPreviewAll() {
        StringBuffer stringBuffer = new StringBuffer();

        for (Board board : boards) {
           board.addTo(stringBuffer);
        }

        return stringBuffer.toString();
    }
}

 

 이 예제는 앞서 작성한 코드를 "한 줄에 한 점만 사용" 규칙을 적용한 예시입니다. 기존의 코드와는 달리 BoardViewer는 Board만 알고 해야 할 일을 말하면 될 뿐 이전처럼 Post를 알지 못합니다. 동시에 Post에 직접 접근해서 message를 가져와 사용하지 않아도 됩니다.

정리하기

 "한 줄에 점 하나만 찍는다."라는 규칙을 적용하게 되면 한 객체가 알아야 하는 다른 객체의 수를 최소화시킬 수 있습니다. 구태여 풀어서 이야기해본다면 자신이 알고 있는 객체 하고만 이야기하고 제 3자인 객체 하고는 말하지 않음으로써 결합도를 약하게 만들어 종속성을 최소화시킵니다.

 

 또한 "한 줄에 점 하나만 찍는다."라는 규칙을 다른 말로는 최소 지식 원칙(Principle of least knowledge)이라고도 이야기합니다.

소프트웍스 앤솔러지 - 객체지향 생활 체조 학습하기

반응형

댓글

Designed by JB FACTORY