Public 메소드의 파라미터에 구현을 선택하는 전달인자(selector argument)가 들어가면 안됩니다.

 

메소드를 실행할 때 분기되는 두 개의 경로 중 어떤 경로를 선택할지 알려주는 boolean 전달인자를 보고 selector argument라고 부릅니다. 이러한 전달인자는 이름만 잘 짓는다면 꽤나 그럴 듯 하게 보일 수 있습니다.

하지만 안타깝게도 코드를 호출하는 사람 입장에선 이 파라미터의 이름을 볼 수 있는 방법이 없습니다. 그래서 이 전달인자가 메소드상에서 무슨 의미를 갖는지 확인하기 위해 시간을 더 들이게 만듭니다.

selector argument를 사용하는 대신 메소드를 분리해서 작성해야 합니다.

이 규칙은 메소드가 통과하는 경로를 결정하는 데 사용되는 boolean argument가 있는지 확인하여 동작합니다.

규칙을 어긴 코드

public String tempt(String name, boolean ofAge) {
  if (ofAge) {
    offerLiquor(name);
  } else {
    offerCandy(name);
  }
}

// ...
public void corrupt() {
  tempt("Joe", false); // does this mean not to temp Joe?
}

규칙을 준수한 해결책

public void temptAdult(String name) {
  offerLiquor(name);
}

public void temptChild(String name) {
  offerCandy(name);
}

// ...
public void corrupt() {
  age < legalAge ? temptChild("Joe") : temptAdult("Joe");
}

If you like SONARKUBE, don’t forget to give me a star. :star2:

원문으로 바로가기

Star This Project