소개
이 랩에서는 Java Map 내에 특정 키가 존재하는지 효과적으로 확인하는 방법을 배우게 됩니다. 이는 오류를 방지하고 강력한 맵 연산을 보장하는 데 필수적인 기술입니다.
키 존재 여부를 확인하기 위한 기본적인 containsKey() 메서드를 살펴보고, 다양한 키 유형으로 사용법을 시연하며, null 키를 처리하는 방법을 다루어 Java 맵에서 키 확인에 대한 포괄적인 이해를 제공합니다.
이 랩에서는 Java Map 내에 특정 키가 존재하는지 효과적으로 확인하는 방법을 배우게 됩니다. 이는 오류를 방지하고 강력한 맵 연산을 보장하는 데 필수적인 기술입니다.
키 존재 여부를 확인하기 위한 기본적인 containsKey() 메서드를 살펴보고, 다양한 키 유형으로 사용법을 시연하며, null 키를 처리하는 방법을 다루어 Java 맵에서 키 확인에 대한 포괄적인 이해를 제공합니다.
이 단계에서는 containsKey() 메서드를 사용하여 HashMap에 특정 키가 존재하는지 확인하는 방법을 배우겠습니다. 이는 맵 작업 시 기본적으로 수행되는 연산으로, 존재하지 않는 키에 접근하려 할 때 발생할 수 있는 오류를 방지할 수 있습니다.
HashMap은 Java 에서 키 - 값 쌍을 저장하는 데이터 구조입니다. 각 단어 (키) 에 정의 (값) 가 있는 사전과 유사하다고 생각할 수 있습니다. containsKey() 메서드는 사전에 "이 특정 단어에 대한 항목이 있습니까?"라고 묻는 것과 같습니다.
containsKey()를 사용하는 방법을 보여주는 간단한 Java 프로그램을 만들어 보겠습니다.
WebIDE 편집기에서 HelloJava.java 파일을 엽니다. 이전 랩을 완료했다면 이 파일은 이미 ~/project 디렉토리에 존재할 것입니다.
HelloJava.java의 기존 코드를 다음 코드로 바꿉니다.
import java.util.HashMap;
public class HelloJava {
public static void main(String[] args) {
// Create a HashMap
HashMap<String, String> userMap = new HashMap<>();
// Add some key-value pairs
userMap.put("alice", "Alice Smith");
userMap.put("bob", "Bob Johnson");
userMap.put("charlie", "Charlie Brown");
// Check if a key exists using containsKey()
String keyToCheck1 = "alice";
String keyToCheck2 = "david";
System.out.println("Checking for key: " + keyToCheck1);
if (userMap.containsKey(keyToCheck1)) {
System.out.println("Key '" + keyToCheck1 + "' exists in the map.");
} else {
System.out.println("Key '" + keyToCheck1 + "' does not exist in the map.");
}
System.out.println("\nChecking for key: " + keyToCheck2);
if (userMap.containsKey(keyToCheck2)) {
System.out.println("Key '" + keyToCheck2 + "' exists in the map.");
} else {
System.out.println("Key '" + keyToCheck2 + "' does not exist in the map.");
}
}
}
이 코드의 새로운 부분을 살펴보겠습니다.
import java.util.HashMap;: 이 줄은 HashMap 클래스를 가져옵니다. HashMap 을 사용하려면 이 클래스가 필요합니다.HashMap<String, String> userMap = new HashMap<>();: 이 줄은 키와 값 모두 String 유형인 새로운 HashMap을 생성합니다.userMap.put("alice", "Alice Smith");: 이 코드는 맵에 키 - 값 쌍을 추가합니다. 키는 "alice"이고 값은 "Alice Smith"입니다.userMap.containsKey(keyToCheck1): 이것이 이 단계의 핵심입니다. containsKey() 메서드는 인수로 키를 받아 맵에서 키를 찾으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.HelloJava.java 파일을 저장합니다 (Ctrl+S 또는 Cmd+S).
이제 터미널에서 javac 명령을 사용하여 프로그램을 컴파일합니다.
javac HelloJava.java
오류가 없으면 아무런 출력도 표시되지 않습니다.
마지막으로 java 명령을 사용하여 컴파일된 프로그램을 실행합니다.
java HelloJava
다음과 유사한 출력을 볼 수 있습니다.
Checking for key: alice
Key 'alice' exists in the map.
Checking for key: david
Key 'david' does not exist in the map.
이 출력은 containsKey()가 "alice" 및 "david" 키가 userMap에 있는지 여부를 올바르게 식별했음을 확인합니다.
이전 단계에서는 HashMap에서 String 키를 사용했습니다. 그러나 HashMap은 객체인 한 다양한 데이터 유형을 키로 사용할 수 있습니다 (예: int, char와 같은 기본 유형은 해당 객체 래퍼인 Integer, Character로 자동 "boxing"됩니다).
이 단계에서는 HashMap에서 다양한 데이터 유형을 키로 사용하고 containsKey()가 어떻게 작동하는지 살펴보겠습니다.
WebIDE 편집기에서 HelloJava.java 파일을 엽니다.
기존 코드를 다음 코드로 바꿉니다.
import java.util.HashMap;
public class HelloJava {
public static void main(String[] args) {
// Create a HashMap with Integer keys and String values
HashMap<Integer, String> studentMap = new HashMap<>();
// Add some key-value pairs
studentMap.put(101, "Alice Smith");
studentMap.put(102, "Bob Johnson");
studentMap.put(103, "Charlie Brown");
// Check for keys using containsKey() with Integer keys
Integer keyToCheck1 = 101;
Integer keyToCheck2 = 200; // A key that does not exist
System.out.println("Checking for key: " + keyToCheck1);
if (studentMap.containsKey(keyToCheck1)) {
System.out.println("Key '" + keyToCheck1 + "' exists in the map.");
} else {
System.out.println("Key '" + keyToCheck1 + "' does not exist in the map.");
}
System.out.println("\nChecking for key: " + keyToCheck2);
if (studentMap.containsKey(keyToCheck2)) {
System.out.println("Key '" + keyToCheck2 + "' exists in the map.");
} else {
System.out.println("Key '" + keyToCheck2 + "' does not exist in the map.");
}
// You can also use primitive int directly, Java will auto-box it
int primitiveKey = 102;
System.out.println("\nChecking for primitive key: " + primitiveKey);
if (studentMap.containsKey(primitiveKey)) {
System.out.println("Key '" + primitiveKey + "' exists in the map.");
} else {
System.out.println("Key '" + primitiveKey + "' does not exist in the map.");
}
}
}
이 코드에서는 키가 Integer 객체 (학생 ID 를 나타냄) 이고 값이 String 객체 (학생 이름을 나타냄) 인 HashMap을 만들었습니다. 그런 다음 Integer 객체와 기본 int를 모두 사용하여 containsKey()를 사용하여 Java 가 변환 (auto-boxing) 을 처리하는 것을 보여줍니다.
HelloJava.java 파일을 저장합니다.
프로그램을 컴파일합니다.
javac HelloJava.java
프로그램을 실행합니다.
java HelloJava
다음과 유사한 출력을 볼 수 있습니다.
Checking for key: 101
Key '101' exists in the map.
Checking for key: 200
Key '200' does not exist in the map.
Checking for primitive key: 102
Key '102' exists in the map.
이는 containsKey()가 Integer 키로 올바르게 작동하며, Java 의 auto-boxing 기능을 통해 HashMap<Integer, ...>에서 키를 확인할 때 기본 int 값을 직접 사용할 수 있음을 보여줍니다.
Java 의 HashMap에서는 실제로 null을 키로 사용할 수 있지만, 하나의 null 키만 허용됩니다. containsKey()가 null 키를 처리할 때 어떻게 동작하는지 이해하는 것이 중요합니다.
이 단계에서는 프로그램에 null 키를 포함시킨 다음 containsKey()를 사용하여 해당 키의 존재 여부를 확인하도록 수정하겠습니다.
WebIDE 편집기에서 HelloJava.java 파일을 엽니다.
기존 코드를 다음 코드로 바꿉니다.
import java.util.HashMap;
public class HelloJava {
public static void main(String[] args) {
// Create a HashMap that allows null keys
HashMap<String, String> statusMap = new HashMap<>();
// Add some key-value pairs, including a null key
statusMap.put("active", "User is currently online");
statusMap.put("inactive", "User is offline");
statusMap.put(null, "User status is unknown"); // Adding a null key
// Check for keys using containsKey(), including null
String keyToCheck1 = "active";
String keyToCheck2 = "pending"; // A key that does not exist
String keyToCheck3 = null; // The null key
System.out.println("Checking for key: " + keyToCheck1);
if (statusMap.containsKey(keyToCheck1)) {
System.out.println("Key '" + keyToCheck1 + "' exists in the map.");
} else {
System.out.println("Key '" + keyToCheck1 + "' does not exist in the map.");
}
System.out.println("\nChecking for key: " + keyToCheck2);
if (statusMap.containsKey(keyToCheck2)) {
System.out.println("Key '" + keyToCheck2 + "' exists in the map.");
} else {
System.out.println("Key '" + keyToCheck2 + "' does not exist in the map.");
}
System.out.println("\nChecking for null key:");
if (statusMap.containsKey(keyToCheck3)) {
System.out.println("Null key exists in the map.");
} else {
System.out.println("Null key does not exist in the map.");
}
}
}
여기서는 String 키와 값을 가진 HashMap을 만들었습니다. 그런 다음 statusMap.put(null, "User status is unknown");을 사용하여 명시적으로 null 키를 추가합니다. 마지막으로 containsKey(null)을 사용하여 null 키가 있는지 확인합니다.
HelloJava.java 파일을 저장합니다.
프로그램을 컴파일합니다.
javac HelloJava.java
프로그램을 실행합니다.
java HelloJava
다음과 유사한 출력을 볼 수 있습니다.
Checking for key: active
Key 'active' exists in the map.
Checking for key: pending
Key 'pending' does not exist in the map.
Checking for null key:
Null key exists in the map.
이 출력은 containsKey()가 HashMap에서 null 키의 존재를 올바르게 식별함을 확인합니다. null 키를 사용하는 것은 가능하지만, 코드를 더 명확하게 만들고 프로그램의 다른 부분에서 잠재적인 NullPointerException 문제를 방지하기 위해 가능한 경우 이를 피하는 것이 좋습니다.
이 랩에서는 containsKey() 메서드를 사용하여 Java HashMap에 특정 키가 존재하는지 확인하는 방법을 배웠습니다. 이 기본적인 연산은 맵 요소에 접근할 때 오류를 방지하는 데 매우 중요합니다. 문자열 키를 사용하여 containsKey()를 사용하는 연습을 했으며, 기존 및 존재하지 않는 키를 올바르게 식별하는 것을 확인했습니다.