소개
이 랩에서는 Java 의 ArrayList가 null 인지 확인하기 위한 다양한 기술을 살펴봅니다. null 값 처리는 견고한 Java 프로그래밍의 기본 측면이며, 이를 올바르게 수행하는 방법을 이해하는 것은 NullPointerException 오류를 방지하는 데 필수적입니다.
가장 기본적인 방법인 동등 연산자 (==) 를 사용하여 직접 null 을 확인하는 것부터 시작합니다. 이어서, null 확인과 빈 목록 확인을 결합하여 두 시나리오를 모두 효과적으로 처리하는 방법을 배웁니다. 마지막으로, 잠재적으로 null 값을 처리하는 보다 표현력 있고 안전한 방법을 제공하는 최신 Java 기능인 Optional 클래스의 사용을 살펴봅니다.
동등 연산자를 사용하여 Null 확인
이 단계에서는 Java 에서 변수가 null 값을 가지고 있는지 확인하는 가장 기본적인 방법인 동등 연산자 (==) 를 사용하는 방법을 살펴봅니다. Java 프로그래밍에서 오류를 방지하려면 null을 처리하는 방법을 이해하는 것이 중요합니다.
Java 에서 null은 변수가 어떤 객체도 참조하지 않음을 나타내는 특수한 값입니다. 빈 상자와 같다고 생각할 수 있습니다. 상자는 존재하지만 그 안에 아무것도 없습니다. null인 변수를 객체를 참조하는 것처럼 사용하려고 하면 (예: 메서드를 호출하는 경우) NullPointerException이 발생하며, 이는 Java 에서 매우 흔한 오류입니다.
동등 연산자 (==) 는 두 값을 비교하는 데 사용됩니다. 객체 참조를 null과 비교할 때 ==는 참조가 null 값을 가리키는지 확인합니다.
이를 보여주기 위해 간단한 Java 프로그램을 만들어 보겠습니다.
WebIDE 편집기에서
HelloJava.java파일이 아직 열려 있지 않은 경우 엽니다.파일의 전체 내용을 다음 코드로 바꿉니다.
public class HelloJava { public static void main(String[] args) { String message = null; // Declaring a String variable and setting it to null // Checking if the message variable is null if (message == null) { System.out.println("The message is null."); } else { System.out.println("The message is not null: " + message); } message = "Hello, World!"; // Assigning a String object to the variable // Checking again after assigning a value if (message == null) { System.out.println("The message is null."); } else { System.out.println("The message is not null: " + message); } } }이 코드에서:
message라는String변수를 선언하고 처음에null로 설정합니다.message == null조건을 사용하여 변수가null인지 확인하는if문을 사용합니다.- 변수가
null인지 아닌지를 나타내는 메시지를 출력합니다. - 그런 다음 실제
String값 ("Hello, World!") 을message변수에 할당합니다. - 차이점을 확인하기 위해
null검사를 다시 수행합니다.
파일을 저장합니다 (Ctrl+S 또는 Cmd+S).
터미널에서
javac명령을 사용하여 프로그램을 컴파일합니다.javac HelloJava.java오류가 없으면 컴파일이 자동으로 완료됩니다.
java명령을 사용하여 컴파일된 프로그램을 실행합니다.java HelloJava다음 출력을 볼 수 있습니다.
The message is null. The message is not null: Hello, World!이 출력은
== null검사가message변수가null일 때와 값을 가질 때를 올바르게 식별했음을 확인합니다.
동등 연산자 (==) 를 사용하는 것은 Java 에서 null을 확인하는 가장 간단한 방법입니다. 그러나 이것은 참조가 null인지 확인하는 데만 작동한다는 것을 기억하는 것이 중요합니다. 문자열이 비어 있는지 (예: ""와 같이 문자가 없는 경우) 확인하지 않습니다. 다음 단계에서 빈 문자열을 처리하는 방법을 살펴보겠습니다.
Null 및 Empty 검사 결합
이전 단계에서는 == 연산자를 사용하여 변수가 null인지 확인하는 방법을 배웠습니다. 그러나 Java 에서는 특히 String 객체를 다룰 때 변수가 null인지 뿐만 아니라 "비어 있는지"도 확인해야 하는 경우가 많습니다. 빈 문자열은 존재하지만 문자가 없는 String 객체입니다 (예: ""). 반면에 null 문자열은 변수가 어떤 String 객체도 전혀 참조하지 않음을 의미합니다.
null 문자열에서 isEmpty() 또는 length()와 같은 메서드를 호출하려고 하면 NullPointerException이 발생합니다. 따라서 null과 빈 문자열을 유사하게 처리하려는 경우 (예: "비어 있음" 또는 "누락됨"으로 간주) 두 조건을 모두 확인해야 합니다.
이를 수행하는 가장 일반적인 방법은 먼저 문자열이 null인지 확인한 다음, null이 아닌 경우 isEmpty() 메서드를 사용하여 비어 있는지 확인하는 것입니다.
이러한 검사를 결합하는 것을 보여주기 위해 HelloJava.java 프로그램을 수정해 보겠습니다.
WebIDE 편집기에서
HelloJava.java파일을 엽니다.현재 코드를 다음으로 바꿉니다.
public class HelloJava { public static void main(String[] args) { String text1 = null; String text2 = ""; // An empty string String text3 = "Hello"; // A non-empty string System.out.println("Checking text1 (null):"); if (text1 == null || text1.isEmpty()) { System.out.println("text1 is null or empty."); } else { System.out.println("text1 is not null and not empty: " + text1); } System.out.println("\nChecking text2 (empty):"); // It's crucial to check for null first! if (text2 == null || text2.isEmpty()) { System.out.println("text2 is null or empty."); } else { System.out.println("text2 is not null and not empty: " + text2); } System.out.println("\nChecking text3 (not empty):"); if (text3 == null || text3.isEmpty()) { System.out.println("text3 is null or empty."); } else { System.out.println("text3 is not null and not empty: " + text3); } } }이 업데이트된 코드에서:
- 세 개의
String변수를 소개합니다:text1(null),text2(empty),text3(not empty). - 논리 OR 연산자 (
||) 를 사용하여null검사 (text == null) 와 빈 검사 (text.isEmpty()) 를 결합합니다. - 조건
text == null || text.isEmpty()는text가null이거나text가null이 아니고text.isEmpty()가 true 인 경우 true 가 됩니다. - 중요:
null검사 (text == null) 는||조건에서 먼저 나와야 합니다.text가null인 경우||조건의 첫 번째 부분 (text == null) 이 true 이고 Java 는 "단락 평가"를 사용하여 두 번째 부분 (text.isEmpty()) 을 건너뛰므로NullPointerException을 방지합니다.isEmpty()검사가 먼저 나오고text가null인 경우 오류가 발생합니다.
- 세 개의
파일을 저장합니다 (Ctrl+S 또는 Cmd+S).
터미널에서 프로그램을 컴파일합니다.
javac HelloJava.java프로그램을 실행합니다.
java HelloJava다음 출력을 볼 수 있습니다.
Checking text1 (null): text1 is null or empty. Checking text2 (empty): text2 is null or empty. Checking text3 (not empty): text3 is not null and not empty: Hello이 출력은 결합된 검사가
null문자열 (text1) 과 빈 문자열 (text2) 을 모두 "null or empty"로 올바르게 식별하는 동시에 비어 있지 않은 문자열 (text3) 을 올바르게 식별함을 보여줍니다.
이 결합된 검사 (string == null || string.isEmpty()) 는 null과 빈 문자열을 모두 처리해야 할 때 Java 에서 매우 일반적인 패턴입니다. 많은 라이브러리에서도 Apache Commons Lang 의 StringUtils.isEmpty() 또는 StringUtils.isBlank()(공백도 확인) 와 같은 유틸리티 메서드를 제공하지만, 기본적인 결합된 검사를 이해하는 것이 중요합니다.
안전한 처리를 위한 Optional 사용
== null || isEmpty()를 사용하여 null 및 빈 문자열을 확인하는 것이 효과적이지만, Java 8 에서는 잠재적으로 부재하는 값을 보다 명시적이고 안전하게 처리하는 방법으로 Optional 클래스를 도입했습니다. Optional은 null이 아닌 값을 포함할 수도 있고 포함하지 않을 수도 있는 컨테이너 객체입니다. Optional을 사용하면 NullPointerException을 방지하고 값이 누락될 수 있음을 명확하게 나타내어 코드를 더 읽기 쉽게 만들 수 있습니다.
Optional은 null 검사를 완전히 대체하지 않지만, 값이 부재할 수 있는 상황을 처리하는 보다 기능적이고 표현적인 방법을 제공합니다.
HelloJava.java 프로그램에서 Optional을 사용하는 방법을 살펴보겠습니다.
WebIDE 편집기에서
HelloJava.java파일을 엽니다.현재 코드를 다음으로 바꿉니다.
import java.util.Optional; public class HelloJava { public static void main(String[] args) { String text1 = null; String text2 = ""; String text3 = "Hello"; // Creating Optional objects Optional<String> optionalText1 = Optional.ofNullable(text1); Optional<String> optionalText2 = Optional.ofNullable(text2); Optional<String> optionalText3 = Optional.ofNullable(text3); System.out.println("Checking optionalText1 (from null):"); // Check if a value is present if (optionalText1.isPresent()) { System.out.println("optionalText1 contains a value: " + optionalText1.get()); } else { System.out.println("optionalText1 is empty (no value present)."); } System.out.println("\nChecking optionalText2 (from empty string):"); if (optionalText2.isPresent()) { System.out.println("optionalText2 contains a value: " + optionalText2.get()); } else { System.out.println("optionalText2 is empty (no value present)."); } System.out.println("\nChecking optionalText3 (from non-empty string):"); if (optionalText3.isPresent()) { System.out.println("optionalText3 contains a value: " + optionalText3.get()); } else { System.out.println("optionalText3 is empty (no value present)."); } // Using orElse() to provide a default value if the Optional is empty String valueOrDefault1 = optionalText1.orElse("Default Value 1"); String valueOrDefault2 = optionalText2.orElse("Default Value 2"); String valueOrDefault3 = optionalText3.orElse("Default Value 3"); System.out.println("\nUsing orElse():"); System.out.println("Value from optionalText1: " + valueOrDefault1); System.out.println("Value from optionalText2: " + valueOrDefault2); System.out.println("Value from optionalText3: " + valueOrDefault3); } }새로운 부분을 자세히 살펴보겠습니다.
import java.util.Optional;:Optional클래스를 가져와야 합니다.Optional.ofNullable(text);:null일 수 있는 변수에서Optional을 만드는 권장 방법입니다.text가null이면 빈Optional을 만듭니다.text가null이 아니면text의 값을 포함하는Optional을 만듭니다.optionalText.isPresent(): 이 메서드는Optional에null이 아닌 값이 포함되어 있으면true를 반환하고, 그렇지 않으면false를 반환합니다. 값을 액세스하기 전에 값이 있는지 안전하게 확인하는 방법입니다.optionalText.get(): 이 메서드는Optional에 포함된 값을 반환합니다. 이 메서드는 주의해서 사용하십시오!Optional이 비어 있는 경우 (즉,isPresent()가false인 경우)get()을 호출하면NoSuchElementException이 발생합니다.orElse(),orElseGet()또는ifPresent()와 같은 다른Optional메서드를 사용하는 것이 일반적으로 더 좋습니다.optionalText.orElse("Default Value"): 이 메서드는Optional에 값이 있으면Optional에 포함된 값을 반환합니다.Optional이 비어 있으면 대신 지정된 기본값을 반환합니다. 이는 대체 값을 제공하는 안전하고 편리한 방법입니다.
파일을 저장합니다 (Ctrl+S 또는 Cmd+S).
프로그램을 컴파일합니다.
javac HelloJava.java프로그램을 실행합니다.
java HelloJava다음과 유사한 출력을 볼 수 있습니다.
Checking optionalText1 (from null): optionalText1 is empty (no value present). Checking optionalText2 (from empty string): optionalText2 contains a value: Checking optionalText3 (from non-empty string): optionalText3 contains a value: Hello Using orElse(): Value from optionalText1: Default Value 1 Value from optionalText2: Value from optionalText3: HellooptionalText1(null에서 생성됨) 이 올바르게 비어 있는 것으로 식별되었음을 확인하십시오.optionalText2(빈 문자열""에서 생성됨) 는 유효한String객체를 포함하기 때문에Optional의미에서 비어 있지 않습니다(해당 문자열이 비어 있더라도).optionalText3에는 "Hello" 문자열이 포함되어 있습니다.orElse()예제는Optional이 비어 있을 때 기본값을 쉽게 제공할 수 있는 방법을 보여줍니다.
Optional을 사용하면 부재할 수 있는 값을 처리할 때 코드를 더 강력하고 표현력 있게 만들 수 있습니다. 누락된 가능성을 생각하고 명시적으로 처리하도록 권장하여 예기치 않은 NullPointerException의 가능성을 줄입니다.
요약
이 Lab 에서는 Java 에서 변수, 특히 ArrayList가 null인지 확인하는 기본적인 방법으로 동등 연산자 (==) 를 사용하는 방법을 배웠습니다. null은 객체 참조의 부재를 나타내며, null 변수를 사용하려고 하면 NullPointerException이 발생할 수 있음을 이해했습니다. 간단한 Java 프로그램을 통해 이 기본적인 null 검사를 실습했습니다.
또한 잠재적인 null 값과 빈 컬렉션을 처리하기 위한 보다 강력한 기술을 탐구했습니다. 여기에는 두 조건을 모두 고려하기 위해 null 및 빈 검사를 결합하고, 잠재적으로 부재하는 값을 처리하기 위한 보다 현대적이고 안전한 접근 방식으로 Optional 클래스를 활용하여 가독성이 높고 오류가 적은 코드를 장려하는 것이 포함되었습니다.



