목차
<기존 배열의 단점과 ArrayList>
앞서 배운 기본 배열은 프로그램에서 사용하려면 항상 배열 길이를 정하고 시작한다.
따라서 나중에 요소가 추가되어야 하는데 정해놓은 길이를 넘어버린다거나,
또는 중간의 요소를 삭제해야 하면 (배열은 중간의 요소를 비울 수 없음.)
작성한 코드를 하나하나 수정해야 하는 불상사가 생겨버린다.
따라서 자바는 객체 배열을 좀 더 쉽게 사용할 수 있도록 '객체 배열 클래스 ArrayList'를 제공한다.
ArrayList 클래스는 객체 배열을 관리할 수 있는 멤버 변수와 메서드를 제공.
<ArrayList 클래스의 주요 메서드>
ArrayList 클래스에는 이미 만들어져 있는 메서드가 많이 있다. 그중 가장 많이 사용하는 메서드는...
add()메서드를 이용하면 배열 길이와 상관 없이 객체를 추가할 수 있다. 만일 배열의 길이가 추가될 요소 개수보다 부족하다면 배열을 더 키울 수 있도록 구현이 되어있다.
또 배열 중간의 어떤 요소 값이 제거된다면, 그 다음 요소 값을 하나씩 앞으로 이동하는 코드도 이미 구현이 되어있다.
<ArrayList 클래스 활용>
ArrayList를 사용할 때 어떤 자료형 객체를 사용하여 프로그래밍할 것인지 선언할 수 있다.
ArrayList<E> 배열이름 = new ArrayList<E>();
※<E>와 같은 형태를 '제네릭(generic)자료형'이라고 한다.
배열을 선언하는 부분의<>안에 사용할 객체의 자료형(E)를 쓰면 된다.
예를 들어 앞에서 만든 Book클래스형을 자료형으로 사용해서 ArrayList 배열을 생성한다면 다음과 같다.
ArrayList<Book> library = new ArrayList<Book>();
ArrayList는 java.util 패키지에 구현되어 있는 클래스임. 현재 만든 프로그램에는 java.util 패키지가 포함되어 있지 않기 때문에 ArrayList를 사용하기 위해서 컴파일러에게 ArrayList가 어디에 구현되어 있는지 알려줘야 한다.
이렇게 내 코드에 없는 클래스를 가져와 사용할 때 이 클래스가 어디에 구현되어 있다고 알려주기 위해 코드 맨 위에 선언하는 것을 임포트(import)한다고 한다.
즉 ArrayList를 사용하려면 자바 클래스를 선언하기 전에 import java.util.ArrayList; 문장을 반드시 써주어야 한다.
ArrayList클래스 활용 예제
package array;
import java.util.ArrayList; //ArrayList 클래스 import
public class ArrayListTest {
public static void main(String[] args) {
ArrayList<Book> library = new ArrayList<>();
//ArrayList 선언
library.add(new Book("태백1","조정래"));
library.add(new Book("태백2","조정래"));
library.add(new Book("태백3","조정래"));
library.add(new Book("태백4","조정래"));
library.add(new Book("태백5","조정래"));
//add() 메서드로 요소 값 추가 (E는 자료형을 의미하니까 참조 자료형을 써줌)
for(int i = 0; i < library.size(); i++) {
Book book = library.get(i); //E get(int index) 메서드
book.showBookInfo();
// library.get(i).showBookInfo(); 라고 짧게 쓰기도 가능.
}
System.out.println(); //빈 줄 추가
System.out.println("==향상된 for문 응용==");
for(Book book : library) {
book.showBookInfo();
}
}
}
run:
기본 배열에서는 []안에 배열 전체 길이를 미리 지정해야 했다.
하지만 ArrayList를 생성할 때는 길이를 미리 지정할 필요 없이 add()메서드를 사용해 생성자만 호출하면 된다.
ArrayList에 있는 인스턴스 하나 가져오는 메서드는 get(i).
for문을 보면 배열에 추가된 요소 개수만큼 출력하기 위해 size()메서드를 사용. size()메서드는 배열에 유효한 값이 저장된 요소 개수를 반환.
<ArrayList 연습>
먼저 만든 Student클래스를 이용하여 StudentArrayList 클래스를 만들고 ArrayList<Student>자료형의 ArrayList를 선언.
ArrayList에 학생 3명을 추가하고 그 정보를 출력하세요.
출력결과는 다음과 같다.
1001, James
1002, Tomas
1003, Edward
package chapter7;
import java.util.ArrayList;
public class StudentArrayList {
public static void main(String[] args) {
ArrayList<Student> student = new ArrayList<>();
//ArrayList 선언
student.add(new Student(1001, "James"));
student.add(new Student(1002, "Tomas"));
student.add(new Student(1003, "Edward"));
add()메서드로 요소 값 추가.
for(Student student1 : student) {
student1.showStudentInfo();
} //미리 생성된 showStudentInfo()메서드로 학생 정보 출력
} // 향상된 for문으로 유효한 값을 모두 반환
}
run:
위와 동일.
[Do it! 자바 프로그래밍 입문] 도서로 공부하며 정리한 글입니다.