본문 바로가기
Android Studio/Android Studio

6. Android Studio, Kotlin - List 자료형

by Rosmary 2020. 7. 8.
728x90
반응형

 

Kotlin에서는 기본 자료형으로 배열(Array)을 제공한다. 배열은 동일한 자료형의, 유사한 정보를 하나의 이름으로 편하게 관리하기 위한 도구라고 생각하면 된다(물론, Kotlin에서는 여러 자료형을 하나로 묶는 배열 형태도 제공하긴 한다). 배열 내에 선언된 값들은 연속적인 메모리 공간에 할당되기 때문에, 미리 배열의 크기를 선언해야 하며, 선언 이후 크기 변경이 불가능하다는, 즉 새로운 배열값을 추가할 수 없다는 단점과 기존의 배열값 삭제 시, 배열값이 삭제된 메모리 공간은 텅 빈 공간으로 남게된다는 단점이 존재하게 된다. 

 

반면, List는 포인터를 사용하여 다음 값이 위치한 메모리 주소를 가리키기 때문에, 메모리의 불연속적인 공간에도 할당이 가능하다. 따라서, List의 경우, 값의 추가와 삭제가 용이하며 이 과정에서 메모리의 소모도 Array만큼 극심하게 나타나지 않는다. 

 

Kotlin의 경우, Array와 List 자료형을 모두 지원한다. 지금부터는 List 자료형의 선언 및 사용 방법에 대해 하나씩 포스팅하려 한다.

 

 

1. List 자료형

 

(1) List 자료형의 선언

 

List 자료형의 선언은 Array 선언과 유사하다. Array<자료형> = Array 대신 List<자료형> = LIst를 작성하면, List 자료형 선언이 완료된다. 

 

위와 같은 방식으로 list 선언 시, Array와 동일하게 List의 크기와 초기값을 입력할 수 있다. 

 

List 값의 자료형을 생략하고 작성하는 것도 가능하다.

 

 

혹은 바로 LIst 값을 입력하기 위해, 아래와 같이 List<자료형> 포맷을 삭제하고 listOf 만으로 List를 선언하는 것도 가능하다.

 

예시에서는 숫자만 넣었지만, 위와 같은 방식은, 여러 자료형을 List 값으로 선언할 수 있다. 단, 다양한 자료형이 포함된 List는 선언 이후, 값의 추가가 진행되지 않는다.

 

Array의 경우, println으로 배열 자료형의 변수명을 입력하면 해당 값의 내용이 출력되지 않은 반면, LIst 자료형은 println() 함수 사용 시, 위와 같이 List 내에 선언된 값들이 대괄호[] 내에 묶여 출력되는 것을 확인할 수 있다.

 

 

(2) List 자료형의 값 추가/삭제: mutableLIst, add(), remove(), removeAt()

 

List에 자료를 추가하거나 제거하는 작업은, List 객체에 정의된 메소드(함수)를 사용하여 진행한다. 단순히 값을 추가하고자 할 때는 add() 메소드를, 값을 제거하려면 remove() 메소드를 사용하면 된다. 단, 주의해야 할 점이 있는데, List 선언을 위와 같이 List 또는 listOf로 진행한 경우, 아래와 같이 에러가 난다.

 

 

해당 에러를 확인해보면 아래와 같은 문구가 나타난다.

 

 

Kotlin에서 제공하는 List 자료형도, 함부로 값을 변경하지 못하게 설정되어 있다. 만약 값을 변경해야 할 List 자료형을 생성해야 한다면, listOf로 List를 선언하는 것이 아니라, mutableListOf로 List를 선언해야 한다. 혹은 List

 

 

 

add()와 remove() 메서드의 인자값은 추가 또는 삭제할 값을 입력해주면 된다. 잘 보면 괄호 안에 element라는 회색 글씨가 보이는데, 이는 List 내의 배열값을 의미하는 용어다. 만약, List 내의 특정 값이 아니라, 특정 위치(index)에 있는 값을 제거하고자 한다면 다음과 같이 removeAt()이라는 메소드로 코드를 작성해주면 된다. removeAt() 메소드의 인자값은 List의 index(순서)를 입력해주면 된다.

 

 

반대로, 특정 위치에 값을 추가하고 싶을 때는 add() 메소드에서 인자값을 하나 추가하여 사용하면 된다. 추가되는 인자값은 index 번호인데, add( #index , 추가할 값 ) 형태로 입력해주면 된다.

 

 

(3) 미리 선언된 두 List의 병합: (+) 연산자와 plus() 메소드

 

연산자 +를 이용해, 만들어진 두 LIst를 병합한 결과를 출력하는 것도 가능하다.

 

 

혹은 + 연산자 대신, plus() 메소드를 사용할 수도 있다. plus() 메소드는 List 객체에 사용할 수 있는 메소드인데, 특정 List의 뒤에 다른 List를 추가할 수 있도록 만드는 기능을 가진다. 

 

---------------------------------

{기존LIst}.plus({추가할LIst})

---------------------------------

 

 

연산자나 plus() 메소드를 이용해, 두 List를 합친 새로운 List를 만드는 것도 가능하다. 

 

 

 

단, 중간에 값이 추가되거나 변경된 List를 다른 List와 병합하여 새로운 List를 만드는 과정에서는 정확한 결과값이 나타나지 않는데, 필자도 이 이유에 대해서는 조금 더 찾아봐야 한다.

 

필자는 마지막 println(list)의 결과값이 [128, 2, 3, 4, Hello...]로 나오기를 원했다만... 원인을 찾는대로 추가 포스팅할 예정이다.

 

 


 

이번 포스팅에서는 List의 선언 및 MutableList에서 사용가능한 여러 메소드를 이용하여, List의 값을 추가/제거하는 과정에 대해 알아보았다. 그런데, 필자가 본 포스팅을 작성하면서 이런 저런 자료들을 참고하다보니, Kotlin은 Array와 List 외에도 자료를 효과적으로 정리할 수 있도록 만드는 또다른 자료형이 존재하는 것을 알게 되었다. Map과 Set이라고 불리는 녀석들인데, 이놈들에 대한 정보는 다음 포스팅에서 알아보려 한다.

 

 

Fin.

 

 

 

 

반응형

댓글