소개
이 랩에서는 Java 의 두 가지 기본적인 데이터 구조인 배열 (Arrays) 과 ArrayList 에 대해 자세히 알아보겠습니다. 이러한 구조는 많은 프로그래밍 작업에 필수적인 데이터 컬렉션을 저장하고 조작할 수 있게 해줍니다. 기본적인 배열부터 시작하여 더 유연한 ArrayList 로 이동할 것입니다. 이 랩이 끝나면 Java 에서 배열과 ArrayList 를 모두 생성, 조작 및 사용할 수 있게 됩니다.
다음 내용을 다룰 것입니다:
- 배열 생성 및 사용
- 배열 요소 접근 및 수정
- ArrayList 소개
- ArrayList 에서 요소 추가, 제거 및 접근
- 배열과 ArrayList 간 변환
데이터를 정리하는 작업을 시작해 봅시다!
배열 생성 및 사용
배열은 Java 에서 동일한 유형의 여러 요소를 저장할 수 있는 기본적인 데이터 구조입니다. 배열을 각 상자에 특정 유형의 항목 하나를 담을 수 있는 일련의 상자라고 생각하십시오.
프로젝트 디렉토리에서
ArrayDemo.java라는 파일을 엽니다.public class ArrayDemo { public static void main(String[] args) { // 여기에 코드를 추가합니다. } }이것은 Java 프로그램의 기본 구조입니다.
main메서드는 프로그램이 실행을 시작하는 곳입니다.이제 정수 배열을 선언하고 초기화해 보겠습니다.
main메서드 안에 다음 줄을 추가합니다.int[] numbers = {1, 2, 3, 4, 5};이 줄은
numbers라는 정수 배열을 생성하고 1, 2, 3, 4, 5 의 값으로 초기화합니다. 대괄호[]는numbers가 배열임을 Java 에 알려줍니다.배열의 요소를 출력해 보겠습니다. 배열 선언 뒤에 다음 줄을 추가합니다.
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의 요소에 접근합니다.
파일을 저장한 다음 프로그램을 컴파일하고 실행합니다.
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이제 배열의 모든 요소의 합을 계산해 보겠습니다. 이전 루프 뒤에 이 코드를 추가합니다.
int sum = 0; for (int number : numbers) { sum += number; } System.out.println("The sum of the elements is: " + sum);이 코드는 향상된 for 루프 (for-each 루프라고도 함) 를 사용하여 배열을 반복합니다. 인덱스가 필요하지 않은 경우 모든 요소를 살펴보는 더 간단한 방법입니다.
마지막으로 배열에서 최대값을 찾아보겠습니다. 이 코드를 추가합니다.
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);이 코드는 첫 번째 요소를 최대값으로 가정하고, 각 후속 요소를 현재 최대값과 비교하여 더 큰 값이 발견되면 최대값을 업데이트하는 것으로 시작합니다.
프로그램을 다시 저장, 컴파일 및 실행합니다. 추가 출력을 볼 수 있습니다.
The sum of the elements is: 15 The maximum value in the array is: 5
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 으로 변경한 다음 수정된 배열을 출력합니다.
프로그램을 다시 저장, 컴파일 및 실행합니다. 추가 출력을 볼 수 있습니다.
After modifying the third element: 1 2 10 4 5
축하합니다! 이제 배열을 생성하고, 요소에 접근하고, 값으로 계산을 수행하고, 요소를 수정했습니다. Java 의 배열은 크기가 고정되어 있으므로 배열을 생성한 후에는 길이를 변경할 수 없다는 점을 기억하십시오. 그러나 요소의 값은 변경할 수 있습니다.
ArrayList 소개
이제 배열을 사용했으니 ArrayList 를 소개하겠습니다. ArrayList 는 Java Collections Framework 의 일부이며 객체 목록을 더 유연하게 처리할 수 있는 방법을 제공합니다. 배열과 달리 ArrayList 는 크기가 동적으로 증가하거나 축소될 수 있습니다.
프로젝트 디렉토리에서
ArrayListDemo.java라는 파일을 엽니다.import java.util.ArrayList; public class ArrayListDemo { public static void main(String[] args) { // 여기에 코드를 추가합니다. } }맨 위에 있는
import문을 확인하십시오. 이 문은 프로그램에서 ArrayList 클래스를 사용하려는 것을 Java 에 알려줍니다.이제 String 의 ArrayList 를 만들어 보겠습니다.
main메서드 안에 이 줄을 추가합니다.ArrayList<String> fruits = new ArrayList<>();이것은 String 객체를 담을 수 있는 빈 ArrayList 를 생성합니다.
<String>부분은 "제네릭 (generic)"이라고 하며 ArrayList 가 포함할 요소의 유형을 지정합니다.ArrayList 에 몇 가지 요소를 추가해 보겠습니다. 다음 줄을 추가합니다.
fruits.add("Apple"); fruits.add("Banana"); fruits.add("Cherry");add()메서드는 목록의 끝에 요소를 추가합니다.이제 ArrayList 를 출력해 보겠습니다. 이 코드를 추가합니다.
System.out.println("Fruits in the list:"); for (String fruit : fruits) { System.out.println(fruit); }이것은 배열에서 했던 것과 유사하게, 향상된 for 루프를 사용하여 ArrayList 를 반복합니다.
팁: 출력을 보려면 언제든지 프로그램을 컴파일하고 실행할 수 있습니다. 또는 더 많은 코드를 계속 추가하고 마지막에 모두 실행할 수 있습니다.
ArrayList 에는 많은 유용한 메서드가 있습니다. 몇 가지를 시도해 보겠습니다. 이 코드를 추가합니다.
System.out.println("\nNumber of fruits: " + fruits.size()); System.out.println("The second fruit is: " + fruits.get(1));size()는 ArrayList 의 요소 수를 반환하고,get(index)는 지정된 인덱스의 요소를 검색합니다.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 크기는 동일하게 유지됩니다.배열과 달리 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]ArrayList 에서 요소를 제거할 수도 있습니다. 이 코드를 추가합니다.
fruits.remove("Cherry"); System.out.println("\nAfter removing Cherry:"); System.out.println(fruits);이것은 ArrayList 에서 "Cherry"의 첫 번째 발생을 제거합니다. 요소가 제거되면 후속 요소가 갭을 채우기 위해 왼쪽으로 이동합니다.
마지막으로 특정 요소가 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 에 특정 요소가 포함되어 있는지 확인하고 부울 값을 반환합니다.파일을 저장한 다음 프로그램을 컴파일하고 실행합니다.
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 로, 그리고 그 반대로 변환하는 방법을 살펴보겠습니다.
프로젝트 디렉토리에서
ConversionDemo.java라는 파일을 엽니다.import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ConversionDemo { public static void main(String[] args) { // 여기에 코드를 추가합니다. } }맨 위에 있는 import 문을 확인하십시오. 변환에 필요한 클래스를 가져오고 있습니다.
배열을 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로 변환합니다. 이것은 원래 배열에 의해 지원되는 고정 크기 목록을 생성합니다.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()은 배열을 출력하는 편리한 메서드입니다.이제 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]을 인수로 전달하는데, 이는 생성될 배열의 유형과 크기에 대한 힌트 역할을 합니다.마지막으로 배열을 수정하고 ArrayList 에 영향을 미치는지 확인해 보겠습니다. 이 코드를 추가합니다.
numberArray[0] = 100; System.out.println("\nAfter modifying the array:"); System.out.println("Array: " + Arrays.toString(numberArray)); System.out.println("ArrayList: " + numberList);파일을 저장한 다음 프로그램을 컴파일하고 실행합니다.
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 를 살펴보았습니다. 배운 내용을 요약해 보겠습니다.
배열:
int[] numbers = {1, 2, 3, 4, 5};구문을 사용하여 배열을 생성하고 초기화했습니다.numbers[0]과 같은 인덱스 표기법을 사용하여 배열 요소에 접근하는 방법을 배웠습니다.- 전통적인 for 루프와 향상된 for 루프를 모두 사용하여 배열을 반복했습니다.
- 합계 및 최대값 찾기와 같은 배열 요소로 계산을 수행했습니다.
- 배열은 고정된 크기를 갖지만 요소를 수정할 수 있다는 것을 확인했습니다.
ArrayList:
ArrayList<String> fruits = new ArrayList<>();를 사용하여 ArrayList 를 생성했습니다.add()로 요소를 추가하고,remove()로 요소를 제거하고,get()으로 요소에 접근하는 방법을 배웠습니다.size(),set(),contains()와 같은 메서드를 사용하여 ArrayList 를 사용했습니다.- ArrayList 는 동적으로 증가하고 축소될 수 있으며 배열보다 더 많은 유연성을 제공한다는 것을 확인했습니다.
배열과 ArrayList 간 변환:
Arrays.asList()를 사용하여 배열을 ArrayList 로 변환했습니다.toArray()메서드를 사용하여 ArrayList 를 배열로 변환했습니다.- 변환된 컬렉션을 수정할 때의 다른 동작을 관찰했습니다.
배열과 ArrayList 는 Java 프로그래밍의 필수 도구입니다. 배열은 고정된 수의 요소로 작업하는 데 적합하며 메모리 사용 측면에서 더 효율적일 수 있습니다. 반면에 ArrayList 는 더 많은 유연성과 컬렉션을 조작하기 위한 풍부한 메서드 집합을 제공합니다.
Java 여정을 계속 진행하면서 배열과 ArrayList 를 모두 자주 사용하게 될 것입니다. 둘 중 어떤 것을 선택할지는 종종 특정 요구 사항에 따라 다릅니다. 작업할 요소의 정확한 수를 알고 있다면 배열이 더 나을 수 있습니다. 증가하거나 축소할 수 있는 동적 컬렉션이 필요하거나 ArrayList 에서 제공하는 추가 메서드가 필요한 경우 ArrayList 가 더 나은 선택입니다.



