HOWTO · Java

Java에서 ArrayList를 반환하는 방법

이 튜토리얼에서는 Java의 함수에서 ArrayList를 반환합니다.

이 페이지의 내용

ArrayList는 Java의 java.util 패키지에 있는 크기 조정 가능한 컬렉션입니다. 이를 반환하려면 ArrayList 반환 유형을 선언하고, 컬렉션을 만들고 채운 다음, return으로 반환합니다. Java에서는 클래스 안에 선언된 함수를 메서드라고 부릅니다. 연산이 객체의 상태를 사용할 때는 인스턴스 메서드를 선택하고, 호출자가 클래스를 직접 사용해야 할 때는 정적 메서드를 선택합니다. 호출자가 일반적인 리스트 연산만 필요로 한다면, 메서드는 반환 유형으로 List<T> 인터페이스를 선언하면서 ArrayList<T> 객체를 반환할 수 있습니다.

Java의 비정적 함수에서 ArrayList 반환하기

비정적 메서드는 그 클래스의 인스턴스에 속합니다. 호출자는 먼저 그 클래스를 생성한 다음, 결과 객체에 대해 메서드를 호출합니다. 이 예제에서는 ClassB가 정수 리스트를 만들고, Main은 List<Integer>로 선언된 변수로 반환된 컬렉션을 받습니다. List 인터페이스는 호출자가 리스트 연산만 필요로 할 때 유용한 변수 유형이며, 메서드는 구체적인 ArrayList<Integer> 유형을 선언할 수 있습니다.

완전한 프로그램은 하나의 public 클래스를 사용하고 그 안에 ClassB를 중첩하므로, 예제를 하나의 Java 소스 파일로 저장하고 컴파일할 수 있습니다. main 메서드가 호출자입니다. ClassB를 만들고, m1을 통해 myNumbers()를 호출하고, 반환된 값을 출력합니다.

import java.util.ArrayList;
import java.util.List;

public class Main {
  static class ClassB {
    public ArrayList<Integer> myNumbers() {
      ArrayList<Integer> numbers = new ArrayList<>();
      numbers.add(10);
      numbers.add(15);
      numbers.add(30);
      return numbers;
    }
  }

  public static void main(String[] args) {
    ClassB m1 = new ClassB();
    List<Integer> listInMain = m1.myNumbers();
    System.out.println("The List is " + listInMain);
  }
}
The List is [10, 15, 30]

제네릭 유형 Integer는 컬렉션이 보유하는 요소를 설명합니다. 메서드는 호출할 때마다 새 리스트를 만들고, 세 개의 숫자를 추가하고, 그 리스트를 반환합니다. 호출자는 반환된 컬렉션을 읽거나, 순회하거나, 값을 추가할 수 있습니다. 메서드는 리스트에 대한 참조를 반환합니다. 컬렉션을 배열로 변환하지는 않습니다. 호출자는 그 동일한 객체를 받으므로, 반환된 참조를 통해 이루어진 변경은 메서드가 만든 리스트에 영향을 줍니다.

Java의 정적 함수에서 ArrayList 반환하기

정적 메서드는 특정 객체가 아니라 클래스에 속합니다. 클래스 이름과 메서드 이름으로 호출하므로, 이 버전은 ClassB를 생성하지 않습니다. 이는 메서드의 작업이 특정 인스턴스에 저장된 필드에 의존하지 않을 때 유용합니다. 그 본문은 인스턴스 메서드와 같은 방식으로 ArrayList를 만들고 반환합니다.

이 독립 프로그램은 동일한 데이터를 사용하므로 호출 형태에 집중할 수 있습니다. 메서드가 static으로 선언되어 있으므로, Main은 이를 ClassB.myNumbers()로 호출합니다. 반환된 값은 List<Integer> 변수에 할당되고 호출자가 출력합니다.

import java.util.ArrayList;
import java.util.List;

public class Main {
  static class ClassB {
    public static ArrayList<Integer> myNumbers() {
      ArrayList<Integer> numbers = new ArrayList<>();
      numbers.add(10);
      numbers.add(15);
      numbers.add(30);
      return numbers;
    }
  }

  public static void main(String[] args) {
    List<Integer> listInMain = ClassB.myNumbers();
    System.out.println("The List is " + listInMain);
  }
}
The List is [10, 15, 30]

연산이 객체의 상태를 필요로 할 때는 인스턴스 메서드를 사용하고, 클래스 수준이며 인스턴스가 필요 없을 때는 정적 메서드를 사용합니다. 어느 경우든 선언된 반환 유형을 값과 호환되게 하고, 호출 지점에서 호환되는 유형에 결과를 할당하세요. return 문은 메서드를 종료하고 채워진 리스트를 호출자에게 전달하며, 호출자는 일반적인 List 연산을 사용할 수 있습니다.