이 글에서는 자바(Java)를 사용해 두 집합(Set)의 합집합을 계산하는 방법을 알아봅니다. Set은 중복 요소를 포함할 수 없는 컬렉션(Collection)으로, 수학의 '집합' 개념을 프로그래밍으로 구현한 인터페이스입니다. Set 인터페이스는 Collection의 메서드만을 상속하며, 여기에 중복 요소를 허용하지 않는다는 제약 조건이 추가됩니다.
두 집합의 합집합은 addAll() 메서드 하나로 간단히 구할 수 있습니다. 이 메서드는 한 집합의 모든 요소를 다른 집합에 추가하며, 중복된 요소는 자동으로 제거됩니다.
입력 예시
첫 번째 집합: [2, 4]
두 번째 집합: [1, 3]
기대 출력
두 집합의 합집합:
[1, 2, 3, 4]
알고리즘
Step 1 - 시작
Step 2 - 필요한 변수 선언
Step 3 - 값을 정의
Step 4 - 두 개의 Set을 생성하고 'add' 메서드로 요소 추가
Step 5 - 콘솔에 각 집합 출력
Step 6 - 'addAll' 메서드로 두 집합 병합
Step 7 - 콘솔에 합집합 결과 출력
Step 8 - 종료
예제 1: main 메서드에서 모든 작업 처리
아래 예제는 모든 연산을 main 함수 안에서 한 번에 처리하는 방식입니다.
import java.util.HashSet;
import java.util.Set;
public class Demo {
public static void main(String[] args) {
System.out.println("필요한 패키지를 가져왔습니다");
Set<Integer> input_set_1 = new HashSet<>();
input_set_1.add(2);
input_set_1.add(4);
System.out.println("첫 번째 집합: " + input_set_1);
Set<Integer> input_set_2 = new HashSet<>();
input_set_2.add(1);
input_set_2.add(3);
System.out.println("두 번째 집합: " + input_set_2);
input_set_2.addAll(input_set_1);
System.out.println("\n두 집합의 합집합:\n" + input_set_2);
}
}
실행 결과
필요한 패키지를 가져왔습니다
첫 번째 집합: [2, 4]
두 번째 집합: [1, 3]
두 집합의 합집합:
[1, 2, 3, 4]
예제 2: 객체 지향 방식으로 함수 분리
아래 예제는 연산을 별도의 함수로 캡슐화하여 객체 지향 프로그래밍 스타일로 작성한 것입니다.
import java.util.HashSet;
import java.util.Set;
public class Demo {
static void union_sets(Set<Integer> input_set_1, Set<Integer> input_set_2){
input_set_2.addAll(input_set_1);
System.out.println("\n두 집합의 합집합:\n" + input_set_2);
}
public static void main(String[] args) {
System.out.println("필요한 패키지를 가져왔습니다");
Set<Integer> input_set_1 = new HashSet<>();
input_set_1.add(2);
input_set_1.add(4);
System.out.println("첫 번째 집합: " + input_set_1);
Set<Integer> input_set_2 = new HashSet<>();
input_set_2.add(1);
input_set_2.add(3);
System.out.println("두 번째 집합: " + input_set_2);
union_sets(input_set_1, input_set_2);
}
}
실행 결과
필요한 패키지를 가져왔습니다
첫 번째 집합: [2, 4]
두 번째 집합: [1, 3]
두 집합의 합집합:
[1, 2, 3, 4]
핵심 정리
addAll()은 Collection 인터페이스에 정의된 메서드로, 전달된 컬렉션의 모든 요소를 현재 집합에 추가합니다. Set은 중복을 허용하지 않으므로 이미 존재하는 요소는 무시되며, 그 결과 자연스럽게 합집합이 만들어집니다.
단, HashSet은 요소의 순서를 보장하지 않습니다. 실행 환경에 따라 출력 순서가 달라질 수 있으며, 삽입 순서를 유지하려면 LinkedHashSet, 오름차순 정렬이 필요하다면 TreeSet을 사용하는 것이 좋습니다. 또한 원본 집합을 변경하지 않고 싶다면 새로운 Set 객체를 생성한 뒤 addAll()을 호출하는 것이 안전합니다.