Clear와 Clone
Coddy Java 여정의 논리와 흐름 섹션에 포함된 레슨 — 59개 중 27번째.
clear() 메서드는 HashSet에서 모든 요소를 제거하여 비어 있게 만듭니다.
clone() 메서드는 HashSet의 얕은 복사본을 반환합니다. (요소 자체는 복제되지 않습니다.)
예를 들어, 먼저 HashSet을 생성합니다:
HashSet<String> set = new HashSet<>();
set.add("Coddy");세트를 복제하려면:
HashSet<String> clonedSet = (HashSet<String>) set.clone();
System.out.println(clonedSet);
// Output: [Coddy]세트를 비우기 위해:
set.clear();
System.out.println(set.isEmpty());
// Output: trueclone()에서 캐스팅이 필요한 이유는 무엇인가요?
원시 타입(예: int x = (int) 3.14)에서의 캐스팅에 대해 이미 배웠습니다. 객체에도 동일한 개념이 적용되지만 이유는 다릅니다.
clone() 메서드는 구체적인 HashSet<String>가 아닌 일반적인 Object 타입을 반환합니다. 이는 clone()이 Object 클래스에 정의되어 있어서 복제하는 타입을 모르기 때문입니다.
// clone()이 반환하는 것:
Object cloneResult = set.clone(); // Object를 반환합니다, HashSet<String>가 아닙니다.
// 우리가 필요한 것:
HashSet<String> clonedSet = (HashSet<String>) set.clone(); // Object → HashSet<String>로 캐스팅캐스트는 Java에게: "이 Object은 실제로 HashSet<String>이므로, 그렇게 취급하세요."
캐스트가 없으면 컴파일 오류가 발생합니다. 왜냐하면 Java가 Object을 HashSet<String>로 자동 변환하지 않기 때문입니다.
챌린지
쉬움<strong>processSet</strong>이라는 이름의 메서드를 생성하세요. 이 메서드는 String의 HashSet을 입력으로 받습니다. 메서드는 다음을 수행해야 합니다:
- 세트를 복제하세요.
- 원본 세트를 비우세요.
- 다음 형식으로 복제된 세트와 그 크기를 출력하세요:
Cloned Set: [elements]Cloned Set Size: X - 다음 형식으로 clear 후의 원본 세트와 그 크기를 출력하세요:
Original Set after clear: [elements]Original Set Size: Y
치트 시트
clear() 메서드는 HashSet에서 모든 요소를 제거합니다:
set.clear();clone() 메서드는 HashSet의 얕은 복사본을 반환합니다:
HashSet<String> clonedSet = (HashSet<String>) set.clone();캐스팅이 필요한 이유: clone() 메서드는 제네릭 Object 타입을 반환하므로, 특정 타입으로 사용하려면 HashSet<String>으로 캐스팅해야 합니다.
사용 예시:
HashSet<String> set = new HashSet<>();
set.add("Coddy");
// Clone the set (cast Object → HashSet<String>)
HashSet<String> clonedSet = (HashSet<String>) set.clone();
// Clear original set
set.clear();
System.out.println(set.isEmpty()); // Output: true
System.out.println(clonedSet); // Output: [Coddy] (clone unaffected)직접 해보기
import java.util.HashSet;
import java.util.Scanner;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
@SuppressWarnings("unchecked")
public class Main {
public static void processSet(HashSet<String> set) {
// 여기에 코드를 작성하세요
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String setString = scanner.nextLine();
Type setType = new TypeToken<HashSet<String>>(){}.getType();
HashSet<String> set = new Gson().fromJson(setString, setType);
processSet(set);
}
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.