ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 클린코드 함수 - 적절한 인수값(Parameter)
    개발/프로그래밍 2020. 9. 27. 14:15

    함수 인수

    이상적인 함수의 인수 개수는 0개이며, 그다음은 1개, 그다음은 2개이다.

    3개 이상은 피하길 권장한다.

    아래의 코드처럼 변수를 인수로 넘겨서 변수를 변경하는 작업을 하지 않고

    클래스 안에 내부 변수를 사용하고 함수 인자로 넘기지 않는 것이 인수를 줄이는 방법이다.

    includeSetupPage(newPageContent); //인수로 넘기기
    includeSetupPage(); //안넘기고 내부 변수로 사용하기

     

    단항 (인수가 1개) 함수는 이럴 때 많이 쓰인다.

    인수에 대한 질문을 던지는 경우 ex> bool isFileExist(myFile)

    혹은 인수를 변환해 결괏값을 리턴하는 경우 ex> InputStream fileOpen(String fileName)

    이런 경우가 아니라면 단항을 피하는 게 좋다고 한다. 위의 inclideSetupPage();처럼 인수 사용을 피해야 한다.

     

    플래그 인수를 사용하지 말아야 한다.

    플래그 인수는 bool 인수를 말한다. ex> render(bool isTest); 

    플래그 인수를 사용하자마자 함수는 참인지 거짓인지 에 따라 두 가지 일을 해야 한다.

     

    이항 함수 (인수가 2개)인 함수는 단항 함수보다 이해하기 어렵다.

    위의 예시처럼 인수가 2개인 것을 1개로 줄이는 게 필요하다. 더 이해하기 쉽기 때문이다.

    writeField(outputStream, name);
    
    writeField(name);  //1
    
    ouputStream.writeField(name); //2
    
    
    //3
    class FieldWriter{
      FieldWriter(this.outputStream);
    
      write(String name){
       //do Something
      }
    }
    final field = FieldWriter(outputStream);
    field.write(name);

    인수를 한 개로 줄이는 세 가지 방법은 이런 방법들이 있다.

    이항 함수가 나쁜 것은 아니나 가능한 한 단항을 쓰도록 해야 한다.

     

    삼항 함수는 신중히 고려해야 한다.

    삼항 함수를 줄이기 위해 일부 인수들을 묶어서 하나의 클래스 변수로 만들 수 있을지를 보는 게 좋다.

    Circle makeCircle(double x , double y, double radius);
    
    //x, y 를 묶어 Point 클래스로
    Circle makeCircle(Point point, double radius);

     

    삼항 함수나 이항 함수의 경우 인수값을 넣을 때 그 순서가 바뀌는 실수를 범할 수도 있다.

    assertEquals(expected, actual)
    

    expected 객체가  actual 객체와 같은지를 확인하는 함수인데

    expected를 넣을 곳에 actual를 넣는 실수를 할 수 있다.

    만약 함수의 이름이 assertExpectedEqualsActual(expected, actual)이라면

    실수를 피할 수도 있을 것이다.

    이렇게 동사와 명사를 한쌍으로 함수명을 지으면 좋다.

     

    댓글

Designed by Tistory.