Java 배열과 ArrayList

JavaJavaBeginner
지금 연습하기

💡 이 튜토리얼은 영어로 번역되었습니다. 원본을 보려면 영어로 전환

소개

이 랩에서는 Java 의 두 가지 기본적인 데이터 구조인 배열 (Arrays) 과 ArrayList 에 대해 자세히 알아보겠습니다. 이러한 구조는 많은 프로그래밍 작업에 필수적인 데이터 컬렉션을 저장하고 조작할 수 있게 해줍니다. 기본적인 배열부터 시작하여 더 유연한 ArrayList 로 이동할 것입니다. 이 랩이 끝나면 Java 에서 배열과 ArrayList 를 모두 생성, 조작 및 사용할 수 있게 됩니다.

다음 내용을 다룰 것입니다:

  1. 배열 생성 및 사용
  2. 배열 요소 접근 및 수정
  3. ArrayList 소개
  4. ArrayList 에서 요소 추가, 제거 및 접근
  5. 배열과 ArrayList 간 변환

데이터를 정리하는 작업을 시작해 봅시다!

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 84.21%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/DataStructuresGroup(["Data Structures"]) java/BasicSyntaxGroup -.-> java/data_types("Data Types") java/BasicSyntaxGroup -.-> java/variables("Variables") java/DataStructuresGroup -.-> java/arrays("Arrays") java/DataStructuresGroup -.-> java/arrays_methods("Arrays Methods") java/DataStructuresGroup -.-> java/collections_methods("Collections Methods") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/arraylist("ArrayList") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/generics("Generics") subgraph Lab Skills java/data_types -.-> lab-413820{{"Java 배열과 ArrayList"}} java/variables -.-> lab-413820{{"Java 배열과 ArrayList"}} java/arrays -.-> lab-413820{{"Java 배열과 ArrayList"}} java/arrays_methods -.-> lab-413820{{"Java 배열과 ArrayList"}} java/collections_methods -.-> lab-413820{{"Java 배열과 ArrayList"}} java/arraylist -.-> lab-413820{{"Java 배열과 ArrayList"}} java/generics -.-> lab-413820{{"Java 배열과 ArrayList"}} end

배열 생성 및 사용

배열은 Java 에서 동일한 유형의 여러 요소를 저장할 수 있는 기본적인 데이터 구조입니다. 배열을 각 상자에 특정 유형의 항목 하나를 담을 수 있는 일련의 상자라고 생각하십시오.

  1. 프로젝트 디렉토리에서 ArrayDemo.java라는 파일을 엽니다.

    public class ArrayDemo {
        public static void main(String[] args) {
            // 여기에 코드를 추가합니다.
        }
    }

    이것은 Java 프로그램의 기본 구조입니다. main 메서드는 프로그램이 실행을 시작하는 곳입니다.

  2. 이제 정수 배열을 선언하고 초기화해 보겠습니다. main 메서드 안에 다음 줄을 추가합니다.

    int[] numbers = {1, 2, 3, 4, 5};

    이 줄은 numbers라는 정수 배열을 생성하고 1, 2, 3, 4, 5 의 값으로 초기화합니다. 대괄호 []numbers가 배열임을 Java 에 알려줍니다.

  3. 배열의 요소를 출력해 보겠습니다. 배열 선언 뒤에 다음 줄을 추가합니다.

    System.out.println("The elements of the array are:");
    for (int i = 0; i < numbers.length; i++) {
        System.out.println("Element at index " + i + ": " + numbers[i]);
    }

    이 코드는 for 루프를 사용하여 배열을 반복합니다. numbers.length는 배열의 크기를 제공하고, numbers[i]는 인덱스 i의 요소에 접근합니다.

    Java array elements output
  4. 파일을 저장한 다음 프로그램을 컴파일하고 실행합니다.

    javac ~/project/ArrayDemo.java
    java -cp ~/project ArrayDemo

    다음과 유사한 출력을 볼 수 있습니다.

    The elements of the array are:
    Element at index 0: 1
    Element at index 1: 2
    Element at index 2: 3
    Element at index 3: 4
    Element at index 4: 5
  5. 이제 배열의 모든 요소의 합을 계산해 보겠습니다. 이전 루프 뒤에 이 코드를 추가합니다.

    int sum = 0;
    for (int number : numbers) {
        sum += number;
    }
    System.out.println("The sum of the elements is: " + sum);

    이 코드는 향상된 for 루프 (for-each 루프라고도 함) 를 사용하여 배열을 반복합니다. 인덱스가 필요하지 않은 경우 모든 요소를 살펴보는 더 간단한 방법입니다.

  6. 마지막으로 배열에서 최대값을 찾아보겠습니다. 이 코드를 추가합니다.

    int max = numbers[0];
    for (int i = 1; i < numbers.length; i++) {
        if (numbers[i] > max) {
            max = numbers[i];
        }
    }
    System.out.println("The maximum value in the array is: " + max);

    이 코드는 첫 번째 요소를 최대값으로 가정하고, 각 후속 요소를 현재 최대값과 비교하여 더 큰 값이 발견되면 최대값을 업데이트하는 것으로 시작합니다.

  7. 프로그램을 다시 저장, 컴파일 및 실행합니다. 추가 출력을 볼 수 있습니다.

    The sum of the elements is: 15
    The maximum value in the array is: 5
    Java array output example
  8. Java 의 배열은 크기가 고정되어 있지만, 요소를 수정할 수 있습니다. 요소를 변경하고 수정된 배열을 출력해 보겠습니다. main 메서드의 끝에 이 코드를 추가합니다.

    numbers[2] = 10;
    System.out.println("\nAfter modifying the third element:");
    for (int number : numbers) {
        System.out.print(number + " ");
    }
    System.out.println();

    이 코드는 세 번째 요소 (인덱스 2) 의 값을 10 으로 변경한 다음 수정된 배열을 출력합니다.

  9. 프로그램을 다시 저장, 컴파일 및 실행합니다. 추가 출력을 볼 수 있습니다.

    After modifying the third element:
    1 2 10 4 5

축하합니다! 이제 배열을 생성하고, 요소에 접근하고, 값으로 계산을 수행하고, 요소를 수정했습니다. Java 의 배열은 크기가 고정되어 있으므로 배열을 생성한 후에는 길이를 변경할 수 없다는 점을 기억하십시오. 그러나 요소의 값은 변경할 수 있습니다.

ArrayList 소개

이제 배열을 사용했으니 ArrayList 를 소개하겠습니다. ArrayList 는 Java Collections Framework 의 일부이며 객체 목록을 더 유연하게 처리할 수 있는 방법을 제공합니다. 배열과 달리 ArrayList 는 크기가 동적으로 증가하거나 축소될 수 있습니다.

  1. 프로젝트 디렉토리에서 ArrayListDemo.java라는 파일을 엽니다.

    import java.util.ArrayList;
    
    public class ArrayListDemo {
        public static void main(String[] args) {
            // 여기에 코드를 추가합니다.
        }
    }

    맨 위에 있는 import 문을 확인하십시오. 이 문은 프로그램에서 ArrayList 클래스를 사용하려는 것을 Java 에 알려줍니다.

  2. 이제 String 의 ArrayList 를 만들어 보겠습니다. main 메서드 안에 이 줄을 추가합니다.

    ArrayList<String> fruits = new ArrayList<>();

    이것은 String 객체를 담을 수 있는 빈 ArrayList 를 생성합니다. <String> 부분은 "제네릭 (generic)"이라고 하며 ArrayList 가 포함할 요소의 유형을 지정합니다.

  3. ArrayList 에 몇 가지 요소를 추가해 보겠습니다. 다음 줄을 추가합니다.

    fruits.add("Apple");
    fruits.add("Banana");
    fruits.add("Cherry");

    add() 메서드는 목록의 끝에 요소를 추가합니다.

  4. 이제 ArrayList 를 출력해 보겠습니다. 이 코드를 추가합니다.

    System.out.println("Fruits in the list:");
    for (String fruit : fruits) {
        System.out.println(fruit);
    }

    이것은 배열에서 했던 것과 유사하게, 향상된 for 루프를 사용하여 ArrayList 를 반복합니다.

    팁: 출력을 보려면 언제든지 프로그램을 컴파일하고 실행할 수 있습니다. 또는 더 많은 코드를 계속 추가하고 마지막에 모두 실행할 수 있습니다.

  5. ArrayList 에는 많은 유용한 메서드가 있습니다. 몇 가지를 시도해 보겠습니다. 이 코드를 추가합니다.

    System.out.println("\nNumber of fruits: " + fruits.size());
    System.out.println("The second fruit is: " + fruits.get(1));

    size()는 ArrayList 의 요소 수를 반환하고, get(index)는 지정된 인덱스의 요소를 검색합니다.

  6. set() 메서드를 사용하여 ArrayList 의 요소를 바꿀 수도 있습니다. 이 코드를 추가합니다.

    // Before: [Apple, Banana, Cherry]
    fruits.set(1, "Blueberry");    // Replaces "Banana" with "Blueberry"
    System.out.println("\nAfter replacing the second fruit:");
    System.out.println(fruits);     // [Apple, Blueberry, Cherry]

    set(index, element)는 지정된 인덱스의 요소를 새 요소로 바꿉니다. ArrayList 크기는 동일하게 유지됩니다.

  7. 배열과 달리 ArrayList 는 add(index, element) 메서드를 사용하여 모든 위치에 요소를 삽입할 수 있습니다. 이것은 앞서 본 set()과 다릅니다. add()가 어떻게 작동하는지 살펴보겠습니다.

    // Before: [Apple, Blueberry, Cherry]
    fruits.add(1, "Blackberry");
    System.out.println("\nAfter inserting Blackberry at index 1:");
    System.out.println(fruits);
    // After: [Apple, Blackberry, Blueberry, Cherry]

    무슨 일이 일어났는지 이해해 봅시다.

    • add(1, "Blackberry")는 "Blackberry"를 인덱스 1 에 삽입합니다.
    • 인덱스 1 이상 (Blueberry, Cherry) 의 기존 요소는 자동으로 한 위치 오른쪽으로 이동합니다.
    • ArrayList 크기가 1 증가합니다.
    • 이것은 크기를 이동하거나 변경하지 않고 기존 요소를 바꾸는 set()과 다릅니다.

    차이점을 시각화하기 위해:

    // Using add(index, element) - inserts and shifts
    fruits.add(1, "Blackberry");    // [Apple, Blackberry, Blueberry, Cherry]
    
    // Using set(index, element) - replaces without shifting
    fruits.set(1, "Blackberry");    // [Apple, Blackberry, Cherry]
  8. ArrayList 에서 요소를 제거할 수도 있습니다. 이 코드를 추가합니다.

    fruits.remove("Cherry");
    System.out.println("\nAfter removing Cherry:");
    System.out.println(fruits);

    이것은 ArrayList 에서 "Cherry"의 첫 번째 발생을 제거합니다. 요소가 제거되면 후속 요소가 갭을 채우기 위해 왼쪽으로 이동합니다.

  9. 마지막으로 특정 요소가 ArrayList 에 있는지 확인해 보겠습니다.

    System.out.println("\nDoes the list contain Apple? " + fruits.contains("Apple"));
    System.out.println("Does the list contain Cherry? " + fruits.contains("Cherry"));

    contains() 메서드는 ArrayList 에 특정 요소가 포함되어 있는지 확인하고 부울 값을 반환합니다.

  10. 파일을 저장한 다음 프로그램을 컴파일하고 실행합니다.

    javac ~/project/ArrayListDemo.java
    java -cp ~/project ArrayListDemo

    다음과 유사한 출력을 볼 수 있습니다.

    Fruits in the list:
    Apple
    Banana
    Cherry
    
    Number of fruits: 3
    The second fruit is: Banana
    
    After replacing the second fruit:
    [Apple, Blueberry, Cherry]
    
    After inserting Blackberry at index 1:
    [Apple, Blackberry, Blueberry, Cherry]
    
    After removing Cherry:
    [Apple, Blackberry, Blueberry]
    
    Does the list contain Apple? true
    Does the list contain Cherry? false

축하합니다! 이제 ArrayList 를 생성하고, 요소를 추가 및 제거하고, 인덱스로 요소에 접근하고, 다양한 ArrayList 메서드를 사용했습니다. 요소를 삽입하고 이동하는 add()와 요소를 바꾸는 set()과 같은 작업 간의 중요한 차이점을 배웠습니다. ArrayList 는 필요에 따라 증가하고 축소할 수 있으므로 배열보다 더 많은 유연성을 제공합니다. 이것은 작업할 요소 수를 미리 알 수 없는 경우 매우 유용합니다.

배열과 ArrayList 간 변환

때로는 배열과 ArrayList 간에 변환해야 할 수 있습니다. Java 는 이를 수행하는 편리한 메서드를 제공합니다. 배열을 ArrayList 로, 그리고 그 반대로 변환하는 방법을 살펴보겠습니다.

  1. 프로젝트 디렉토리에서 ConversionDemo.java라는 파일을 엽니다.

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    public class ConversionDemo {
        public static void main(String[] args) {
            // 여기에 코드를 추가합니다.
        }
    }

    맨 위에 있는 import 문을 확인하십시오. 변환에 필요한 클래스를 가져오고 있습니다.

  2. 배열을 ArrayList 로 변환하는 것부터 시작해 보겠습니다. main 메서드 안에 이 코드를 추가합니다.

    String[] colorArray = {"Red", "Green", "Blue"};
    List<String> colorList = Arrays.asList(colorArray);
    
    System.out.println("Array converted to ArrayList:");
    System.out.println(colorList);

    Arrays.asList()는 배열을 List로 변환합니다. 이것은 원래 배열에 의해 지원되는 고정 크기 목록을 생성합니다.

  3. ArrayList 를 수정하고 원래 배열에 어떤 일이 발생하는지 살펴보겠습니다. 이 코드를 추가합니다.

    colorList.set(1, "Yellow");
    
    System.out.println("\nAfter modifying the ArrayList:");
    System.out.println(colorList);
    System.out.println("Original array after ArrayList modification:");
    System.out.println(Arrays.toString(colorArray));

    Arrays.toString()은 배열을 출력하는 편리한 메서드입니다.

  4. 이제 ArrayList 를 배열로 변환해 보겠습니다. 이 코드를 추가합니다.

    ArrayList<Integer> numberList = new ArrayList<>();
    numberList.add(1);
    numberList.add(2);
    numberList.add(3);
    
    Integer[] numberArray = numberList.toArray(new Integer[0]);
    
    System.out.println("\nArrayList converted to array:");
    System.out.println(Arrays.toString(numberArray));

    ArrayList 의 toArray() 메서드를 사용하여 배열로 변환합니다. new Integer[0]을 인수로 전달하는데, 이는 생성될 배열의 유형과 크기에 대한 힌트 역할을 합니다.

  5. 마지막으로 배열을 수정하고 ArrayList 에 영향을 미치는지 확인해 보겠습니다. 이 코드를 추가합니다.

    numberArray[0] = 100;
    System.out.println("\nAfter modifying the array:");
    System.out.println("Array: " + Arrays.toString(numberArray));
    System.out.println("ArrayList: " + numberList);
  6. 파일을 저장한 다음 프로그램을 컴파일하고 실행합니다.

    javac ~/project/ConversionDemo.java
    java -cp ~/project ConversionDemo

    다음과 유사한 출력을 볼 수 있습니다.

    Array converted to ArrayList:
    [Red, Green, Blue]
    
    After modifying the ArrayList:
    [Red, Yellow, Blue]
    Original array after ArrayList modification:
    [Red, Yellow, Blue]
    
    ArrayList converted to array:
    [1, 2, 3]
    
    After modifying the array:
    Array: [100, 2, 3]
    ArrayList: [1, 2, 3]

이 데모는 배열과 ArrayList 가 서로 어떻게 변환될 수 있는지 보여줍니다. 동작의 차이점을 아는 것이 중요합니다.

  • Arrays.asList()를 사용하여 배열을 List 로 변환하면 결과 List 는 원래 배열에 의해 지원됩니다. 즉, List 에 대한 변경 사항은 배열에 반영되고, 그 반대도 마찬가지입니다.
  • toArray()를 사용하여 ArrayList 를 배열로 변환하면 ArrayList 와 독립적인 새 배열이 생성됩니다. 이 새 배열에 대한 변경 사항은 원래 ArrayList 에 영향을 미치지 않습니다.

Java 에서 서로 다른 컬렉션 유형으로 작업할 때, 특히 한 유형을 다른 유형보다 선호할 수 있는 API 또는 라이브러리와 인터페이스할 때 이러한 변환과 해당 동작을 이해하는 것이 중요합니다.

요약

이 랩에서는 Java 의 두 가지 기본적인 데이터 구조인 배열과 ArrayList 를 살펴보았습니다. 배운 내용을 요약해 보겠습니다.

  1. 배열:

    • int[] numbers = {1, 2, 3, 4, 5}; 구문을 사용하여 배열을 생성하고 초기화했습니다.
    • numbers[0]과 같은 인덱스 표기법을 사용하여 배열 요소에 접근하는 방법을 배웠습니다.
    • 전통적인 for 루프와 향상된 for 루프를 모두 사용하여 배열을 반복했습니다.
    • 합계 및 최대값 찾기와 같은 배열 요소로 계산을 수행했습니다.
    • 배열은 고정된 크기를 갖지만 요소를 수정할 수 있다는 것을 확인했습니다.
  2. ArrayList:

    • ArrayList<String> fruits = new ArrayList<>();를 사용하여 ArrayList 를 생성했습니다.
    • add()로 요소를 추가하고, remove()로 요소를 제거하고, get()으로 요소에 접근하는 방법을 배웠습니다.
    • size(), set(), contains()와 같은 메서드를 사용하여 ArrayList 를 사용했습니다.
    • ArrayList 는 동적으로 증가하고 축소될 수 있으며 배열보다 더 많은 유연성을 제공한다는 것을 확인했습니다.
  3. 배열과 ArrayList 간 변환:

    • Arrays.asList()를 사용하여 배열을 ArrayList 로 변환했습니다.
    • toArray() 메서드를 사용하여 ArrayList 를 배열로 변환했습니다.
    • 변환된 컬렉션을 수정할 때의 다른 동작을 관찰했습니다.

배열과 ArrayList 는 Java 프로그래밍의 필수 도구입니다. 배열은 고정된 수의 요소로 작업하는 데 적합하며 메모리 사용 측면에서 더 효율적일 수 있습니다. 반면에 ArrayList 는 더 많은 유연성과 컬렉션을 조작하기 위한 풍부한 메서드 집합을 제공합니다.

Java 여정을 계속 진행하면서 배열과 ArrayList 를 모두 자주 사용하게 될 것입니다. 둘 중 어떤 것을 선택할지는 종종 특정 요구 사항에 따라 다릅니다. 작업할 요소의 정확한 수를 알고 있다면 배열이 더 나을 수 있습니다. 증가하거나 축소할 수 있는 동적 컬렉션이 필요하거나 ArrayList 에서 제공하는 추가 메서드가 필요한 경우 ArrayList 가 더 나은 선택입니다.

OSZAR »