2025. 7. 1. 15:30

0. 사건 개요

저는 방어적으로 코드를 짜다 보니 널 체크(null check) 앵간해서 꼭하는데......

널체크를 했는 널(null)이 발생합니다?

 

 

1. 사건의 진실

사실 이건 훼이크입니다.

'Newtonsoft.Json'같은 외부 라이브러리를 사용할 때 

해당 라이브러리 안에서 매개변수를 'null'로 만들어버리는 경우가 있습니다.

 

 

2. 사건의 이해

순간적으로 보면 이게 무슨 상황인지 이해할 수가 없죠 ㅎㅎㅎㅎ

특히나 문자열의 경우 값 타입처럼 보이지만 실제론 참조 타입이라 더 햇갈릴 수 있습니다.

 

함수 안에서 매개변수를 수정하는 경우 은근히 보는 현상입니다.

그래서 전달받은 값을 직접 컨트롤하는걸 자제하는 것이 좋습니다.

특히 문자열일 때 조심해야 하고 필요하다면 매개변수를 복사하여 사용하는 것이 좋습니다.

 

숫자와 같은 값 타입은 이런 현상이 없습니다.

문자열은 메모리를 복사하면서 동작하므로 구현에 따라 매개변수가 'null'되지 않을 수 있습니다.

 

 

마무리

정말 특수한 상황이라 보기 쉬운 현상은 아닙니다.

자주 쓰는 라이브러리인 'Newtonsoft.Json'을 사용할 때 잘못된 문자열이 들어가면 자주 보이는 오류라 좀 보이는 오류라는 착각이 있지

일반적인 코딩 스타일에서는 보기 힘든 오류라고 할 수 있겠습니다.