더북(TheBook)

fixed 문 내에서의 패턴 활용(C# 7.3)

fixed 문은 메모리를 가리키는 포인터를 얻어오는 기능으로, 이 기능을 이용하면 가비지 수집기가 해당 포인터가 가리키는 데이터를 일시적으로 옮기지 못하게 한다. C# 7.3 이전에는 배열, 문자열에 대해 해당 변수의 주소를 얻기 위한 용도로만 제한적으로 사용되었는데, C# 7.3부터는 관리되지 않는 타입의 참조를 반환하는 GetPinnableReference 메서드를 가지고 있는 타입이라면 어떤 타입이든 사용할 수 있도록 개선되었다. 예를 들어 ref int를 반환하는 GetPinnableReference 메서드를 가지고 있다면 다음과 같이 fixed 문을 사용할 수 있다.

fixed (int* ptr = value)  ----- value.GetPinnableReference 호출
{
 ----- 포인터를 이용하는 코드
}

안전하지 않은 코드를 정기적으로 개발해야 하는 극소수의 개발자들 사이에서도 이 메서드를 구현하는 것이 일반적이지는 않다. 예상대로, 이러한 타입이 필요한 경우는 Span<T>ReadOnlySpan<T> 등과 함께 코드 내에서 포인터를 함께 사용할 때로 한정된다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.