[그린컴퓨터] Server/JAVA(객체 지향 프로그래밍)

ArrayList 클래스 사용하기 { 기존 배열의 단점 & ArrayList, ArrayList 클래스의 주요 메서드, ArrayList 클래스 활용 }

Ben의 프로그램 2023. 5. 25. 20:55
728x90

기존 배열의 단점과 ArrayList

  • 우리가 앞에서 배운 기본 배열은 프로그램에서 사용하려면 항상 배열 길이를 정하고 시작합니다. 
  • 이런 경우를 한번 생각해 보겠습니다.
  • 처음에 100명의 학생을 위한 프로그램을 개발했는데, 어느 순간 학생 수가 100명이 넘었습니다. 배열을 사용하는 중에는 배열 길이를 변경할 수 없기 때문에 코드를 수정해야 합니다. 
  • 혹은 중간에 학생 한 명이 전학을 갔습니다. 배열은 중간에 있는 요소를 비워 둘 수 없으므로 배열 요소 위치를 변경해야 합니다. 
  • 이 두 경우 모두 배열을 하나하나 수정하려면 힘들고 복잡합니다. 
  • 그래서 자바는 객체 배열을 좀 더 쉽게 사용할 수 있도록 객체 배열 클래스 ArrayList를 제공합니다. 
  • ArrayList 클래스는 객체 배열을 관리할 수 있는 멤버 변수와 메서드를 제공하므로 사용 방법만 알아 두면 편리하게 사용할 수 있습니다. 

ArrayList 클래스의 주요 메서드

  • ArrayList 클래스에는 이미 만들어져 있는 메서드가 많이 있습니다. 
  • 가장 많이 사용하는 메서드 위주로 설명하겠습니다. 
메서드 설명
boolean add(E e) 요소 하나를 배열에 추가합니다. E는 요소의 자료형을 의미합니다. 
int size( )  배열에 추가된 요소 전체 개수를 반환합니다.
E get(int index) 배열의 index 위치에 있는 요소 값을 반환합니다.
E remove(int index) 배열의 index 위치에 있는 요소 값을 제거하고 그 값을 반환합니다.
boolean isEmpty( ) 배열이 비어 있는지 확인합니다.
  • add( ) 메서드를 이용하면 배열 길이와 상관없이 객체를 추가할 수 있습니다.
  • 만약 배열의 길이가 추가될 요소 개수보다 부족하다면 배열의 길이를 더 증가시키도록 구현되어 있습니다.
  • 또한 배열 중간의 어떤 요소 값이 제거되면 그 다음 요소 값을 하나씩 앞으로 이동하는 코드도 이미 구현되어 있습니다.
  • 이렇게 자바에서 제공하는 라이브러리를 활용하면 좀 더 편리하게 프로그래밍할 수 있습니다. 

Java의 공식 문서, JavaDoc 이용하기

  • ArrayList 클래스에는 여러 메서드가 있습니다. 
  • 이들 메서드 모두를 지금 공부할 수는 없습니다. 
  • 나중에 공부하다 모르는 내용이 있을 때 가장 좋은 방법은 자바에서 제공하는 공식 문서인 JavaDoc 을 찾아보는 것입니다. 
  • ArrayList 에 대해 궁금하다면 ArrayList 를 이클립스 편집 창에 입력한 다음 F1 키를 눌러보세요. 
  • ArrayList 에 대한 JavaDoc 을 확인할 수 있습니다. 

ArrayList 클래스 활용하기

  • ArrayList 를 사용할 때 어떤 자료형 객체를 사용하여 프로그래밍할 것인지 선언할 수 있습니다. 
  • ArrayList 를 사용하는 기본형식은 아래와 같습니다. 
ArrayList<E> 배열이름 = new ArrayList<E>();
  • <E>와 같은 형태를 제네릭 generic 자료형 이라고 합니다. 제네릭 자료형에 대해서는 추후에 자세히 배우게 됩니다.
  • 배열을 선언하는 부분의 < > 안에 사용할 객체의 자료형 E 를 쓰면 됩니다. 
  • 예를 들어 Book 클래스형을 자료형으로 사용해서 ArrayList 배열을 생성한다면 다음과 같습니다. 
ArrayList<Book> library = new ArrayList<Book>();
  • ArrayList 는 java.util 패키지에 구현되어 있는 클래스입니다. 
  • 현재 프로그램에는 ArrayList 를 사용하기 위한 java.util 패키지가 포함되어 있지 않기 때문에 컴파일러에게 ArrayList 가 어디에 구현되어 있는지 알려줘야 합니다. 
  • 이렇게 내 코드에 없는 클래스를 가져와 사용할 때 이 클래스가 어디에 구현되어 있다고 알려주기 위해 코드 맨 위에 선언하는 것을 임포트 import 한다고 합니다. 
  • 즉 ArrayList 를 사용하려면 자바 클래스를 선언한기 전에 import java.util.ArrayList; 문장을 반드시 써주어야 합니다.
  • 앞에서 만든 Book 클래스 배열 예제를 ArrayList 클래스를 활용하여 구현해 보겠습니다.
package array;
import java.util.ArrayList;  // ArrayList 클래스 import

public class ArrayListTest {

	public static void main(String[] args) {
		ArrayList<Book> library = new ArrayList<Book>();  // ArrayList 선언
		
		library.add(new Book("태백산맥", "조정래"));  // add() 메서드로 요소 값 추가
		library.add(new Book("데미안", "헤르만 헤세"));
		library.add(new Book("어떻게 살 것인가", "유시민"));
		library.add(new Book("토지", "박경리"));
		library.add(new Book("어린왕자", "생텍쥐페리"));
		
		for (int i = 0; i < library.size(); i++) {  // size() 메서드로 배열의 길이 반환
			Book book = library.get(i);
			book.showBookInfo();
		}
		System.out.println();
		
		System.out.println("=== 향상된 for 문 사용 ===");  // 
		for(Book book : library) {
			book.showBookInfo();
		}
	}
}
  • 기존 배열에서는 [ ] 안에 배열 전체 길이를 미리 지정해야 했습니다.
  • 하지만 ArrayList 를 생성할 때는 미리 지정할 필요 없이 add( ) 메서드를 사용해 생성자만 호출하면 됩니다. 
  • ArrayList 는 객체 배열이므로 add( ) 메서드를 통해 인스턴스를 생성하여 배열의 요소로 추가합니다. 
  • 그 다음 for 구문과 get( ) 메서드를 통해 생성한 library ArrayList 배열에 추가된 요소들을 가져와 출력합니다.
  • ArrayList 의 length 는 size( ) 메서드를 활용합니다.