프로그래밍을 하다 보면 가장 자주 마주치는 값 중 하나가 null입니다. 많은 초보 개발자들이 null 뜻을 제대로 이해하지 못해 NullPointerException과 싸우는 시간을 보내곤 하죠. 오늘은 null이 무엇인지, 왜 발생하는지, 그리고 어떻게 다루면 좋은지를 쉽게 풀어보려고 합니다. 먼저 핵심만 요약해 보겠습니다.
| 항목 | 설명 |
|---|---|
| null 뜻 | 값이 없음을 나타내는 특별한 참조값 |
| 주요 특징 | 메모리 주소가 없음, 객체 변수의 초기값 |
| 주의점 | null에 접근하면 예외가 발생할 수 있음 |
null이 도대체 뭘까
null은 프로그래밍 언어에서 ‘아무것도 가리키지 않음’을 표현하는 값입니다. 변수가 선언되었지만 아직 어떤 객체도 참조하지 않을 때 주로 사용됩니다. 예를 들어 자바에서 String name = null; 이라고 선언하면 name은 문자열 객체를 전혀 가리키지 않는 상태가 됩니다. 이 상태에서 name.length() 같은 메서드를 호출하면 NullPointerException이 발생하죠. 제가 처음 자바를 배울 때 이 null 뜻을 제대로 몰라서 수많은 오류를 만났습니다. 특히 데이터베이스에서 값을 가져와서 바로 처리할 때 null이 들어오면 앱이 죽어버리는 경험을 여러 번 했어요. 그때마다 디버깅하면서 null 체크의 중요성을 뼈저리게 느꼈습니다.
요즘 언어들은 null을 더 안전하게 다루는 방법을 제공합니다. 코틀린의 Null Safety, 스위프트의 옵셔널, 타입스크립트의 유니온 타입 등이 대표적이죠. 하지만 자바나 C++ 같은 전통 언어에서는 여전히 개발자가 직접 null을 신경 써야 합니다. null 뜻을 정확히 알면 예외를 사전에 방지할 수 있고, 코드의 신뢰성이 높아집니다.

null과 비슷한 개념들의 차이
null 말고도 ‘값 없음’을 나타내는 개념이 여럿 있습니다. 자바스크립트의 undefined, 파이썬의 None, SQL의 NULL 등이 대표적이죠. 각각 미묘하게 다른 의미를 가지므로 언어에 맞게 이해하는 것이 중요합니다. 예를 들어 자바스크립트에서 typeof null은 “object”를 반환하는데, 이는 초기 구현의 버그로 유명합니다. 하지만 실제로는 객체가 아니라 원시값입니다. 이처럼 null 뜻 하나만 알아도 언어의 특성을 더 깊이 이해할 수 있습니다.
실무에서 null을 다룰 때 가장 자주 쓰는 패턴은 조건문으로 null인지 확인하는 것입니다. if (변수 == null) 같은 식으로 체크하고, null이면 기본값을 할당하거나 예외를 던집니다. 자바 8부터는 Optional 클래스를 제공해 더 우아하게 null을 처리할 수 있습니다. 최근 제가 리팩토링한 프로젝트에서도 null 체크를 Optional로 변경했더니 코드가 훨씬 깔끔해졌습니다.
null을 피하는 코딩 습관
가장 좋은 방법은 애초에 null이 생기지 않도록 설계하는 것입니다. 메서드에서 null을 반환하기보다 빈 컬렉션이나 빈 문자열을 반환하는 것이 낫습니다. 또 생성자나 초기화 시점에 모든 필드를 확실히 채워두면 null로 인한 문제를 줄일 수 있습니다.
프레임워크에서도 null 처리를 지원합니다. 스프링의 @Nullable, @NonNull 애노테이션을 사용하면 IDE가 컴파일 타임에 경고를 줘서 실수를 방지할 수 있습니다. 제가 예전에 운영하던 서비스에서 고객 정보를 조회할 때 null 체크를 빼먹어서 500 에러가 발생한 적이 있습니다. 그 이후로는 모든 객체 사용 전에 null 뜻을 상기하며 꼼꼼히 확인하는 습관이 생겼어요. 개발자는 실수를 통해 배우는 게 많지만, null 같은 기본 개념을 확실히 알면 그런 실수를 최소화할 수 있습니다.
null을 완전히 없앨 수는 없지만, 언어 차원의 안전 장치를 활용하면 많이 줄일 수 있습니다. 코틀린을 사용한다면 ?. 연산자와 엘비스 연산자를 적극 활용해 보세요. 자바도 Optional.ofNullable() 등을 잘 사용하면 null로 인한 골치 아픈 일이 줄어듭니다. 이 글이 null 뜻을 이해하고, 더 나은 코드를 작성하는 데 도움이 되길 바랍니다.
더 자세한 null의 동작 원리를 알고 싶다면 MDN 문서를 참고해 보세요.
자주 묻는 질문
Q1: null과 undefined는 어떻게 다른가요?
자바스크립트 기준으로 null은 개발자가 의도적으로 ‘값이 없음’을 할당한 것이고, undefined는 변수가 선언만 되고 값이 할당되지 않은 상태입니다. typeof null은 object, typeof undefined는 undefined로 나옵니다.
Q2: 자바에서 null 체크는 어떻게 하는 게 좋나요?
기본적으로 if (obj != null)로 체크합니다. 자바 8 이상이라면 Optional.ofNullable(obj).orElse(defaultValue) 패턴을 추천합니다. Lombok의 @NonNull 애노테이션도 실수를 줄여줍니다.
Q3: SQL에서 NULL은 어떻게 처리하나요?
SQL에서 NULL은 ‘알 수 없음’을 의미합니다. 비교 연산자(==)로 비교할 수 없고 IS NULL, IS NOT NULL을 사용해야 합니다. 집계 함수는 NULL을 무시하므로 주의가 필요합니다.





