13.3.4 in 매개변수의 사용 지침
나는 in 매개변수를 실전에서는 거의 사용해 보지 않았다. 그러므로 이번 절에서 살펴볼 사용지침은 개인의 추론에 의한 것임을 미리 밝혀 둔다.
가장 먼저 in 매개변수는 성능을 개선할 목적으로 사용해야 한다는 점을 명심하자. 원칙적으로는의미 있고 반복 가능한 방법으로 성능을 측정하고 개선의 목표를 정하기 전까지는 성능 개선을 위해 코드를 수정하려고 시도하지 않는 편이 좋다. 주의하지 않으면 최적화라는 미명하에 코드를 복잡하게 만들 가능성이 있다. 한두 개 메서드의 성능을 극적으로 개선했다 하더라도 해당 메서드가 핵심 코드가 아니라면 응용프로그램의 성능은 그리 개선되지 않는다. 성능 개선의 목표는 어떤 코드를 개발하고 있는지(게임, 웹 응용프로그램, 라이브러리, IoT 응용프로그램 등)에 달려 있지만, 신중하게 성능을 측정하는 것은 어떤 코드를 개발하느냐와 상관없이 모든 경우에 중요한 부분이다. 코드 일부의 성능을 측정하는 마이크로 벤치마크가 필요하다면 BenchmarkDotNet 프로젝트를 활용해 볼 것을 권한다.
in 매개변수를 사용하면 복사해야 하는 데이터의 크기를 줄일 수 있다. 만약 참조 타입을 주로 사용하고 사용하는 구조체의 크기가 크지 않다면, in 매개변수를 사용하더라도 성능이 그다지 개선되지 않을 것이다. 논리적으로만 보자면, in 매개변수를 사용하더라도 값을 복사하지 않을 뿐이며 저장소의 위치는 메서드에 전달해야 하기 때문이다. 그리고 이와 관련해서는 JIT 컴파일과 최적화 과정이 어떻게 수행되는지 공개되어 있지 않으므로 이야기할 부분이 많지 않다. 테스트도 하지 않고 성능을 임의로 추론하는 것은 좋지 않으며, 실제로 여러 다양한 이유로 추론의 결과가 제대로 들어맞지도 않는다. 다만, 크기가 큰 구조체를 많이 사용하는 경우라면 in 매개변수를 사용했을 때 충분한 소득이 있을 것으로 생각한다.