Study tips skills/Inspiration

[생각] NULL 에 대한 고찰

생각많은 프로그래머 2024. 2. 19. 09:55

NULL은 사실 독일어로 숫자 '0'을 의미한다. 

처음에 다들 NULL을 '널'이라고 발음해서

살짝 충격을 받았었다.

 

내 세계에서는 NULL은 늘 '눌'이라고 발음하고

그 외에는 생각해본 적이 없었는데...

다른 곳에서는 '널'로 불리고 쓰인다는 게 

별거 아닌데 되게 재밌었던 기억이 있다.

 

아무튼 독일어를 오랫동안 써온 나로서는

발음도 그렇지만 

사실은 NULL의 의미와 개념에 대해서도

오래전부터 0으로 각인된 지 오래라

맨 처음에 NULL이 0과 다르다는 말에

"도대체 이게 무슨 말이지?" 했던 기억이 있다.

 

이제는 아주 자주 쓰는 개념이라

더 이상 헷갈리지는 않지만 NULL을 두고

(다들 별 생각 없어 보였는데...)

혼자만 혼란스러워했던 기억이

새록새록 떠오른다.

 

 

갑자기 NULL에 대한 이런저런 생각이 들어서

이번에는 NULL에 대해 글을 써보고자 한다.

 

프로그래밍에서 NULL이란,

0이나 ""과 같은 문자열 공백이 아니다. 

'값이 없음'을 의미하고

아스키 코드 0번에 해당한다.

 

(숫자이며 문자인 '0'은

아스키 코드값으로 48이라

둘은 엄연히 다르게 인식된다. )

 

독일 위키피디아에서 NULL을

어떻게 설명하고 있는지 궁금해서 한 번 찾아봤다.


출처 :
https://de.wikipedia.org/wiki/Nullwert

 

Nullwert – Wikipedia

Dieser Artikel behandelt den Begriff des Nullwerts aus der EDV; zu weiteren Bedeutungen von Null siehe 0. Als Nullwert (kurz NULL, NIL oder ()) bezeichnet man in der Informatik einen Zustand, der das Fehlen eines Wertes anzeigen soll. Nach Edgar F. Codd un

de.wikipedia.org

 

먼저, 정의를 보면... (갑자기 독일어 번역...) 다음과 같다.

Als Nullwert (kurz NULLNIL oder ()) bezeichnet man in der Informatik einen Zustand, der das Fehlen eines Wertes anzeigen soll. Nach Edgar F. Codd unterscheidet man zwei Arten von NULL: einerseits die Nicht-Existenz einer Eigenschaft („property inapplicable“, z. B. Geschmack einer Strecke), und andererseits das Fehlen des Wertes einer existierenden Eigenschaft („value at present unknown“, z. B. Länge einer noch nicht gemessenen Strecke).[1] Ein Nullwert steht zwar für die Abwesenheit eines Wertes, ist aber selbst ein Wert, der gespeichert, gelesen und verglichen werden kann.
Der Nullwert ist verschieden von der Zahl 0, da diese einen gegebene Quantität repräsentiert. Sprachlich wird gelegentlich der Nullwert von der algebraischen Zahl 0 durch die Aussprache unterschieden, indem (wie im Englischen) ['nʌl] gesprochen wird, um Missverständnisse zu vermeiden.

 

약간의 의역을 담아 번역해 보면...

컴퓨터 과학에서 NULL 값(NULL, NIL 또는 () 및 생략)은 값이 없음을 나타내기 위한 것이다. Edgar F. Codd에 따르면 NULL에는 두 가지 유형이 있다. 첫 번째 유형은 '특성이 존재하지 않는 것'(루트의 취향 등 "적용할 수 없는 속성")을 말한다. 또 다른 유형은 '값이 존재하지 않는 것'을 의미한다. 예를 들어, 아직 측정되지 않은 경로 길이와 같이 "현시점에서 값을 알 수 없음"을 의미한다. NULL 은 값이 존재하지 않는 것을 나타내지만, 동시에 하나의 값으로서 저장될 수 있고, 읽힐 수 있으며 비교될 수 있는 값으로 존재한다. NULL과 숫자 '0'을 비교했을 때,  숫자 0은 특정 수량을 나타내므로 NULL과 다르다. 컴퓨터 과학에서의 NULL은 (수학에서의 '0'과 다르므로, 숫자 '0'과 혼동하지 않도록) 영어 발음 기호에 따라 ['nʌl](널) 이라고 발음하며, 수학에서의  '0' 과 구별되어 사용된다.

 

독일 위키피디아에서 말하는 대로라면

컴퓨터 과학에서는 NULL을 '널'이라고 

발음했던 게 맞았다...! 숫자 NULL(0)과

컴퓨터 과학에서의 NULL은 다르다는 것..!

 

위키피디아에서는 이 외에도

여러 가지 상황에서 NULL이 어떻게

사용되고 인식되는지 설명한 다양한 예시가 있었다.

이 부분도 살펴보고 흥미로운 부분이 있으면 공유해 보겠다.

 

궁금해서 한국 나무위키에도 들어가 봤는데

거기서는 NULL을 아래와 같이 정의하고 있다. 

'화면상에는 표시되지 않고
오직 바이트 상으로만 존재하는 제어 문자 가운데 하나.'

 

이 말도 흥미로운 정의라 생각한다.

NULL은 존재하나 존재하지 않는 특이한 값이다..!

 

 

JAVA를 배울 때도, 

SQL을 배울 때도 NULL이라는 개념이

조금씩 헷갈렸던 것이 사실이다. 

자바 스크립트를 배울 때는

undefined과 NaN까지 추가되어서

혼란이 좀 더 커지기도 했었다.

 

개념적으로 이해하고 있어도

새롭게 프로그래밍 언어를 배울 때마다

NULL이 어떻게 쓰이고 있고

어떻게 이해해야 하는지 작은 차이점들이

있어서 그런 부분들을 중점으로 정리해보고자 한다.

 

이 글에는 내가  NULL에 대해 알게 된 사실들이

생길 때마다 조금씩 추가하여 NULL에 대한 

잡다한.. 지식이 담긴 글로 완성시켜 나가 볼 것이다.

 

 

SQL에서의 NULL

 

SQL에서의 NULL은 '값이 없음'을 의미한다.

테이블을 생성할 때 컬럼 속성에 기술하며,

디폴트 값이 NULL이므로 별도로 'NOT NULL'이라는

제약조건을 걸어서 지정하지 않으면

해당 컬럼은 NULL을 허용하게 된다. 

 

NULL 허용이란 해당 컬럼에 값을 넣지 않아도 된다는

의미이다. NOT NULL로 명시한 컬럼에 데이터를

넣지 않으면 해당 열에 INSERT 시 오류가 발생한다.

 

SQL문이나 PL/SQL 코드를 작성할 때에는

개발자가 가장 하기 쉬운 실수 중 하나가 바로 NULL처리다.

DBMS의 종류에 따라 NULL 처리가 조금씩 달라서

여러 DBMS를 사용한다면 혼동하기 쉽다.

따라서 각 DBMS에 맞는 다양한 처리 방법을

익혀두는 것이 필요하다.