최원종의 개발 블로그

ArrayList - 컬렉션 본문

Java/JAVA 유용한 클래스

ArrayList - 컬렉션

chl6698 2026. 3. 30. 09:10

ArrayList를 쓰는 이유

 

기존 배열 사용

// 배열로 채팅 접속자 관리
String[] users = new String[100]; // 최대 100명? 101명 오면?
int count = 0;

// 접속
users[count] = "철수";
count++;

// "철수" 퇴장 - 복잡!
for (int i = 0; i < count - 1; i++) {
    users[i] = users[i + 1]; // 뒤에서 앞으로 밀기
}
users[count - 1] = null;
count--;

 

 

배열의 문제점

1. 크기 고정   : 처음에 100으로 잡으면 101번째는 못 들어옴
2. 삭제 복잡   : 중간 삭제 후 뒤 요소를 직접 밀어야 함
3. count 관리  : 실제 개수를 변수로 따로 관리해야 함

 

ArrayList 는 이 세 가지 불편함을 모두 해결한 클래스

import java.util.ArrayList;

ArrayList<String> users = new ArrayList<>(); // 크기 미리 안 정해도 됨

users.add("철수");   // 추가 
users.add("영희");
users.remove("철수"); // 삭제 - 한 줄 끝!
System.out.println(users.size()); // 실제 개수 자동 관리

 

 

제네릭 <타입>

ArrayList 를 선언할 때 꺽쇠 안에 저장할 타입을 씀

ArrayList<String>  names  = new ArrayList<>(); // 문자열만
ArrayList<Integer> scores = new ArrayList<>(); // 정수만

 

타입을 지정하면 잘못된 타입을 넣을 때 실행 전에 오류를 잡아줌

ArrayList<String> list = new ArrayList<>();
list.add("철수");
list.add(100);    // 컴파일 오류! String 만 가능

- 문법 연습 코드

package io.ch17_1.array;

import java.util.ArrayList;

public class ArrayListEx3 {

    public static void main(String[] args) {
        // 1. 정수를 담은 리스트
        ArrayList<Integer> intList = new ArrayList<>();
        intList.add(10);
        intList.add(20);
        intList.add(30);
        System.out.println("정수 리스트 : " + intList);

        // 2. 실수를 담은 리스트
        ArrayList<Double> doubleList = new ArrayList<Double>();
        doubleList.add(1.0);
        doubleList.add(2.0);
        doubleList.add(3.0);
        System.out.println(doubleList);

        // 3. 불리언 담을 리스트
        ArrayList<Boolean> booleanList = new ArrayList<>();
        booleanList.add(true);
        booleanList.add(false);

        // 사용자 정의 객체를 담는 리스트
        ArrayList<Book2> book2List = new ArrayList<>();
        book2List.add(new Book2("자바책"));
        book2List.add(new Book2("RDBMS책"));

        // book2List.get(0) ==> 주소값.title
        System.out.println(book2List.get(0).title);
        System.out.println(book2List.get(1).title);

        try {
            if (book2List.size() > 2) {
                System.out.println(book2List.get(2).title);
            } else {
                System.out.println("해당 인덱스에는 데이터가 없습니다.");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("프로그램 정상 종료");
    } // end of main
} // end of class

class Book2 {
    String title;

    public Book2(String title) {
        this.title = title;
    }

    @Override
    public String toString() {
        return "[title=" + title + "]";
    }
}