소개
이 랩에서는 Java 에서 null 문자열을 처리하는 데 필요한 기술을 배우게 됩니다. 먼저, 등가 연산자 (==) 를 사용하여 null 을 확인하는 기본적인 방법을 살펴보고, NullPointerException을 방지하는 데 왜 이것이 중요한지 이해합니다.
이를 바탕으로, 다양한 문자열 상태를 효과적으로 처리하기 위해 null 확인과 빈 문자열 확인을 결합하는 방법을 배우게 됩니다. 마지막으로, 잠재적으로 null 값을 관리하는 현대적이고 안전한 접근 방식인 Optional 클래스를 소개하고, 코드 가독성을 향상시키고 일반적인 오류를 방지하는 방법을 보여줍니다.
등가 연산자를 사용하여 Null 확인
이 단계에서는 Java 에서 등가 연산자 (==) 를 사용하여 문자열 변수가 null인지 확인하는 방법을 배우겠습니다. Java 프로그래밍에서 오류를 방지하려면 null을 처리하는 방법을 이해하는 것이 중요합니다.
Java 에서 참조 유형 (예: String) 의 변수는 null이라는 특수한 값을 가질 수 있습니다. 이는 변수가 메모리의 어떤 객체도 참조하지 않는다는 것을 의미합니다. 유효한 객체인 것처럼 null 변수를 사용하려고 하면 NullPointerException이 발생하며, 이는 초보자에게 흔하고 좌절스러운 오류입니다.
문자열이 null인지 확인하는 가장 간단한 방법은 등가 연산자 (==) 를 사용하는 것입니다.
이를 시연하기 위해 간단한 Java 프로그램을 만들어 보겠습니다.
WebIDE 를 열고
~/project디렉토리에 있는지 확인합니다. 터미널 프롬프트를 보거나pwd를 입력하고 Enter 키를 눌러 확인할 수 있습니다.~/project디렉토리에NullCheck.java라는 새 Java 파일을 만듭니다. 왼쪽의 파일 탐색기에서 마우스 오른쪽 버튼을 클릭하고 "New File"을 선택한 다음NullCheck.java를 입력하여 이 작업을 수행할 수 있습니다.편집기에서
NullCheck.java파일을 열고 다음 코드를 붙여넣습니다.public class NullCheck { public static void main(String[] args) { String myString1 = "Hello"; String myString2 = null; String myString3 = ""; // This is an empty string, not null System.out.println("Checking myString1:"); if (myString1 == null) { System.out.println("myString1 is null"); } else { System.out.println("myString1 is not null"); } System.out.println("\nChecking myString2:"); if (myString2 == null) { System.out.println("myString2 is null"); } else { System.out.println("myString2 is not null"); } System.out.println("\nChecking myString3:"); if (myString3 == null) { System.out.println("myString3 is null"); } else { System.out.println("myString3 is not null"); } } }이 코드에서:
- 세 개의
String변수를 선언합니다.myString1은 일반 문자열이 할당되고,myString2는 명시적으로null이 할당되며,myString3은 빈 문자열 ("") 이 할당됩니다. - 각 문자열이
null인지 확인하기 위해 등가 연산자 (==) 를 사용하여if문을 사용합니다. - 문자열이
null인지 여부를 나타내는 메시지를 출력합니다.
- 세 개의
NullCheck.java파일을 저장합니다 (Ctrl+S 또는 Cmd+S).WebIDE 하단에서 터미널을 엽니다.
~/project디렉토리에 있는지 확인합니다.javac명령을 사용하여 Java 프로그램을 컴파일합니다.javac NullCheck.java오류가 없으면 이 명령은 동일한 디렉토리에
NullCheck.class파일을 생성합니다.java명령을 사용하여 컴파일된 Java 프로그램을 실행합니다.java NullCheck다음과 유사한 출력을 볼 수 있습니다.
Checking myString1: myString1 is not null Checking myString2: myString2 is null Checking myString3: myString3 is not null이 출력은
myString1과myString3이null이 아니고myString2가null임을 확인합니다.null문자열과 빈 문자열 ("") 의 차이점을 아는 것이 중요합니다. 빈 문자열은 0 개의 문자를 가진 유효한String객체인 반면,null문자열 변수는 어떤 객체도 가리키지 않습니다.
== null을 사용하는 것은 Java 에서 참조 변수가 null인지 확인하는 표준적이고 올바른 방법입니다.
Null 및 빈 문자열 확인 결합
이전 단계에서는 문자열이 null인지 확인하는 방법을 배웠습니다. 그러나 많은 실제 시나리오에서는 문자열이 비어 있는지 (문자가 0 개인지) 또는 공백만 포함하는지 확인해야 할 수도 있습니다. null이거나, 비어 있거나, 공백만 포함하는 문자열은 종종 "비어 있음" 또는 "실질적으로 비어 있음"으로 간주됩니다.
null 및 빈 문자열을 모두 확인하는 것은 일반적인 요구 사항입니다. 논리 OR 연산자 (||) 를 사용하여 이러한 확인을 결합할 수 있습니다.
이전 프로그램을 수정하여 null 및 빈 문자열에 대한 확인을 모두 포함해 보겠습니다.
WebIDE 편집기에서
NullCheck.java파일을 엽니다.main메서드를 수정하여 빈 문자열을 포함하고 확인을 결합합니다. 기존main메서드를 다음 코드로 바꿉니다.public class NullCheck { public static void main(String[] args) { String myString1 = "Hello"; String myString2 = null; String myString3 = ""; // This is an empty string String myString4 = " "; // This string contains only whitespace System.out.println("Checking myString1:"); if (myString1 == null || myString1.isEmpty()) { System.out.println("myString1 is null or empty"); } else { System.out.println("myString1 is not null and not empty"); } System.out.println("\nChecking myString2:"); if (myString2 == null || myString2.isEmpty()) { System.out.println("myString2 is null or empty"); } else { System.out.println("myString2 is not null and not empty"); } System.out.println("\nChecking myString3:"); if (myString3 == null || myString3.isEmpty()) { System.out.println("myString3 is null or empty"); } else { System.out.println("myString3 is not null and not empty"); } System.out.println("\nChecking myString4:"); // Note: isEmpty() does not check for whitespace if (myString4 == null || myString4.isEmpty()) { System.out.println("myString4 is null or empty"); } else { System.out.println("myString4 is not null and not empty"); } } }이 업데이트된 코드에서:
- 공백만 포함하는
myString4를 추가했습니다. - 문자열이
null이거나 비어 있는지 확인하기 위해 조건myString == null || myString.isEmpty()를 사용합니다.isEmpty()메서드는 문자열의 길이가 0 이면true를 반환하는 내장String메서드입니다. - 중요:
isEmpty()메서드는 null 이 아닌 문자열에서만 호출할 수 있습니다.null문자열에서isEmpty()를 호출하려고 하면NullPointerException이 발생합니다. 따라서myString.isEmpty()를 호출하기 전에myString == null을 사용하여 먼저null을 확인하는 것이 중요합니다. 논리 OR 연산자 (||) 는 "단락 평가"를 수행합니다. 즉, 첫 번째 조건 (myString == null) 이 true 이면 두 번째 조건 (myString.isEmpty()) 이 평가되지 않아NullPointerException을 방지합니다.
- 공백만 포함하는
NullCheck.java파일을 저장합니다.터미널에서 수정된 프로그램을 컴파일합니다.
javac NullCheck.java컴파일된 프로그램을 실행합니다.
java NullCheck다음과 유사한 출력을 볼 수 있습니다.
Checking myString1: myString1 is not null and not empty Checking myString2: myString2 is null or empty Checking myString3: myString3 is null or empty Checking myString4: myString4 is not null and not empty
myString4 (공백만 포함) 는 이 확인에서 "null 이 아니고 비어 있지 않음"으로 간주됩니다. 공백만 있는 문자열도 "비어 있음"으로 간주해야 하는 경우 (Java 11 부터 사용 가능한) isBlank() 메서드를 사용할 수 있습니다.
myString4에 대해 isBlank()를 사용하도록 코드를 빠르게 업데이트해 보겠습니다.
NullCheck.java에서myString4에 대한 확인을 수정합니다.// ... (previous code) ... System.out.println("\nChecking myString4 with isBlank():"); if (myString4 == null || myString4.isBlank()) { System.out.println("myString4 is null or blank"); } else { System.out.println("myString4 is not null and not blank"); } } }파일을 저장하고, 컴파일하고, 다시 실행합니다.
javac NullCheck.java java NullCheckmyString4에 대한 출력은 이제 다음과 같아야 합니다.Checking myString4 with isBlank(): myString4 is null or blank
이는 Java 프로그래밍에서 매우 일반적인 패턴인 null 및 빈/비어 있는 문자열에 대한 확인을 결합하는 방법을 보여줍니다.
Optional 을 사용하여 Null 문자열 안전하게 처리
이전 단계에서는 등가 연산자 (==) 와 isEmpty() 또는 isBlank() 메서드를 사용하여 null 및 빈/비어 있는 문자열을 확인했습니다. 이러한 메서드는 효과적이지만 Java 8 에서는 잠재적으로 null 값을 보다 명시적이고 기능적인 방식으로 처리하는 방법으로 Optional 클래스를 도입했습니다. Optional을 사용하면 코드를 더 읽기 쉽고 NullPointerException이 발생할 가능성을 줄일 수 있습니다.
Optional은 null 이 아닌 값을 포함할 수도 있고 포함하지 않을 수도 있는 컨테이너 객체입니다. 값이 있으면 isPresent()가 true를 반환하고 get()이 값을 반환합니다. 값이 없으면 객체는 비어 있는 것으로 간주되고 isPresent()는 false를 반환합니다. 비어 있는 Optional에서 get()을 호출하면 NoSuchElementException이 발생합니다.
문자열과 함께 Optional을 사용하는 방법을 살펴보겠습니다.
WebIDE 편집기에서
NullCheck.java파일을 엽니다.파일의 전체 내용을
Optional을 사용하는 다음 코드로 바꿉니다.import java.util.Optional; public class NullCheck { public static void main(String[] args) { String myString1 = "Hello"; String myString2 = null; String myString3 = ""; String myString4 = " "; // Creating Optional objects from strings Optional<String> optionalString1 = Optional.ofNullable(myString1); Optional<String> optionalString2 = Optional.ofNullable(myString2); Optional<String> optionalString3 = Optional.ofNullable(myString3); Optional<String> optionalString4 = Optional.ofNullable(myString4); System.out.println("Checking optionalString1:"); if (optionalString1.isPresent()) { System.out.println("optionalString1 has a value: " + optionalString1.get()); } else { System.out.println("optionalString1 is empty (contains null)"); } System.out.println("\nChecking optionalString2:"); if (optionalString2.isPresent()) { System.out.println("optionalString2 has a value: " + optionalString2.get()); } else { System.out.println("optionalString2 is empty (contains null)"); } System.out.println("\nChecking optionalString3:"); // Optional.ofNullable("") creates an Optional containing an empty string if (optionalString3.isPresent()) { System.out.println("optionalString3 has a value: " + optionalString3.get()); } else { System.out.println("optionalString3 is empty (contains null)"); } System.out.println("\nChecking optionalString4:"); if (optionalString4.isPresent()) { System.out.println("optionalString4 has a value: " + optionalString4.get()); } else { System.out.println("optionalString4 is empty (contains null)"); } // Using Optional methods for safer handling System.out.println("\nUsing Optional methods:"); // orElse: provides a default value if the Optional is empty String value1 = optionalString1.orElse("Default Value"); String value2 = optionalString2.orElse("Default Value"); System.out.println("Value from optionalString1 (orElse): " + value1); System.out.println("Value from optionalString2 (orElse): " + value2); // ifPresent: performs an action if a value is present System.out.print("If optionalString1 is present: "); optionalString1.ifPresent(s -> System.out.println("Value is " + s)); System.out.print("If optionalString2 is present: "); optionalString2.ifPresent(s -> System.out.println("Value is " + s)); // filter: filters the value if present System.out.print("Filtered optionalString1 (length > 3): "); optionalString1.filter(s -> s.length() > 3).ifPresent(s -> System.out.println("Value is " + s)); System.out.print("Filtered optionalString3 (length > 3): "); optionalString3.filter(s -> s.length() > 3).ifPresent(s -> System.out.println("Value is " + s)); } }이 코드에서:
Optional클래스를 가져옵니다.Optional.ofNullable(string)을 사용하여 일반String에서Optional<String>을 만듭니다. 이 메서드는 입력 문자열이null인 경우에도 안전하게 사용할 수 있습니다. 입력이null이면 빈Optional을 반환하고, 그렇지 않으면 문자열을 포함하는Optional을 반환합니다.optionalString.isPresent()를 사용하여Optional에 값이 있는지 확인합니다.- 값이 있으면
optionalString.get()을 사용하여 값을 검색합니다. 주의: 비어 있는Optional에서get()을 호출하면 예외가 발생하므로 항상 먼저isPresent()를 확인하거나 다른 안전한 메서드를 사용하십시오. orElse(defaultValue)를 시연합니다. 이는 값이 있으면 포함된 값을 반환하고, 그렇지 않으면 지정된 기본값을 반환합니다.- 값이 있으면 주어진 consumer(하나의 인수를 받아들이고 결과를 반환하지 않는 함수) 를 실행하는
ifPresent(consumer)를 시연합니다. - 값이 있고 주어진 predicate(부울을 반환하는 함수) 와 일치하는 경우 값을 포함하는
Optional을 반환하고, 그렇지 않으면 빈Optional을 반환하는filter(predicate)를 시연합니다.
NullCheck.java파일을 저장합니다.터미널에서 프로그램을 컴파일합니다.
javac NullCheck.java프로그램을 실행합니다.
java NullCheck다음과 유사한 출력을 볼 수 있습니다.
Checking optionalString1: optionalString1 has a value: Hello Checking optionalString2: optionalString2 is empty (contains null) Checking optionalString3: optionalString3 has a value: Checking optionalString4: optionalString4 has a value: Using Optional methods: Value from optionalString1 (orElse): Hello Value from optionalString2 (orElse): Default Value If optionalString1 is present: Value is Hello If optionalString2 is present: Filtered optionalString1 (length > 3): Value is Hello Filtered optionalString3 (length > 3):
Optional을 사용하면 값이 없을 수 있는지에 대해 코드를 더 표현력 있게 만들 수 있으며, 명시적인 null 확인 없이 값의 존재 또는 부재를 처리하기 위한 유용한 메서드를 제공합니다. Optional은 강력한 도구이지만 모든 null 확인을 대체하는 것은 아니며, null일 수 있는 반환 값을 처리할 때 특히 유용합니다.
요약
이 Lab 에서는 Java 에서 문자열이 null인지 확인하는 방법을 배웠습니다. 먼저 등가 연산자 (==) 를 사용하여 문자열 변수를 null과 직접 비교하여 null이 객체 참조의 부재를 나타내며, null을 확인하지 못하면 NullPointerException이 발생할 수 있음을 이해했습니다.
그런 다음, null 확인과 빈 문자열 확인을 결합하는 방법을 살펴보았습니다. 빈 문자열 ("") 은 null과 달리 유효한 객체임을 인식했습니다. 마지막으로, Java 8 에 도입된 Optional 클래스를 잠재적으로 null 값을 처리하는 보다 현대적이고 안전한 방법으로 사용하는 방법을 배웠습니다. 이는 누락된 값의 가능성을 명시적으로 나타내어 더 강력하고 읽기 쉬운 코드를 장려합니다.



