본문 바로가기

프로그래밍 언어/코틀린_쌩초보를 위한 기초

쌩초보를 위한 기초_20_컬렉션 collection_Array && List

컬렉션 collection : 더미

 

프로그램에서 다루는 데이터 타입(String, Int, Char 등)을 앞에서 알아보았다.

데이터를 다룰 때 같은 타입을 많이 처리해야 하는 경우가 있다.

이것을 프로그래밍에서는 컬렉션(collection, 더미, 무리)이라고 것으로 처리한다. 

 

컬렉션은 프로그래밍에서 수 또는 항목이 여러 개 있는 더미(모임) 상태를 나타내는 말이다.

이런 컬렉션 상태를 처리하기 위해서 코틀린의 표준 라이브러리(미리 만들어 놓은 함수들)를 제공하고 있다.

컬렉션에서 다루는 객체(대상)들은 elements(요소) 또는 item(항목)이라고 부른다.

 

변수에 타입(Type; 데이터형)이 있는것 처럼 컬렉션에도 타입이 있다.

또한 변수를 선언할 때 불변(immutable)인 것은 val로 선언하고

변할 수 있는 것(mutable)은 var을 사용하여 선언하는 것 처럼 컬렉션도 이것을 구분해야 한다.

 

아래는 컬렉션의 기본 타입이다.

 

  • Array (배열) : 가장 간단한 컬렉션 타입
  • List (목록) : 인덱스 번호로 요소(항목)에 접근할 수 있는 순서 집합
  • Set (세트) : 고유한 요소의 집합
  • Map (지도) or Dictionary : key(고유키)와 value(값)의 쌍으로 이루어진 집합

 

Array(배열) : arrayOf(values)

 

배열을 만들려면 arrayOf(값,)을 사용하면 된다.

 

 

위와 같이 arrayTest라는 변수를 만들고

배열을 만드는 arrayOf 함수로 정수값을 넣어서 변수를 출력하면 예상과 다른 결과가 나타난다.

이것은 배열(Array)이 객체(object)이기 때문에 객체의 class와 hash code를 나타내는 것이다.

이것에 대해서는 다음에 배우기로 하고 어쨌든 배열에 들어있는 값들을 출력하려면 아래와 같이 한다.

(앞 글의 코드 예제에 있었다.)

 

forEach는 '각각에 대해' 라는 뜻이다.

forEach() 함수를 실행하는 것은 람다표현을 사용했다.

람다 표현은 { 인자 -> 실행코드 } 형태를 사용한다고 [기초12]에서 설명했다.

i는 아무 변수나 사용하면 되지만 여기서는 item(항목)의 첫글자를 따서 i로 했다.

print()함수는 줄바꿈을 하지 않고 출력한다.

 

위 코드의 뜻은 다음과 같다.

 

변수arrayTest에 forEach함수로 {각각의 인자를 -> 출력하라(인자를) }

 

위에서 작업한 내용은 각각의 인자를 반복해서 출력했으므로 for 반복문을 사용해서 나타낼 수도 있다.

" 변수arrayTest에 있는 범위에서 출력을 반복하라"를 반복문으로 표현하면 다음과 같다.

 

배열을 만드는 다른 방법은 빈 배열을 만드는 것이다.

아래와 같이 size(크기)만 정해서 빈 배열을 만들 수 있다.

 

 

배열의 사용

 

배열의 항목(요소)은 index를 사용하여 위치를 파악한다.

인덱스(index)는 0부터 시작하는데 이것은 컴퓨터의 비트가 가장 작을 때가 0이기 때문이다.

 

배열에서 첫번째 값(first value)을 출력하려면 아래와 같이 코딩한다.

 

 

배열의 값을 바꾸려면 아래와 같이 코딩한다.

 

 

위와 같이 값을 다시 고칠 수 있는 컬렉션을 mutable collection이라고 한다.

반면에 값을 재할당할 수 없는 컬렉션을 immutable collection이라고 한다.

 

배열에는 많은 속성이 있다. 예를 들면

배열의 크기(size)를 알 수 있는 array.size

배열의 마지막 인텍스 번호를 알 수 있는 array.lastIndex

 

항목의 개수는 5개, 마지막 인덱스 번호는 4 (0부터 시작하므로)임을 알 수 있다.

 

그리고 배열과 비슷한 특징을 가진 varags라는 것도 있는데 var(변수)와 ags(arguments;전달인자)를 합한 기능이 있는것 같다. 다음에 기회가 있으면 다루기로 한다.

 

List (리스트)

 

List는 Array(배열)의 동적(dynamic) 형태이다.

동적이라는 의미는 메모리에 요소(elements)를 분산할 수 있어 매우 큰 데이터를 가질 수 있다는 뜻이다.

List는 mutable(변신 가능) 또는 immutable(변신 불가능) 둘 다 가능하다.

 

리스트를 하나 만들어 보자.

 

 

리스트가 담겨진 변수에 요소를 변경해서 넣어 출력해 보면 Array와는 달리 아래와 같이 에러가 난다.

 

이것은 List가 기본적으로 Immutable(변신 못함)이기 때문이다.

mutable로 바꾸려면 아래와 같이 mutableListOf를 사용해야 한다.

 

이번에는 Mutable 리스트로 다양한 작업을 해보자.

리스트에 요소를 추가할 때는 add를 사용한다.

 

 

리스트의 요소를 삭제할 때는 remove를 사용한다. 요소 값을 직접 넣어서 삭제한다.

 

리스트의 요소를 삭제할 때 요소의 인덱스 위치를 표시하려면 removeAt을 사용한다.

 

다음과 같이 추가하면 중복된 숫자가 생긴다.

 

만약 중복된 요소를 제거하고 고유한 요소를 유지하고 싶을 경우에는 Set 컬렉션을 사용한다.

set 컬렉션은 다음 글에서 알아본다.

끝.