ArrayList를 배열로 변환하기
ArrayList를 사용하다 보면 이를 배열로 변환하거나, 그 반대로 변환해야 하는 상황을 마주할 수 있습니다. 예를 들어 포트폴리오에 담긴 주식 목록이 배열에 저장되어 있는데, 이를 ArrayList로 변환하고 싶은 경우가 있을 수 있습니다.
Java에서는 toArray() 메서드를 사용하여 ArrayList를 배열로 변환하고, asList() 메서드를 사용하여 배열을 ArrayList로 변환합니다. 이 글에서는 예제 코드와 함께 Java에서 두 데이터 구조를 서로 변환하는 방법을 자세히 살펴보겠습니다.
Java 배열과 ArrayList의 차이
Java에서 배열(array)은 0개 이상의 값을 순서대로 저장하는 자료구조입니다. 예를 들어 배열은 사탕 가게에서 판매하는 사탕 목록이나 카페에 접수된 주문 목록을 저장할 수 있으며, float, boolean, 문자열 등 어떤 데이터 타입이든 담을 수 있습니다.
다음은 Java에서 배열을 선언하는 예시입니다:
String[] names = new String[5];
이 예제에서는 문자열 값 5개를 저장할 수 있는 names라는 배열을 초기화했습니다.
배열을 사용하려면 먼저 크기를 선언해야 하며, 한 번 크기를 정하면 이후에 변경하기가 어렵다는 점이 특징입니다.
바로 이런 한계를 보완하기 위해 ArrayList 클래스가 등장했습니다. ArrayList는 Java List 인터페이스의 구현체로, 크기가 자동으로 조절되는 배열을 만들 수 있게 해줍니다. ArrayList에 객체를 추가하거나 제거하면 리스트의 용량이 저장된 값의 개수에 맞춰 자동으로 변경됩니다. 이 글에서는 편의상 ArrayList 클래스를 '리스트'라고 부르겠습니다.
다음은 Java에서 ArrayList를 선언하는 예시입니다:
ArrayList<String> names = new ArrayList<>();
위 예제에서는 문자열 값을 제한 없이 저장할 수 있는 names라는 ArrayList를 선언했습니다.
배열과 ArrayList의 기본 개념을 이해했으니, 이제 이 두 데이터 구조 간에 데이터를 변환하는 방법을 알아보겠습니다.
리스트를 배열로 변환하기
Java에서는 list.toArray() 메서드를 사용하여 리스트를 배열로 변환합니다.
예를 들어 은퇴 포트폴리오에 담긴 주식 목록이 ArrayList에 저장되어 있고, 앞으로 새로운 주식을 추가할 계획이 없어서 이 데이터를 배열로 관리하기로 했다고 가정해 봅시다.
이 경우 다음 코드를 사용하여 주식 목록이 담긴 리스트를 Java 배열로 변환할 수 있습니다:
import java.util.List;
import java.util.Arrays;
import java.util.ArrayList;
class Main {
public static void main(String[] args) {
List<String> portfolio = new ArrayList<String>();
portfolio.add("BAM");
portfolio.add("GOOGL");
portfolio.add("SBUX");
String[] newPortfolio = new String[portfolio.size()];
portfolio.toArray(newPortfolio);
System.out.println("Portfolio: " + Arrays.toString(newPortfolio));
}
}
코드를 실행하면 다음과 같은 결과가 출력됩니다:
Portfolio: [BAM, GOOGL, SBUX]
코드를 단계별로 살펴보겠습니다. 먼저 프로그램에 List, Arrays, ArrayList 세 가지 라이브러리를 임포트합니다. List 라이브러리는 Java List 인터페이스를 다룰 수 있게 해주고, ArrayList 라이브러리는 ArrayList를 사용할 수 있게 해주며, Arrays 라이브러리는 toString() 메서드를 통해 배열을 콘솔에 출력할 수 있도록 도와줍니다.
그다음 문자열 값을 저장하는 portfolio라는 ArrayList를 선언하고, add() 메서드를 사용해 BAM, GOOGL, SBUX 세 개의 값을 추가합니다.
다음 줄에서는 newPortfolio라는 배열을 생성하면서 크기를 함께 지정합니다. 이때 newPortfolio 배열의 용량(저장할 수 있는 값의 개수)을 portfolio 리스트의 길이와 동일하게 설정했기 때문에, 이 배열은 세 개의 값을 담을 수 있습니다.
이어서 toArray() 메서드를 호출하여 portfolio ArrayList를 배열로 변환하고, 그 결과값을 newPortfolio 배열에 저장합니다. 그런 다음 Arrays.toString()을 사용해 newPortfolio 변수를 사람이 읽기 쉬운 문자열 형태로 변환합니다. 마지막으로 "Portfolio:"라는 메시지와 함께 변환된 값을 콘솔에 출력합니다.
배열을 리스트로 변환하기
반대로 Java에서는 asList() 메서드를 사용하여 배열을 ArrayList로 변환합니다.
앞선 은퇴 포트폴리오 예제로 돌아가 봅시다. 이번에는 주식 목록이 배열에 저장되어 있고, 이를 유연하게 관리하기 위해 ArrayList로 변환하고 싶은 상황입니다. 다음 코드를 사용하면 됩니다:
import java.util.Arrays;
import java.util.List;
class Main {
public static void main(String[] args) {
String[] portfolio = {"BAM", "GOOGL", "SBUX"};
List<String> newPortfolio = Arrays.asList(portfolio);
System.out.println("New portfolio: " + newPortfolio);
}
}
코드를 실행하면 다음과 같은 결과가 출력됩니다:
New portfolio: [BAM, GOOGL, SBUX]
이 예제에서는 asList()를 사용하여 portfolio라는 이름의 은퇴 포트폴리오 배열을 리스트로 변환했습니다. 코드를 자세히 살펴보겠습니다.
먼저 배열을 리스트로 변환하는 데 필요한 메서드가 포함된 Arrays와 List 패키지를 임포트합니다. 그다음 은퇴 포트폴리오의 주식들이 담긴 배열을 portfolio라는 변수에 선언합니다.
다음 줄에서는 Arrays.asList() 메서드를 사용하여 portfolio 배열의 내용을 리스트로 변환하고, 그 결과를 newPortfolio 변수에 할당합니다. 마지막으로 "New portfolio:"라는 메시지와 함께 newPortfolio의 내용을 콘솔에 출력합니다.
마무리
정리하면, Java의 toArray() 메서드는 리스트를 배열로 변환할 때 사용되고, asList() 메서드는 배열을 리스트로 변환할 때 사용됩니다.
이 글에서는 예제 코드와 함께 Java에서 ArrayList를 배열로, 배열을 ArrayList로 변환하는 방법을 알아보았습니다. 아울러 ArrayList 클래스와 배열 데이터 타입의 핵심적인 차이점도 함께 살펴보았습니다. 이제 여러분도 전문 Java 개발자처럼 ArrayList와 배열을 자유롭게 변환할 수 있을 것입니다!