여행을 개발하다

ArrayList 본문

BackEnd/Java

ArrayList

yhtragramming 2019. 5. 15. 21:04

안녕하세요!

 

오늘 포스팅 할 내용은 'ArrayList'입니다.

 

배열의 길이는 정해져 있기도 하지만, 때에 따라서 유연하게 늘였다 줄였다 할 필요가 있습니다.

데이터가 추가되고 빠질 때마다 적당하게 메모리가 할당이 되어야 하기 때문이죠.

 

실제 실무에서도 불필요한 메모리 할당으로 메모리 누수 현상을 방지하기 위해,

배열의 길이는 대부분 정하지 않고 사용한다고 합니다.

 

Java는 이러한 상황에서 배열을 동적 할당하기 위해, ArrayList라는 클래스를 활용합니다.

그럼 ArrayList를 어떻게 활용하는지, 지금부터 살펴보겠습니다.


* 왜 동적 할당이 필요할까...?

본격적인 설명에 앞서, 왜 배열의 동적 할당이 필요한지 예제를 통해 살펴보겠습니다.

1과 2를 더한 값인 3을 출력하는 sum(arg)라는 메소드를 만든다고 가정하겠습니다.

정수형 변수 i와 j를 인수로 넘겨 받아 합계를 리턴하는 메소드를 완성했습니다.

그리고 실행하였습니다.

역시 결과도 잘 나오네요!!

 

그런데 문제가 생겼습니다.

이제는 1, 2, 3을 더해주는 메소드가 필요해졌습니다.

그래서 다시 3개의 정수형 변수를 인수로 입력 받는 sum이라는 메소드를 생성하고 실행하였습니다.

그런데, 이렇게 무한히 인수가 늘어날 때도 계속 새로운 메소드를 정의해야만 할까요?

 

하라면 할 수는 있겠지요. 다음과 같이...

 

이렇게 결과도 잘 나오고요!!

 

하지만 개발자의 입장에서는 지치는 것이 사실이고, 보다 효율적인 프로그래밍 전략이 필요해진 것이죠.

입력 받은 인수의 숫자에 따라 자유롭게 배열의 길이가 늘어나고 줄어든다면 얼마나 좋을까요?

 

비록 메소드의 예제로 설명하긴 했지만, 이러한 문제들 때문에 배열의 동적 할당이 필요합니다.

* ArrayList

1. 선언 및 형식

- 선언 : ArrayList<Generic> 리스트 이름 = new ArrayList<Generic>();

- 형식 :

 

여기서 Generic이란 해당 리스트에 추가될 요소들의 자료형을 사전에 정의함으로써,

리스트의 요소들이 강제로 Object 타입의 형으로 변환되는 것을 방지하기 위해 고안되었습니다.

 

JDK 1.5부터 Generic이 추가되었으며, 덕분에 프로그래머가 형 변환을 위해 캐스팅 작업을 따로 해야 하는 번거로움을 덜 수 있게 되었습니다.

 

제네릭은 기존의 일반 변수를 'int 혹은 char 변수명'으로 선언했던 것과는 달리, 'Integer, Character'등으로 full-name으로 선언해야 합니다.

String

 

Character

 

2. ArrayList 요소의 추가

ArrayList에 새로운 요소를 추가할 때는 '리스트명.add(요소 값)'으로 추가하면 됩니다.

단, 자료형은 반드시 지켜주셔야 합니다.

 

선언했던 자료형과 다른 자료형을 가진 요소가 추가되면 다음과 같이 ERROR가 발생합니다.

 

3. ArrayList 요소의 삭제

ArrayList의 요소를 삭제하기 위해서는 '리스트명.remove(인덱스 값)'을 입력하여 실행하면 됩니다.

remove의 인수로 넣는 것이 '값'이 아닌 '위치 값'이라는 것에 주의하셔야 합니다.

 

'list.remove(1)'은 [3,4,5,3,3]이었던 ArrayList 자료형 list에서 1번째 값인 '4'을 삭제하라는 의미입니다. 실행 결과, 제일 먼저 추가했던 4가 정상적으로 삭제되었습니다.

(배열의 인덱스는 0부터 시작한다는 것. 다들 기억하고 계시죠?)

 

4. ArrayList의 요소 값 얻어오기

ArrayList의 요소 값을 얻어오는 방법은 일반적인 Array와는 조금 다릅니다.

일반적인 Array의 요소 값을 출력하는 명령으로 ArrayList의 요소 값을 출력해보겠습니다.

list의 첫 번째 인수를 가지고 오기 위해 'list[1]'을 입력했는데, 바로 ERROR 메시지가 나타나네요!

 

ArrayList는 이 대신에 '리스트명.get(인덱스 값)'을 사용하여 요소 값을 불러옵니다.

 

5. ArrayList의 크기 얻어오기

일반 배열의 크기를 얻어오기 위해서는 '배열.length' 메소드를 주로 사용하곤 했습니다.

하지만 ArrayList의 경우에는 '.length()' 대신에 '.size()'를 사용합니다.

 

6. ArrayList의 특정 인덱스의 값을 다른 값으로 치환하기

기존의 입력된 ArrayList의 요소 값을 다른 값으로 대체하는 것도 가능합니다.

이는 '리스트명.set(치환하고 싶은 인덱스, 변경하고 싶은 값)'으로 실행하면 됩니다.

 

대표

사진 설명을 입력하세요.


지금까지 ArrayList에 대해 알아보았습니다.

ArrayList는 위에 설명된 것 이상으로 많은 역할을 할 수 있습니다.

 

특히, 하나의 배열 그 자체를 하나의 인수로 받아 저장하는 어마어마한 기능도 합니다.

그래서 대량의 데이터 베이스나 튜플, 집합형 자료형을 처리할 때도 꽤나 유용하게 사용했습니다.

 

추가적인 내용이 필요하면 틈틈이 업로드하겠습니다.

 

감사합니다 : )

'BackEnd > Java' 카테고리의 다른 글

[Java] Thread (스레드)  (0) 2021.08.15
[Java] Wrapper Class(래퍼 클래스)  (0) 2021.08.04
인터페이스(Interface)  (0) 2019.05.14
Diamond of Death 현상 (다중 상속의 문제점)  (0) 2019.05.14
클래스의 상속(Inheritance)  (0) 2019.05.14
Comments