unsafe
뜻 그대로 안전하지 않은 코드를 명시할 때 사용하는 키워드이다.
C#에서 모든 메모리 영역은 가비지 컬렉터에 의해서 관리되는데 관리를 벗어난 영역에 작업을 수행하기 위해서 사용한다.
따라서 C#에서 관리하는 기능을 사용하지 않고 직접 관리하는 코드를 사용하겠다는 것을 명시하여 해당 코드를 GC관리로부터 벗어나도록 할 수 있기 때문에 더 자유롭게 메모리 컨트롤이 가능하게 된다. 자유로워진 만큼 메모리 할당과 해제를 모두 직접 구현해야 하며 해당 문제로 에러가 발생하면 메모리 누수, 버퍼 오버플로, 세그먼트 폴트 등 치명적인 결함이 발생하게 된다.
발생하는 문제가 치명적인만큼 이를 다루기 위해서 unsafe 키워드를 통해서 반드시 명시된 경우에만 제어권을 얻게 한다.
기본적으로 unsafe를 사용하게 되면 c# 내부에서는 문제로 인식하고 콘솔에 경고를 보내게 된다.
사용처
사용할일이 거의 없는 키워드로 사용하는 상황도 일반적이지 않다.
포인터 사용
C#에서는 포인터 사용을 허용하지 않기 때문에 unsafe를 통해서만 직접 사용이 가능하도록 한다.
빠른 코드 실행
외부 알고리즘의 경우 빠른 코드 실행이 필요하기도 하는데 이럴 때 unsafe코드를 사용하면 성능을 향상할 수 있다.
외부 라이브러리와 상호 작용
일부 외부 라이브러리는 C#의 안전한 기능을 사용할 수 없기도 한데 이때 unsafe코드를 사용하여 외부와 상호 작용이 가능하도록 할 수 있다.
728x90
반응형
'Program Language > C#' 카테고리의 다른 글
C# Yes or No 키워드 : bool (0) | 2023.04.25 |
---|---|
C# 변수 동기화 키워드 : volatile (0) | 2023.04.25 |
C# 정적 키워드 : static (0) | 2023.04.25 |
C# 상속 방지 키워드 : sealed (0) | 2023.04.25 |
C# 읽기 전용 키워드 : readonly (0) | 2023.03.30 |