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);
// 출력: [Coddy]집합을 비우려면:
set.clear();
System.out.println(set.isEmpty());
// 출력: trueclone()에서 캐스팅이 필요한 이유는 무엇인가요?
기본형(예: int x = (int) 3.14)을 캐스팅하는 방법은 이미 배웠습니다. 객체에도 같은 개념이 적용되지만, 이유는 다릅니다.
clone() 메서드는 특정한 HashSet<String> 타입이 아니라 일반적인 Object 타입을 반환합니다. 이는 clone()이 Object 클래스에 정의되어 있으며, 어떤 타입을 복제하는지 알지 못하기 때문입니다.
// clone()이 반환하는 값:
Object cloneResult = set.clone(); // HashSet<String>이 아닌 Object를 반환
// 필요한 것:
HashSet<String> clonedSet = (HashSet<String>) set.clone(); // Object를 HashSet<String>으로 형변환캐스트는 Java에 다음과 같이 알려줍니다: "이 Object가 실제로 HashSet<String>라는 것을 알고 있으니, 그렇게 취급해."
캐스트가 없으면 Java가 Object를 HashSet<String>로 자동 변환하지 않기 때문에 컴파일 오류가 발생합니다.
챌린지
쉬움입력으로 문자열의 HashSet을 받는 processSet이라는 메서드를 작성하세요. 메서드는 다음을 수행해야 합니다:
- 집합을 복제합니다.
- 원래 집합을 비웁니다.
- 복제된 집합과 그 크기를 다음 형식으로 출력합니다:
Cloned Set: [elements]Cloned Set Size: X - 원래 집합(비운 후)과 그 크기를 다음 형식으로 출력합니다:
Original Set after clear: [elements]Original Set Size: Y
직접 해보기
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);
}
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
논리와 흐름의 모든 레슨
직접 연습해 보세요: 온라인 Java 컴파일러