최대 1 분 소요

C++만 쓰다가 가끔 C#을 다뤄야 할 때가 있는데, 이럴 때마다 “왜 안 되지?” 싶어서 시간을 낭비하는 경우가 종종 생긴다.

public void CheckAllServers( List<ServerStatus>& list )
{
  for ( auto serverStatus : list )
      serverStatus.status = CheckSocket( serverStatus.ip, serverStatus.port );
}

C++였다면 이렇게 사용하면 될 기능을..

public void CheckAllServers( ref List<ServerStatus> list )
{
    for ( int i = 0; i < list.Count; ++i )
    {
        ServerStatus serverStatus = list[ i ];
        serverStatus.status = CheckSocket( serverStatus.ip, serverStatus.port );
        list[ i ] = serverStatus;
    }
}

이렇게 사용해야한다.

ref로 받은 리스트의 원소는 다시 ref로 접근할 수 없기 때문에, 새로운 객체를 복사하고 수정한 뒤 다시 대입하는 번거로운 과정이 필요하다.

C#이 여러 면에서 C++보다 개선된 언어라고 하지만, 이런 부분에서는 오히려 C++의 참조 기반 접근 방식이 더 직관적이다.

댓글 남기기