본문 바로가기
Programming/Java, Spring

코드 한 줄에 점(.)을 하나만 허용했는가? - 우아한테크코스 우테코 클린코드 #8

by Renechoi 2022. 11. 1.

코드 한 줄에 점(.)을 하나만 허용했는가? - 우아한테크코스 우테코 클린코드 #8

 

이전글에 이어 우아한테크코스에서 요구하는 클린코드 원칙들을 살펴본다. 

 


 

<소트웍스 앤솔러지>에서는 한 줄에 한 점만 사용하는 규칙을 주장하며 다음과 같이 적고 있다. 

 

종종 하나의 동작에 대해 어떤 객체가 맡고 있는지 구분하기 어려울 때가 있다. 여러 개의 점이 들어 있는 코드 몇 줄을 들여다보기 시작하면 책임 소재의 오류를 많이 발견하기 시작한다. 어떠한 코드 한 줄에서라도 점이 하나 이상 있으면 그른 곳에서 동작이 일어나고 있다는 뜻이다. 어쩌면 객체는 다른 두 객체를 동시에 다루고 있을지도 모른다. 이 경구 그 객체는 중개상, 즉 너무 많은 사람들에 대해 지나치게 알고 있는 꼴이다. 

...

디미터의 법칙("친구하고만 대화라")이 좋은 출발점이긴 하지만, 이런 식으로 생각하자. 자기 소유의 장난감, 자기가 만든 장난감, 그리고 누군가 자기에게 준 장난감하고만 놀 수 있다. 하지만 절대 장난감의 장난감과 놀면 안 된다. 

 

 

예를 들어 아래의 코드에서 연속되는 여러 개의 점(.)이 등장하면 리팩토링할 부분을 찾아보아야 한다. 

 

   class Location {
      ...
      Piece current;
   }
 
   String boardRepresentation() {
      StringBuffer buf = new StringBuffer();
      for (Location l : squares())
         buf.append(l.current.representation.substring(0, 1));
      return buf.toString();
   }

 

하지만 단순히 라인에 존재하는 점의 개수를 수치적으로 줄이라는 의미보다는 필드나 메서드를 통해 인스턴스에 접근하는 방식 자체를 재고해보라는 뜻으로 해석된다. 점의 개수가 많다면 일반적으로 호출자와 피호출자 사이의 강한 결합도를 바탕으로 메서드의 응집력을 떨어뜨리고 있을 확률이 높기 때문이다. 

 

디미터의 법칙이란 객체 간의 관계에서 이웃하지 않는 낯선 객체와 메세지를 보내는 설계는 피하라는 것이다. 

 

 

 

 

 

 

반응형