Menu
CoddyTech

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());
// 출력: true

clone()에서 캐스팅이 필요한 이유는 무엇인가요?

기본형(예: 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>로 자동 변환하지 않기 때문에 컴파일 오류가 발생합니다.

challenge icon

챌린지

쉬움

입력으로 문자열의 HashSet을 받는 processSet이라는 메서드를 작성하세요. 메서드는 다음을 수행해야 합니다:

  1. 집합을 복제합니다.
  2. 원래 집합을 비웁니다.
  3. 복제된 집합과 그 크기를 다음 형식으로 출력합니다:
    Cloned Set: [elements]
    Cloned Set Size: X
  4. 원래 집합(비운 후)과 그 크기를 다음 형식으로 출력합니다:
    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);
    }
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

논리와 흐름의 모든 레슨

직접 연습해 보세요: 온라인 Java 컴파일러