[자바 무료 강의] null ? - 코드라떼
Lesson List button
코스자바로 배우는 프로그래밍
hamburger button
강의null ?최종수정일 2021-09-07
아이콘약 10분

앞으로도 자주 보게 될 null 값에 대해 알아봅시다.

노트 강의

Null


null에 대해서 정식적으로 설명하거나 강의를 한적은 없지만 실습을 하다보면 간간히 봤을 가능성이 높습니다.

null 이라는 것은 참조 자료형 변수만 선언하고 인스턴스의 참조 값이 저장되어 있지 않았을 때 기본적으로 null 값이 저장되어 있습니다.



case 1

String[] strArray = new String[3]; System.out.println(strArray[0]); System.out.println(strArray[1]); System.out.println(strArray[2]); // null // null // null
copy

index를 이용하여 배열에 접근해보면 실제로 null이 출력됩니다.



case 2

String text = null; System.out.println(text);
copy

변수에 접근해보면 실제로 null이 출력됩니다.



case 3

만약에 Fruit 클래스가 존재하고 Fruit 참조 자료형 변수에 null 값을 저장했다고 가정해봅시다.

class Fruit { String name = "사과"; }
copy
Fruit fruit = null; System.out.println(fruit.name);
copy

이와 같은 코드를 실행해보면 어떻게 될까요?

Fruit fruit 참조 자료형 변수에 Fruit 인스턴스의 참조값이 저장되어 있다면, Fruit 인스턴스의 name 변수에 접근하여 값을 읽을 수 있습니다. 그러나 참조값이 아닌 null 값이 저장되어 있으므로 Fruit 인스턴스에 접근할 수 없고 NullPointerException이 발생합니다.


메서드와 매개변수와 null

class Person { String name = "김철수"; public void setName(String name) { this.name = name; } }
copy
Person person = new Person(); person.setName(null);
copy

메서드의 매개 변수가 참조 자료형인 경우 null 값을 전달할 수 있습니다. 이렇게 되면 name 변수는 null 값을 저장하게 됩니다. 메서드와 동일하게 생성자의 매개변수가 참조 자료형으로 선언되었을 경우도 동일합니다.


null 값을 확인하는 방법

null 값을 의도적으로 사용하기도 하고 의도적이지 않을 때도 있습니다. 의도적이든 비의도적이든 null 값을 확인할 필요가 있습니다. null==, != 연산자를 이용하여 확인할 수 있습니다.

if (null == name) { // name 변수에 저장된 값이 null 값이다. }
copy

다음 예시입니다.

String[] strArray = new String[4]; strArray[0] = "1"; strArray[2] = "2"; strArray[3] = "3"; for (int i = 0; i < strArray.length; i++) { System.out.println(strArray[i]); } // 출력 // 1 // null // 2 // 3
copy

공간이 네 개인 String 형 배열 인스턴스를 생성했습니다. 이러한 배열을 i는 0부터 배열의 크기전까지 순차적으로 배열의 내용을 읽는 코드입니다.

코드를 실행시키면 1, null, 2, 3이 출력됩니다. 만약에 null 값을 출력하고 싶지 않다면 어떻게 할까요?

String[] strArray = new String[4]; strArray[0] = "1"; strArray[2] = "2"; strArray[3] = "3"; for (int i = 0; i < strArray.length; i++) { if (null != strArray[i]) { System.out.println(strArray[i]); } } // 출력 // 1 // 2 // 3
copy

조건문을 통해 null 값이 아닌 것만 확인하여 출력하면 됩니다.


마치며

이번 강의는 null 값에 대해 정리했습니다. 실제로 null 값을 빈번히 볼 수 있으며, NullPointerException도 앞으로 빈번히 보게 될 겁니다. NullPointerException이 발생해도 두려워 하지 마세요. 해결할 수 있는 방법은 있습니다. 해결 하는 방법은 예외 처리 강의에서 진행합니다.

도전자 질문
아이콘resCogitans(2021-07-01 04:14 작성됨)
fruit 참조형 변수에 Fruit 인스턴스의 참조 값이 저장되어 있다면 참조 값을 통해 Fruit 인스턴스에 접근하고 Fruit 인스턴스의 name 변수에 접근하여 값을 읽을 수 있습니다. 그러나 참조값이 아닌 null 값이 저장되어 있으므로 Fruit 인스턴스에 접근한려고 하면 NullPointerException이 발생하게 됩니다.

-> Fruit 클래스의 참조값이 아니라 fruit 인스턴스라는 의미로 쓰신 건가요?
fruit참조형변수에 fruit인스턴스의 참조 값이 저장되어 있고, 그것을 통해(C의 포인터가 주소를 가리키듯이) name변수로 접근한다는 의미로 이해했는데, 맞는지 궁금합니다.
아이콘코드라떼(2021-07-01 04:37 작성됨)
다시 읽어보니 작성된 문장이 이상하네요. 해당 내용을 재작성한다면.. 

'Fruit fruit' 참조 자료형 변수에 Fruit 인스턴스의 참조값이 저장되어 있다면, Fruit 인스턴스의 name 변수에 접근하여 값을 읽을 수 있습니다. 그러나 참조값이 아닌 null 값이 저장되어 있으므로 Fruit 인스턴스에 접근할 수 없고 NullPointerException이 발생합니다.

이게 더 깔끔한 것 같습니다^^
이용약관|개인정보취급방침
알유티씨클래스|대표, 개인정보보호책임자 : 이병록
이메일 : cs@codelatte.io
사업자등록번호 : 824-06-01921
통신판매업신고 : 2021-성남분당C-0740
주소 : 경기도 성남시 분당구 대왕판교로645번길 12, 9층 24호
파일
파일파일
Root
파일

Output
root$
Lesson List button
코스자바로 배우는 프로그래밍
hamburger button
강의null ?최종수정일 2021-09-07
아이콘약 10분

앞으로도 자주 보게 될 null 값에 대해 알아봅시다.

노트 강의

Null


null에 대해서 정식적으로 설명하거나 강의를 한적은 없지만 실습을 하다보면 간간히 봤을 가능성이 높습니다.

null 이라는 것은 참조 자료형 변수만 선언하고 인스턴스의 참조 값이 저장되어 있지 않았을 때 기본적으로 null 값이 저장되어 있습니다.



case 1

String[] strArray = new String[3]; System.out.println(strArray[0]); System.out.println(strArray[1]); System.out.println(strArray[2]); // null // null // null
copy

index를 이용하여 배열에 접근해보면 실제로 null이 출력됩니다.



case 2

String text = null; System.out.println(text);
copy

변수에 접근해보면 실제로 null이 출력됩니다.



case 3

만약에 Fruit 클래스가 존재하고 Fruit 참조 자료형 변수에 null 값을 저장했다고 가정해봅시다.

class Fruit { String name = "사과"; }
copy
Fruit fruit = null; System.out.println(fruit.name);
copy

이와 같은 코드를 실행해보면 어떻게 될까요?

Fruit fruit 참조 자료형 변수에 Fruit 인스턴스의 참조값이 저장되어 있다면, Fruit 인스턴스의 name 변수에 접근하여 값을 읽을 수 있습니다. 그러나 참조값이 아닌 null 값이 저장되어 있으므로 Fruit 인스턴스에 접근할 수 없고 NullPointerException이 발생합니다.


메서드와 매개변수와 null

class Person { String name = "김철수"; public void setName(String name) { this.name = name; } }
copy
Person person = new Person(); person.setName(null);
copy

메서드의 매개 변수가 참조 자료형인 경우 null 값을 전달할 수 있습니다. 이렇게 되면 name 변수는 null 값을 저장하게 됩니다. 메서드와 동일하게 생성자의 매개변수가 참조 자료형으로 선언되었을 경우도 동일합니다.


null 값을 확인하는 방법

null 값을 의도적으로 사용하기도 하고 의도적이지 않을 때도 있습니다. 의도적이든 비의도적이든 null 값을 확인할 필요가 있습니다. null==, != 연산자를 이용하여 확인할 수 있습니다.

if (null == name) { // name 변수에 저장된 값이 null 값이다. }
copy

다음 예시입니다.

String[] strArray = new String[4]; strArray[0] = "1"; strArray[2] = "2"; strArray[3] = "3"; for (int i = 0; i < strArray.length; i++) { System.out.println(strArray[i]); } // 출력 // 1 // null // 2 // 3
copy

공간이 네 개인 String 형 배열 인스턴스를 생성했습니다. 이러한 배열을 i는 0부터 배열의 크기전까지 순차적으로 배열의 내용을 읽는 코드입니다.

코드를 실행시키면 1, null, 2, 3이 출력됩니다. 만약에 null 값을 출력하고 싶지 않다면 어떻게 할까요?

String[] strArray = new String[4]; strArray[0] = "1"; strArray[2] = "2"; strArray[3] = "3"; for (int i = 0; i < strArray.length; i++) { if (null != strArray[i]) { System.out.println(strArray[i]); } } // 출력 // 1 // 2 // 3
copy

조건문을 통해 null 값이 아닌 것만 확인하여 출력하면 됩니다.


마치며

이번 강의는 null 값에 대해 정리했습니다. 실제로 null 값을 빈번히 볼 수 있으며, NullPointerException도 앞으로 빈번히 보게 될 겁니다. NullPointerException이 발생해도 두려워 하지 마세요. 해결할 수 있는 방법은 있습니다. 해결 하는 방법은 예외 처리 강의에서 진행합니다.

도전자 질문
아이콘resCogitans(2021-07-01 04:14 작성됨)
fruit 참조형 변수에 Fruit 인스턴스의 참조 값이 저장되어 있다면 참조 값을 통해 Fruit 인스턴스에 접근하고 Fruit 인스턴스의 name 변수에 접근하여 값을 읽을 수 있습니다. 그러나 참조값이 아닌 null 값이 저장되어 있으므로 Fruit 인스턴스에 접근한려고 하면 NullPointerException이 발생하게 됩니다.

-> Fruit 클래스의 참조값이 아니라 fruit 인스턴스라는 의미로 쓰신 건가요?
fruit참조형변수에 fruit인스턴스의 참조 값이 저장되어 있고, 그것을 통해(C의 포인터가 주소를 가리키듯이) name변수로 접근한다는 의미로 이해했는데, 맞는지 궁금합니다.
아이콘코드라떼(2021-07-01 04:37 작성됨)
다시 읽어보니 작성된 문장이 이상하네요. 해당 내용을 재작성한다면.. 

'Fruit fruit' 참조 자료형 변수에 Fruit 인스턴스의 참조값이 저장되어 있다면, Fruit 인스턴스의 name 변수에 접근하여 값을 읽을 수 있습니다. 그러나 참조값이 아닌 null 값이 저장되어 있으므로 Fruit 인스턴스에 접근할 수 없고 NullPointerException이 발생합니다.

이게 더 깔끔한 것 같습니다^^
이용약관|개인정보취급방침
알유티씨클래스|대표, 개인정보보호책임자 : 이병록
이메일 : cs@codelatte.io|운영시간 09:00 - 18:00(평일)
사업자등록번호 : 824-06-01921|통신판매업신고 : 2021-성남분당C-0740
주소 : 경기도 성남시 분당구 대왕판교로645번길 12, 9층 24호(경기창조혁신센터)
파일
파일파일
Root
파일

Output
root$