자바 ArrayList | 자바 입문강좌 42

자바 ArrayList

ArrayList 는 Array 배열과 List 리스트를 합친 자료구조입니다. Array 의 특징인 배열적인 구조, 자료형이 연달아 나가서 인덱스를 사용할 수 있는 구조에 List 의 중간삽입 기능도 들어있습니다.

자료구조의 기본 기능은 삽입, 검색, 삭제 세 가지 입니다. 이 세가지를 할 수 있으면 자료를 사용할 수 있죠. ArrayList 는 클래스이므로 단순히 데이터를 담을 뿐 아니라 ArrayList에 적합한 메소드도 달려 있습니다.

예제

아래 ArrayList 예제에서는 커스텀 데이터의 정의, 데이터의 삽입, 검색, 삭제, 데이터 출력의 요소가 들어있습니다. 다소 거칠게 나열했습니다만 처음에는 거친 코드들을 사용해보는 것도 좋다고 생각합니다.

원초적인 코드를 사용하다가 그 다음에는 코드를 줄이기 시작하죠. 객체지향 프로그래밍의 특징중에 캡슐화라는 것이 있는데 데이터를 바깥으로 보이지 않도록 하는 것이 목적입니다.

불필요한 데이터를 보여주지 않음으로써 사용자의 동작을 최소화 하는 것이 가능합니다. 보이지 않으니까 건드릴 일도 없습니다. 그렇게 하려면 이 아래의 코드들을 하나씩 클래스로 다 감싸야 합니다.

package com.kay;

import java.util.ArrayList;

public class Main {

    public static void main(String[] args) {
        ArrayList<MyMemo> arrLst = new ArrayList<MyMemo>();

        MyMemo memo1 = new MyMemo(1, "this is first memo");
        MyMemo memo2 = new MyMemo(2, "tomorro meeting at 4pm");
        MyMemo memo3 = new MyMemo(3, "having lunch with Tom");
        MyMemo memo4 = new MyMemo(4, "pay for appartment rent");
        MyMemo memo5 = new MyMemo(5, "trip to Busan");

        arrLst.add(memo1);
        arrLst.add(memo2);
        arrLst.add(memo3);
        arrLst.add(memo4);
        arrLst.add(memo5);
        arrLst.add(3, new MyMemo(0, "added between the element"));
        
        int removeId = 1;
        System.out.println("id to remove index : " + arrLst.get(removeId).getMemoId());

        for (int i = 0; i < arrLst.size(); i++) {
            int tempId = arrLst.get(i).getMemoId();
            if (tempId == removeId){
                arrLst.remove(i);
            }
        }

        for (MyMemo memo : arrLst){
            System.out.println(memo.getMemoId() + " - " + memo.getMemoText());
        }
    }
}

class MyMemo{
    private int memoId;
    private String memoText;

    public int getMemoId() {
        return memoId;
    }

    public void setMemoId(int memoId) {
        this.memoId = memoId;
    }

    public String getMemoText() {
        return memoText;
    }

    public void setMemoText(String memoText) {
        this.memoText = memoText;
    }

    public MyMemo(int memoId, String memoText) {
        this.memoId = memoId;
        this.memoText = memoText;
    }
}
id to remove index : 2
2 - tomorro meeting at 4pm
3 - having lunch with Tom
0 - added between the element
4 - pay for appartment rent
5 - trip to Busan

이 코드의 목적은 메모장의 자료구조를 만드는 것입니다. 메모를 추가하는 것은 인스턴스를 생성하는 것입니다. 인스턴스가 생성되면 바로 ArrayList에 넣어줍니다.

MyMemo 는 예시를 위해 만든 가장 간단한 클래스입니다.

이전 학습내용과 같이 ArrayList 는 제네릭 클래스를 사용하고 있습니다. Integer 같은 Wrapper 객체부터 온각 객체를 ArrayList로 만들어 줍니다.

일단 MyMemo 가 생성되면 ArrayList에 추가하는데 add 메소드가 필요하고 remove 는 삭제할 수 있습니다. 삭제할 대상을 찾기 위해서는 index 를 사용할 수 있습니다. index는 데이터가 붙어서 나열 되기 때문에 for 루프만으로도 검색 대상을 찾아낼 수 있습니다.

마지막 출력 부분은 그냥 출력하면 됩니다. 향상된 for 문을 사용하면 어렵지 않습니다.

add 는 요소를 삽입하게 해주는데 add에 인덱스를 추가하는 오버로딩을 사용할 수 있습니다.

요약

자바 ArrayList에 대해서 알아봤습니다. 막상 코드를 실습해보면 별로 어렵지 않다는 것을 알 수 있는데요. 자료구조를 잘 몰라도 추가한다는 아이디어 정도는 어렵지 않습니다.

최근의 많은 프로그래밍 언어가 함수의 직관적인 사용법을 추구합니다. add 추가해라 remove 지워라 같은 것들입니다. 자료구조는 원래 C언어로 알고리즘을 구현해봐야 좀 제대로 알 수 있는데요.

처음에는 그것까지 몰라도 add remove 메소드로도 사용할 수 있다면 충분합니다. 물론 실력을 쌓아나갈 수록 더 상세히 알아야 하는 부분이겠죠.

프로그래밍은 마지막엔 자기와의 싸움이기 때문에 알고자 하는 만큼 보입니다.

외부참고자료

Java ArrayList (w3schools.com)

ArrayList in java with example programs – Collections Framework (beginnersbook.com)

Java ArrayList (With Examples) (programiz.com)

Java – The ArrayList Class – Tutorialspoint

Guide to the Java ArrayList | Baeldung

자바 ArrayList 배열의 활용 자바 강좌

Leave a Comment