프로그래밍/(도서)C#코딩의기술-실전

[C#] 코딩의기술(실전편) - 2.6 unsafe

Victory_HA 2022. 3. 31. 22:30

unsafe 컨텍스트

  • 메서드, 형, 코드 블록은 unsafe로 정의할 수 있습니다.
  • unsafe 코드로 어플리케이션 성능을 끌어올릴 수 있다.
  • unsafe 코드는 포인터를 사용해야 하는 네이티브 함수를 호출할 때 필요합니다.
  • unsafe 코드를 사용하면 보안성과 안정성 측면의 위험도가 커집니다.
  • C#에서 unsafe 코드를 컴파일하려면 빌드 속성 설정이 필요합니다.

unsafe 예제

  • C# 에서는 일반적으로 포인터를 사용하지 않습니다.
  • 간혹 C++ 에서 사용하던 Class를 가져오면서 포인터를 사용해야 하는 경우 unsafe를 사용합니다.
class UnsafeTEST
{
    unsafe static void SquarePtrParam(int* p)
    {
        *p *= *p;
    }

    unsafe static void Main()
    {
        int i = 5;
        SquarePtrParam(&i);
        Console.WriteLine(i);
    }
}

unsafe 사용시 빌드 속성

  • unsafe 한정자를 사용할 경우에는 안전하지 않은 코드 허용(F) 를 체크해야지만, 빌드 오류가 나지 않습니다.

정리

  • unsafe는 거의 모든 C# 프로그래머가 사용하지 않는 기능입니다.
  • 위험성이 높아 가급적 사용하지 않는 편이 좋으며, unsafe 키워드를 사용해야할 상황도 거의 없습니다.