[C#] C#에서 포인터를 사용해야 하는 경우

2010. 7. 14. 13:50IT, Smart Life


   C#을 처음 접했을 때, 포인터가 없다는 소리를 듣고 잔잔한 감동(?)을 느낀 적이 있습니다. 전 C언어를 많이 해보지도 않았지만, 사실 C를 접한 사람들 중 많은 수가 포인터 부분에서 머리를 쥐어 뜯어야 한다는 얘기를 많이 들었었죠.

메모리 참조를 프로그래머가 직접 다룰 수 있어 때로는 매우 강력하면서도 때로는 매우 위험한 포인터. 포인터는 유용하기는 해도 너무 위험하기 때문에 C#은 포인터를 기본적으로 지원하지 않는다고 합니다. 그러나 포인터 자체가 필요한 상황은 여전히 있다고 하네요.

 

공부하던 중에, C#에서 포인터가 필요한 상황은 어떤 상황이 있는지 정리된 구절이 있어 발췌해 올립니다.

 


 

[  C#에서 포인터 사용이 필요한 상황  ]

 

  • 포인터를 사용하는 다른 언어와 함께 동작해야 할 때는 어쩔 수 없이 포인터가 필요하다. 특히 윈도우의 API가 포인터를 자주 사용하며 COM 라이브러리도 마찬가지이기 때문에 이 상황을 피할 수는 없다.
     
  • 디버깅 목적으로 메모리 내부를 직접 들여다보고 싶을 때는 포인터만큼 확실한 것이 없다. 포인터를 쓰면 스택을 통째로 덤프해 볼 수도 있고 메모리를 철저하게 감시하면서 저수준에서 디버깅할 수 있다.
     
  • 학습 목적으로 컴파일러나 프레임워크의 동작을 분석할 때도 포인터는 아주 요긴한 수단이 된다. 포인터를 직접 사용하지 않더라도 내부 동작을 포인터 관련 코드로 풀어보면 확실하게 이용되는 경우가 많다. 특히 C 언어에 익숙한 사람들이 이런 방법을 많이 사용한다.
     
  • 극단적으로 성능을 높여야 할 때는 참조 타입보다 포인터를 직접 쓰는 것이 유리하다. 그러나 이는 사실 그다지 설득력이 없는데 C# 자체가 워낙 느리기 때문에 포인터를 써 봐야 성능 개선 효과는 미미하다. 성능이 그토록 중요하다면 c#을 사용해서는 안 되며 Native 코드로 DLL을 만든 후 C#에서 불러 쓰는 것이 더 좋다.

 

[출처] .NET 프로그래밍 정복(김상형 저)