<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://www.gaonwiki.com/w/index.php?action=history&amp;feed=atom&amp;title=NULL%28%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%29</id>
	<title>NULL(프로그래밍) - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="https://www.gaonwiki.com/w/index.php?action=history&amp;feed=atom&amp;title=NULL%28%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%29"/>
	<link rel="alternate" type="text/html" href="https://www.gaonwiki.com/w/index.php?title=NULL(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D)&amp;action=history"/>
	<updated>2026-07-22T03:07:04Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://www.gaonwiki.com/w/index.php?title=NULL(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D)&amp;diff=107737&amp;oldid=prev</id>
		<title>Gaon12: 시작</title>
		<link rel="alternate" type="text/html" href="https://www.gaonwiki.com/w/index.php?title=NULL(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D)&amp;diff=107737&amp;oldid=prev"/>
		<updated>2025-02-05T05:44:08Z</updated>

		<summary type="html">&lt;p&gt;시작&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== 개요 ==&lt;br /&gt;
프로그래밍에서 &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039;은 &amp;quot;값이 없음&amp;quot; 또는 &amp;quot;아무것도 참조하지 않음&amp;quot;을 나타내는 특별한 값이다. 주로 변수, 포인터 또는 참조형 변수가 유효한 데이터를 가리키지 않을 때 이를 명시하기 위해 사용된다. 많은 프로그래밍 언어에서 NULL과 유사한 개념이 존재하며, 이를 통해 값의 부재, 미할당 상태 또는 오류 상황을 구분할 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 역사 ==&lt;br /&gt;
&amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt;의 개념은 1960년대 ALGOL W 프로그래밍 언어에서 처음 도입되었다. 당시 컴퓨터 과학자 Tony Hoare가 이 개념을 도입하였으며, 후에 그는 자신이 도입한 이 개념 때문에 발생한 수많은 버그와 오류를 두고 &amp;quot;십억 달러짜리 실수(Billion Dollar Mistake)&amp;quot;라고 표현하기도 했다. 실제로 NULL 참조로 인한 오류는 오랜 기간 동안 소프트웨어의 안정성과 보안에 심각한 영향을 미쳐왔다.&lt;br /&gt;
&lt;br /&gt;
== 다양한 언어에서의 NULL ==&lt;br /&gt;
각 프로그래밍 언어마다 &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt;(또는 이와 유사한 개념)을 표현하는 방식은 다르지만, 기본적인 목적은 동일하다. 아래는 주요 언어별 &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; 처리 방법과 예시이다.&lt;br /&gt;
&lt;br /&gt;
=== C/C++ ===&lt;br /&gt;
C와 C++에서는 &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt;이 주로 포인터가 유효한 메모리 주소를 가리키지 않음을 나타내기 위해 사용된다.  &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;C 언어:&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt;은 일반적으로 &amp;lt;code&amp;gt;((void*)0)&amp;lt;/code&amp;gt;으로 정의된다.  &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;C++ 언어:&amp;#039;&amp;#039;&amp;#039; 과거에는 정수 &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;이나 &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; 매크로를 사용했으나, C++11 이후에는 보다 명확한 &amp;lt;code&amp;gt;nullptr&amp;lt;/code&amp;gt; 키워드의 사용이 권장된다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int* ptr = NULL;         // C 또는 C++에서 전통적인 NULL 사용&lt;br /&gt;
// C++11 이후에는 아래와 같이 사용 권장&lt;br /&gt;
int* ptr2 = nullptr;&lt;br /&gt;
&lt;br /&gt;
if (ptr == NULL) {&lt;br /&gt;
    printf(&amp;quot;포인터가 NULL입니다.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
[[Java]]에서는 &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt;&amp;#039;&amp;#039;&amp;#039;이 참조형 변수의 기본값으로 사용되며, 해당 변수에 객체가 할당되지 않았음을 나타낸다.  &lt;br /&gt;
단, &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt;은 원시 타입(예: &amp;lt;code&amp;gt;int&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;boolean&amp;lt;/code&amp;gt;)에는 사용할 수 없으며, &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; 참조의 메서드나 필드에 접근하면 &amp;lt;code&amp;gt;NullPointerException&amp;lt;/code&amp;gt;이 발생한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
String str = null;&lt;br /&gt;
if (str == null) {&lt;br /&gt;
    System.out.println(&amp;quot;문자열이 null입니다.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
[[Python]]에서는 &amp;lt;code&amp;gt;None&amp;lt;/code&amp;gt;이라는 단일 객체가 값의 부재를 나타내는 용도로 사용된다.  &lt;br /&gt;
&amp;lt;code&amp;gt;None&amp;lt;/code&amp;gt;은 조건문에서 &amp;lt;code&amp;gt;False&amp;lt;/code&amp;gt;로 평가되며, 함수가 별도의 반환 값을 제공하지 않을 때도 &amp;lt;code&amp;gt;None&amp;lt;/code&amp;gt;을 반환한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
value = None&lt;br /&gt;
if value is None:&lt;br /&gt;
    print(&amp;quot;값이 None입니다.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JavaScript ===&lt;br /&gt;
JavaScript에는 &amp;#039;&amp;#039;&amp;#039;null&amp;#039;&amp;#039;&amp;#039;과 &amp;#039;&amp;#039;&amp;#039;undefined&amp;#039;&amp;#039;&amp;#039; 두 가지 개념이 존재한다.  &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;null:&amp;#039;&amp;#039;&amp;#039; 개발자가 명시적으로 &amp;quot;값이 없음&amp;quot;을 표현하기 위해 할당하는 값이다.  &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;undefined:&amp;#039;&amp;#039;&amp;#039; 변수가 선언되었으나 초기화되지 않았거나, 객체의 존재하지 않는 프로퍼티에 접근할 때 반환된다.  &lt;br /&gt;
특히, &amp;lt;code&amp;gt;typeof null&amp;lt;/code&amp;gt;이 &amp;quot;object&amp;quot;로 나오는 것은 자바스크립트의 오래된 설계상의 오류이다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
let value = null;&lt;br /&gt;
console.log(value === null);  // true&lt;br /&gt;
console.log(typeof null);     // &amp;quot;object&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== NULL의 위험성 ==&lt;br /&gt;
&amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; 참조 오류는 프로그래밍에서 가장 흔히 발생하는 문제 중 하나이다.  &lt;br /&gt;
유효하지 않은 &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; 참조에 접근할 경우, 프로그램은 예외를 발생시키거나 예기치 않은 동작을 보일 수 있다. 이러한 문제는 디버깅을 어렵게 하고, 심각한 경우 프로그램의 크래시나 보안 취약점으로 이어질 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
String str = null;&lt;br /&gt;
int length = str.length();  // NullPointerException 발생!&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 안전한 NULL 처리 방법 ==&lt;br /&gt;
&amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; 관련 오류를 방지하기 위해서는 다음과 같은 방법들을 고려할 수 있다.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; 체크:&amp;#039;&amp;#039;&amp;#039; 변수를 사용하기 전에 해당 변수가 null이 아닌지 항상 확인하는 습관을 들인다.&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
if (str != null) {&lt;br /&gt;
    int length = str.length();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Optional 사용 (Java 8 이상):&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;Optional&amp;lt;/code&amp;gt; 클래스를 활용하면, &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; 여부를 내부적으로 처리하여 불필요한 &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; 체크를 줄일 수 있다.&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
Optional&amp;lt;String&amp;gt; optionalStr = Optional.ofNullable(str);&lt;br /&gt;
optionalStr.ifPresent(s -&amp;gt; System.out.println(s.length()));&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Null Object Pattern:&amp;#039;&amp;#039;&amp;#039; 경우에 따라 &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; 대신 기본 동작을 하는 객체(&amp;lt;code&amp;gt;NULL Object&amp;lt;/code&amp;gt;)를 사용하면, 클라이언트 코드에서 별도의 NULL 체크를 생략할 수 있다.&lt;br /&gt;
&lt;br /&gt;
== NULL 관련 모범 사례 ==&lt;br /&gt;
프로그램의 안정성과 가독성을 높이기 위해 &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt;을 다루는 몇 가지 모범 사례를 소개한다.&lt;br /&gt;
&lt;br /&gt;
=== 변수 초기화 ===&lt;br /&gt;
변수를 선언할 때 명시적으로 초기화하여, 불필요하게 &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; 상태에 머무르지 않도록 한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// 나쁜 예&lt;br /&gt;
String name;&lt;br /&gt;
&lt;br /&gt;
// 좋은 예&lt;br /&gt;
String name = &amp;quot;&amp;quot;;  // 또는 실제 값으로 초기화&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== NULL 대신 빈 컬렉션 사용 ===&lt;br /&gt;
컬렉션이나 배열의 경우, &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt;을 사용하기보다는 빈 컬렉션을 초기값으로 사용하는 것이 좋다. 이렇게 하면 이후 컬렉션을 순회하거나 조작할 때 추가적인 &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; 체크를 피할 수 있다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
// 나쁜 예&lt;br /&gt;
List&amp;lt;String&amp;gt; items = null;&lt;br /&gt;
&lt;br /&gt;
// 좋은 예&lt;br /&gt;
List&amp;lt;String&amp;gt; items = Collections.emptyList();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 추가 고려 사항 ==&lt;br /&gt;
대규모 소프트웨어 개발에서는 &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt;로 인한 오류를 사전에 방지하기 위해 다음과 같은 추가적인 방법들을 고려할 수 있다.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;정적 분석 도구 활용:&amp;#039;&amp;#039;&amp;#039; 코드 리뷰와 함께 정적 분석 도구를 사용하여 NULL 관련 잠재적 오류를 미리 탐지한다.&lt;br /&gt;
  &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;언어 및 프레임워크 선택:&amp;#039;&amp;#039;&amp;#039; 최근에는 &amp;lt;code&amp;gt;NULL&amp;lt;/code&amp;gt; 대신에 더 안전한 자료형&amp;lt;ref&amp;gt;예: &amp;#039;&amp;#039;&amp;#039;옵셔널 타입&amp;#039;&amp;#039;&amp;#039; (Java의 &amp;lt;code&amp;gt;Optional&amp;lt;/code&amp;gt;, Swift의 &amp;lt;code&amp;gt;Optional&amp;lt;/code&amp;gt;) 또는 &amp;#039;&amp;#039;&amp;#039;Maybe 모나드&amp;#039;&amp;#039;&amp;#039; (Haskell의 &amp;lt;code&amp;gt;Maybe&amp;lt;/code&amp;gt;)&amp;lt;/ref&amp;gt;을 기본 제공하는 언어와 프레임워크가 등장하고 있다.&lt;br /&gt;
  &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;명확한 설계 원칙:&amp;#039;&amp;#039;&amp;#039; API 설계 시, &amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; 반환을 최소화하고, 필요한 경우 명시적으로 예외를 던지거나 [[Null Object Pattern]]을 적용하는 등 명확한 설계 원칙을 마련한다.&lt;br /&gt;
&lt;br /&gt;
== 관련 항목 ==&lt;br /&gt;
* [[포인터(프로그래밍)]]&lt;br /&gt;
* [[메모리 관리]]&lt;br /&gt;
* [[예외 처리]]&lt;br /&gt;
* [[Optional 패턴]]&lt;br /&gt;
* [[Null Object Pattern]]&lt;br /&gt;
&lt;br /&gt;
== 각주 ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- 분류 --&amp;gt;&lt;br /&gt;
[[분류:프로그래밍]]&lt;/div&gt;</summary>
		<author><name>Gaon12</name></author>
	</entry>
</feed>