Menu
Coddy logo textTech

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: true

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

원시 타입(예: 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가 ObjectHashSet<String>로 자동 변환하지 않기 때문입니다.

challenge icon

챌린지

쉬움

<strong>processSet</strong>이라는 이름의 메서드를 생성하세요. 이 메서드는 String의 HashSet을 입력으로 받습니다. 메서드는 다음을 수행해야 합니다:

  1. 세트를 복제하세요.
  2. 원본 세트를 비우세요.
  3. 다음 형식으로 복제된 세트와 그 크기를 출력하세요:
    Cloned Set: [elements]
    Cloned Set Size: X
  4. 다음 형식으로 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);
    }
}
quiz icon실력 점검

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

논리와 흐름의 모든 레슨