Seongwon Lim

[Java] 리스트(List)와 배열(Array) 차이점 본문

Java

[Java] 리스트(List)와 배열(Array) 차이점

limsw 2022. 5. 25. 18:00
반응형

배열(Array) 이란?

자바에서 배열이란 자료형의 종류가 아니라 자료형의 집합을 의미한다.

조금 더 추가적으로 설명하면 배열이란 동일한 Data Type의 데이터를 연속된 공간에 저장하기 위한 자료구조의 종류로 생각할 수 있다.

배열 초기화 방법

int[] odds = {1, 3, 5, 7, 9};
String[] weeks = {"월", "화", "수", "목", "금", "토", "일"};

배열은 자료형 타입 바로 옆에 [] 기호를 사용하여 표현할 수 있으며, 위 코드처럼 int 자료형의 배열은 int[] 로 표현한다.

 

이번에는 배열의 특징을 살펴보자.

1. 길이 불변성

배열은 초기화 시 배열의 길이를 정의해야 하며, 정의된 길이는 변경할 수 없다는 특징이 있다.

배열의 길이는 타입 뒤에오는 [] 안에 정의한다.

String[] weeks = new String[7];
weeks[0] = "월";
weeks[1] = "화";
weeks[2] = "수";
weeks[3] = "목";
weeks[4] = "금";
weeks[5] = "토";
weeks[6] = "일";

만약 배열을 초기화 할 때 길이를 지정하지 않으면 컴파일 시 오류가 발생한다.

String[] weeks = new String[]; // 배열 초기화 시 길이를 지정하지 않았으므로 컴파일 오류가 발생

2. 배열 접근 방법

자바에서 배열에 접근할 때에는 인덱스(Index) 접근을 통해 배열의 데이터에 접근할 수 있다.

여러 언어와 마찬가지로 자바에서 배열 또한 인덱스는 0부터 시작한다.

String[] weeks = {"월", "화", "수", "목", "금", "토", "일"};
System.out.println(weeks[3]); // 4번째 데이터인 목요일을 반환한다.

반복문을 이용하여 배열에 접근하고 싶은 경우에는 배열.length를 이용하여 인덱스를 순차적으로 접근할 수 있다.

 

예를 들어,

String[] weeks = {"월", "화", "수", "목", "금", "토", "일"};
for (int i=0; i<weeks.length; i++) {
    System.out.println(weeks[i]);
}

위 코드에서 weeks 배열의 크기는 7 이므로 weeks.length는 7을 반환하게 된다.


이번에는 자바의 리스트(List)를 살펴보자.

리스트(List) 란?

리스트는 배열과 비슷한 자바의 자료형이지만 배열보다 편리한 기능을 많이 가지고 있는 자료구조이다.

그러면 리스트와 배열의 차이점은 무엇일까? 리스트와 배열의 가장 큰 차이점은 리스트는 크기가 정해져 있지 않고 동적으로 변할 수 있다는 것이다.

 

프로그래밍을 할 때 자료구조의 크기를 알 수 없는 경우가 있다. 데이터가 추가되는 경우도 있고 반대로 제거되는 경우도 있기 때문이다.

그러나, 리스트는 메모리 공간이 허용하는 한 데이터를 동적으로 추가,삭제 할 수 있다.

리스트 초기화 방법

이번 예제에서는 리스트의 대표적인 타입인 ArrayList에 대해서 알아보고자 한다.

 

import java.util.ArrayList
ArrayList myList = new ArrayList();

먼저, 리스트의 인터페이스인 ArrayList를 사용하기 위해서는 해당 라이브러리를 불러와야 한다.

또한, 리스트는 배열과 달리 객체를 생성할 때 길의를 정의해주지 않는다는 특징이 있다.

 

이번에는 리스트에서 제공하는 여러가지 메소드를 살펴보자.

1. add()

myList.add("A");
myList.add("B");
myList.add("C");

리스트에 값을 추가하기 위해서는 add() 메서드를 사용하면 된다. 위처럼 값을 추가하는 경우는 0번 인덱스부터 차례대로 데이터가 추가된다.

 

만약 특정 위치에 값을 추가하고 싶은 경우는 첫번째 인자에 위치를 명시하면 된다.

myList.add(0, "D");    // 0번째 인덱스에 "D" 추가
myList.add(3, "E");    // 3번째 인덱스에 "E" 추가

2. get()

리스트의 데이터를 불러오기 위해서는 get() 메서드를 사용하면 된다.

String first = myList.get(0).toString(); // 0번째 인덱스 반환
String first = myList.get(5).toString(); // Out of Index 이므로 컴파일 에러

위처럼 특정 get() 메서드에 반환할 인덱스 값을 명시하면 된다. 그러나 데이터가 없는 인덱스에 접근할 경우 에러가 발생할 수 있으니 유의하자.

3. size()

리스트의 크기를 알고 싶은 경우에는 리스트명.size()를 이용하여 구할 수 있다.

System.out.println(myList.size());

4. contains()

사용자가 찾고자 하는 값이 리스트에 들어있는 지 알고 싶은 경우에는 contains() 메서드를 이용하여 확인할 수 있다.

System.out.println(myList.contains("F"));

contains() 메서드의 리턴 타입은 boolean이며 위 코드의 경우 우리가 만든 리스트에는 F라는 문자가 없으므로 false를 반환한다.

5. remove()

리스트의 데이터를 삭제하고 싶은 경우에 사용하는 메서드이다. 데이터를 삭제하는 방법은 2가지가 있다.

  • 인덱스 값을 정의하여 해당 위치에 저장된 데이터를 제거
  • 동일한 Object를 인자로 넘겨 해당 Object가 리스트 내에 존재하면 제거

먼저, 첫번째 방법을 살펴보자.

System.out.println(myList.remove(0));

위 코드를 실행시켰을 때 결과는 제거된 데이터를 반환한다. 우리 예제에서 0번째 인덱스는 "D"가 저장되어 있으므로 출력 결과는 "D"가 출력된다.

 

이번에는 두번째 방법을 살펴보자.

System.out.println(myList.remove("A"));

객체를 인자로 넘겨주면 결과는 Boolean을 반환한다. 예제에서 리스트에 "A"라는 문자가 존재하기 때문에 위 코드의 출력 결과는 true가 반환된다.


출처

Comments