프로그램을 하면서, 규칙을 만들어 쓰는 것은 아니지만, 주로 함수 인터페이스를 만들 때, 다음과 같이 하고 있었다.
- primitive type은 값으로 그냥 넘긴다.
- 변경하지 않을 값이라면 const 참조로 넘긴다.
- 변경할 값이라면 그냥 참조로 넘긴다.
이 정도의 생각으로 무의식적으로 함수를 만들어 쓰고 있었는데, 다음 글은 좀 더 이 부분을 정립시키는데 도움이 될 것 같다.
여기에서는 3가지 질문을 이용해서 5가지의 경우로 구체화해 두었다. 우선 질문은 다음과 같다.
- 값을 수정할 것인가
- 복사하는데 비용이 많이 드는가
- 객체의 생명주기를 유지해야 하는가
각각을 Q1, Q2, Q3 라고 했을 때,
Widget은 임의의 클래스명 혹은 타입이라고 생각하면 된다. 스콧 마이어님이 아마 effective C++에서 설명하신 것 같은데, STL의 iterator나 함수 객체에는 값으로 전달하는 것을 권장을 하는 것 같다. 이것은 책을 한번 뒤져서 봐야 할 것 같다.