앞으로도 자주 보게 될 null 값에 대해 알아봅시다.
null
에 대해서 정식적으로 설명하거나 강의를 한적은 없지만 실습을 하다보면 간간히 봤을 가능성이 높습니다.
null
이라는 것은 참조 자료형 변수만 선언하고 인스턴스의 참조 값이 저장되어 있지 않았을 때 기본적으로 null
값이 저장되어 있습니다.
ㅤ
String[] strArray = new String[3];
System.out.println(strArray[0]);
System.out.println(strArray[1]);
System.out.println(strArray[2]);
// null
// null
// null
index를 이용하여 배열에 접근해보면 실제로 null
이 출력됩니다.
ㅤ
String text = null;
System.out.println(text);
변수에 접근해보면 실제로 null
이 출력됩니다.
ㅤ
만약에 Fruit
클래스가 존재하고 Fruit 참조 자료형 변수에 null 값을 저장했다고 가정해봅시다.
class Fruit {
String name = "사과";
}
Fruit fruit = null;
System.out.println(fruit.name);
이와 같은 코드를 실행해보면 어떻게 될까요?
Fruit fruit
참조 자료형 변수에 Fruit
인스턴스의 참조값이 저장되어 있다면, Fruit
인스턴스의 name 변수에 접근하여 값을 읽을 수 있습니다. 그러나 참조값이 아닌 null 값이 저장되어 있으므로 Fruit
인스턴스에 접근할 수 없고 NullPointerException
이 발생합니다.
ㅤ
class Person {
String name = "김철수";
public void setName(String name) {
this.name = name;
}
}
Person person = new Person();
person.setName(null);
메서드의 매개 변수가 참조 자료형인 경우 null
값을 전달할 수 있습니다. 이렇게 되면 name 변수는 null
값을 저장하게 됩니다. 메서드와 동일하게 생성자의 매개변수가 참조 자료형으로 선언되었을 경우도 동일합니다.
ㅤ
null
값을 의도적으로 사용하기도 하고 의도적이지 않을 때도 있습니다. 의도적이든 비의도적이든 null
값을 확인할 필요가 있습니다. null
과 ==
, !=
연산자를 이용하여 확인할 수 있습니다.
if (null == name) {
// name 변수에 저장된 값이 null 값이다.
}
다음 예시입니다.
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
공간이 네 개인 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
조건문을 통해 null
값이 아닌 것만 확인하여 출력하면 됩니다.
ㅤ
이번 강의는 null
값에 대해 정리했습니다. 실제로 null
값을 빈번히 볼 수 있으며, NullPointerException
도 앞으로 빈번히 보게 될 겁니다. NullPointerException
이 발생해도 두려워 하지 마세요. 해결할 수 있는 방법은 있습니다. 해결 하는 방법은 예외 처리 강의에서 진행합니다.
null도 하나의 객체로 이해해도 되나요? Fruit fruit = null; 일 때 fruit변수에 null객체의 레퍼런스 값이 저장된다.고 생각하면 무리가 있을까요?
안녕하세요. 코드라떼입니다 :) 자바 언어 스펙에서의 null은 기본형(PrimitiveType)도 아니고 참조형(ReferenceType)도 아닌 별도의 null type으로 봅니다. 이게 끝입니다. 실제로 null을 어떻게 처리하는지는 자바 가상 머신 구현체마다 다를 수 있습니다. C나 C++에서는 null을 0의 값으로보나 자바에서는 null을 특정한 리터럴로 봅니다. 결론적으로 null 참조값으로 생각하시면 됩니다. (줄여서 null값) 인스턴스에 접근할 수 있는 참조값도 본질적으론 정수형입니다. 감사합니다 :)
fruit 참조형 변수에 Fruit 인스턴스의 참조 값이 저장되어 있다면 참조 값을 통해 Fruit 인스턴스에 접근하고 Fruit 인스턴스의 name 변수에 접근하여 값을 읽을 수 있습니다. 그러나 참조값이 아닌 null 값이 저장되어 있으므로 Fruit 인스턴스에 접근한려고 하면 NullPointerException이 발생하게 됩니다. -> Fruit 클래스의 참조값이 아니라 fruit 인스턴스라는 의미로 쓰신 건가요? fruit참조형변수에 fruit인스턴스의 참조 값이 저장되어 있고, 그것을 통해(C의 포인터가 주소를 가리키듯이) name변수로 접근한다는 의미로 이해했는데, 맞는지 궁금합니다.
다시 읽어보니 작성된 문장이 이상하네요. 해당 내용을 재작성한다면.. 'Fruit fruit' 참조 자료형 변수에 Fruit 인스턴스의 참조값이 저장되어 있다면, Fruit 인스턴스의 name 변수에 접근하여 값을 읽을 수 있습니다. 그러나 참조값이 아닌 null 값이 저장되어 있으므로 Fruit 인스턴스에 접근할 수 없고 NullPointerException이 발생합니다. 이게 더 깔끔한 것 같습니다^^
앞으로도 자주 보게 될 null 값에 대해 알아봅시다.
null
에 대해서 정식적으로 설명하거나 강의를 한적은 없지만 실습을 하다보면 간간히 봤을 가능성이 높습니다.
null
이라는 것은 참조 자료형 변수만 선언하고 인스턴스의 참조 값이 저장되어 있지 않았을 때 기본적으로 null
값이 저장되어 있습니다.
ㅤ
String[] strArray = new String[3];
System.out.println(strArray[0]);
System.out.println(strArray[1]);
System.out.println(strArray[2]);
// null
// null
// null
index를 이용하여 배열에 접근해보면 실제로 null
이 출력됩니다.
ㅤ
String text = null;
System.out.println(text);
변수에 접근해보면 실제로 null
이 출력됩니다.
ㅤ
만약에 Fruit
클래스가 존재하고 Fruit 참조 자료형 변수에 null 값을 저장했다고 가정해봅시다.
class Fruit {
String name = "사과";
}
Fruit fruit = null;
System.out.println(fruit.name);
이와 같은 코드를 실행해보면 어떻게 될까요?
Fruit fruit
참조 자료형 변수에 Fruit
인스턴스의 참조값이 저장되어 있다면, Fruit
인스턴스의 name 변수에 접근하여 값을 읽을 수 있습니다. 그러나 참조값이 아닌 null 값이 저장되어 있으므로 Fruit
인스턴스에 접근할 수 없고 NullPointerException
이 발생합니다.
ㅤ
class Person {
String name = "김철수";
public void setName(String name) {
this.name = name;
}
}
Person person = new Person();
person.setName(null);
메서드의 매개 변수가 참조 자료형인 경우 null
값을 전달할 수 있습니다. 이렇게 되면 name 변수는 null
값을 저장하게 됩니다. 메서드와 동일하게 생성자의 매개변수가 참조 자료형으로 선언되었을 경우도 동일합니다.
ㅤ
null
값을 의도적으로 사용하기도 하고 의도적이지 않을 때도 있습니다. 의도적이든 비의도적이든 null
값을 확인할 필요가 있습니다. null
과 ==
, !=
연산자를 이용하여 확인할 수 있습니다.
if (null == name) {
// name 변수에 저장된 값이 null 값이다.
}
다음 예시입니다.
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
공간이 네 개인 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
조건문을 통해 null
값이 아닌 것만 확인하여 출력하면 됩니다.
ㅤ
이번 강의는 null
값에 대해 정리했습니다. 실제로 null
값을 빈번히 볼 수 있으며, NullPointerException
도 앞으로 빈번히 보게 될 겁니다. NullPointerException
이 발생해도 두려워 하지 마세요. 해결할 수 있는 방법은 있습니다. 해결 하는 방법은 예외 처리 강의에서 진행합니다.
null도 하나의 객체로 이해해도 되나요? Fruit fruit = null; 일 때 fruit변수에 null객체의 레퍼런스 값이 저장된다.고 생각하면 무리가 있을까요?
안녕하세요. 코드라떼입니다 :) 자바 언어 스펙에서의 null은 기본형(PrimitiveType)도 아니고 참조형(ReferenceType)도 아닌 별도의 null type으로 봅니다. 이게 끝입니다. 실제로 null을 어떻게 처리하는지는 자바 가상 머신 구현체마다 다를 수 있습니다. C나 C++에서는 null을 0의 값으로보나 자바에서는 null을 특정한 리터럴로 봅니다. 결론적으로 null 참조값으로 생각하시면 됩니다. (줄여서 null값) 인스턴스에 접근할 수 있는 참조값도 본질적으론 정수형입니다. 감사합니다 :)
fruit 참조형 변수에 Fruit 인스턴스의 참조 값이 저장되어 있다면 참조 값을 통해 Fruit 인스턴스에 접근하고 Fruit 인스턴스의 name 변수에 접근하여 값을 읽을 수 있습니다. 그러나 참조값이 아닌 null 값이 저장되어 있으므로 Fruit 인스턴스에 접근한려고 하면 NullPointerException이 발생하게 됩니다. -> Fruit 클래스의 참조값이 아니라 fruit 인스턴스라는 의미로 쓰신 건가요? fruit참조형변수에 fruit인스턴스의 참조 값이 저장되어 있고, 그것을 통해(C의 포인터가 주소를 가리키듯이) name변수로 접근한다는 의미로 이해했는데, 맞는지 궁금합니다.
다시 읽어보니 작성된 문장이 이상하네요. 해당 내용을 재작성한다면.. 'Fruit fruit' 참조 자료형 변수에 Fruit 인스턴스의 참조값이 저장되어 있다면, Fruit 인스턴스의 name 변수에 접근하여 값을 읽을 수 있습니다. 그러나 참조값이 아닌 null 값이 저장되어 있으므로 Fruit 인스턴스에 접근할 수 없고 NullPointerException이 발생합니다. 이게 더 깔끔한 것 같습니다^^