More C++ Idioms (55. Named Parameter)

2024. 8. 11. 10:29프로그래밍 (확장)/More C++ Idioms

출처: https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Named_Parameter

 

More C++ Idioms/Named Parameter - Wikibooks, open books for an open world

From Wikibooks, open books for an open world Jump to navigation Jump to search Simulate named (key-value pair) parameter passing style found in other languages instead of position-based parameters. Method chaining, Fluent interface When a function takes ma

en.wikibooks.org

 

인자의 이름을 명시적으로 지정하여 가독성과 유지보수성을 높이는 방법으로 특히 함수에 많은 인자가 있을 때, 특정 인자만 선택적으로 설정하고 싶을 때 사용한다.

(Python과 같은 언어들을 보면 이미 함수 호출 시 function(arg_name=value)와 같이 특정인자를 지정해서 값을 넣을 수 있다. 하지만 C++의 경우 특정 인자에 값을 설정할 수 없고, 인자의 순서대로 값을 설정해야 한다.)

 

핵심

  • 함수 호출 시 인자의 순서에 구애받지 않고 인자의 이름을 명시적으로 지정해서 가독성을 높인다.
  • 많은 인자를 가지는 함수에서 순서가 헷갈리지 않고 명시적이다.
  • 메서드 체이닝과 함께 사용되고 각 인자에 대해 별도의 setter 함수를 제공하고, 마지막에 주로 최종 객체 생성  또는 작업을 하도록 구성한다.

 

예시

(https://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Named_Parameter 참조)

#include <iostream>

class MyParams
{
  public:
    int param1;
    float param2;
    char param3;
    
    MyParams() : param1(0), param2(0.0f), param3('a') {}  // 기본값으로 초기화.
    MyParams& setParam1(int i) { param1 = i; return *this; } // param1 setter.
    MyParams& setParam2(float f) { param2 = f; return *this; } // param2 setter.
    MyParams& setParam3(char c) { param3 = c; return *this; } // param3 setter.

    static MyParams create() {
      return MyParams();
    }
    
    void print() const {
        std::cout << param1 << " " << param2 << " " << param3 << std::endl;
    }
};

int main (void)
{
    // Parameter를 설정하고 print 해보자.
    MyParams::create().setParam1(10).setParam2(10.1f).setParam3('Z').print();
}
10 10.1 Z