이 포스팅은 고돈호 님의 이것이 안드로이드다 with 코틀린(한빛미디어)을 기반으로 작성되었습니다.

1.1 배열

배열이란 여러 개의 값을 담을 수 있는 자료형이다. 선언하는 형태는 다음과 같다.

var 변수 = Array(개수)

배열 객체는 자료형에 따라 Int, Double, Char 등의 자료형을 Array뒤에 붙여서 만든다. 각각 다음과 같다.

var IntegerArray = IntArray(5)
var LongArray = LongArray(5)
var CharArray = CharArray(5)
var FloatArray = FloatArray(5)
var DoubleArray = DoubleArray(5)

위의 코드에서 5는 각각 자료형에 따른 공간을 5개 할당하라는 의미이며 이를 표현하면 다음과 같다.

[0] [1] [2] [3] [4]

즉 다른 언어와 마찬가지로 0번째 인덱스부터 시작하며 n-1까지의 공간을 할당하는 것을 알 수 있다.


1.2 문자 배열에 빈 공간 할당하기

String은 기본 타입이 아니므로 배열에서 String을 자료형으로 사용하기 위해서는 다음과 같이 사용해야 한다.

var stringArray = Array(5, {item->""})

1.3 값으로 배열 공간 할당하기

다음처럼 arrayOf 함수를 사용하여 String을 직접 할당할 수도 있다.

var dayArray = arrayOf("SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT")

1.4 배열에 값 입력하기

1. 다른 언어와 유사한 방법

배열명[인덱스] = 값

2. set 함수를 사용한 방법

배열명. set(인덱스, 값)

1.5 배열에 있는 값 꺼내기

배열에 값을 입력하는 것 과 마찬가지로 인덱스로 접근하는 법과 함수를 이용한 방법이 있다.

배열명[인덱스]
배열명.get(인덱스)

ex) 배열 intArray의 다섯 번째 값을 fifthValue에 저장 

var fifthValue = intArray[4] // 인덱스의 시작이 0 이므로
var fifthValue2 = intArray.get(4) // 인덱스의 시작이 0 이므로

1.6 전체 예시 코드

package kr.co.kibeom.array

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 1. 기본 타입 배열 선언
        var IntegerArray = IntArray(5)
        var LongArray = LongArray(5)
        var CharArray = CharArray(5)
        var FloatArray = FloatArray(5)
        var DoubleArray = DoubleArray(5)

        // arrayOf 함수를 사용하여 선언과 동시에 값 입력
        var intArray = intArrayOf(1, 2, 3, 4, 5, 6)

        // 2. String형 배열 선언
        var stringArray = Array(10, {item->""})
        // arrayOf 함수를 사용하여 값의 직접 입력을 통한 배열 생성
        var dayArray = arrayOf("SUN", "MON", "TUE", "WED", "THU", "SAT")

        // 3. 앞에서 선언한 배열 IntegerArray 변수에 값 넣기
        // 인덱스를 통해 사용하는 방법
        IntegerArray[0] = 10
        IntegerArray[1] = 20
        IntegerArray[2] = 30
        // set 함수를 사용하는 방법
        IntegerArray.set(3, 40)
        IntegerArray.set(4, 50)

        // 4. 값 변경해보기
        intArray[2] = 30
        intArray.set(3, 40)

        // 5. 배열 값 사용해보기
        var thirdValue = intArray[2] // 인덱스의 시작이 0 이므로
        Log.d("Array", "세번째 intArray의 값은 ${thirdValue} 입니다.")
        var fourthValue = intArray.get(3) // 인덱스의 시작이 0 이므로
        Log.d("Array", "네번째 intArray의 값은 ${fourthValue} 입니다.")

        // 6. 변수에 담지 않고 바로 출력
        Log.d("Array", "첫번째 intArray의 값은 ${intArray[0]} 입니다.")
        Log.d("Array", "두번째 intArray의 값은 ${intArray[1]} 입니다.")
    }
}

2.1 컬렉션

여러 값을 넣을 수 있는 자료형에는 배열과 컬렉션이 존재한다. 이 컬렉션은 동적 배열이라고 불리며 컬렉션의 종류에는 리스트, 맵, 셋이 있다. 각각은 다음과 같다.

 

리스트

저장되는 데이터에 인덱스를 부여한 컬력션이며 중복된 값을 입력할 수 있다. 코틀린에서 동적으로 리스트를 사용하기 위해서는 mutable이라는 접두사를 붙인다.  사용법은 다음과 같다.

 

리스트 생성하기: mutableListOf

위처럼 mutableListOf를 사용하면 동적으로 배열 리스트가 생성된다.

var list = mutableListOf("MON", "TUE", "WED")

리스트에 값 추가하기: add

mutableList.add("THU")

add의 결과는 다음과 같다.

MON TUE WED THU

리스트에서 입력된 값 꺼내기 get 함수

var value = mutable.get(1)

리스트 값 수정하기 set 함수

mutableList.set(1, "값 수정")

리스트에 입력된 값 제거하기 removeAt

mutableList.removeAt(1)

빈 리스트 사용하기

빈 리스트를 사용하는 방법은 다음과 같다.

var 변수명 = mutableListOf<자료형>()
var stringList = mutableListOf<String>()

컬렉션 개수 가져오기: size

size를 통해 컬렉션의 개수를 가져올 수 있다.

mutableList.size

3.1 셋

셋은 우리가 흔히 하는 집합의 구조이며 그에 따라 집합을 허용하지 않는 리스트입니다. 인덱스로 조회할 수 없으며 get 함수를 지원하지 않는다는 특징이 있습니다. 다음과 같이 사용할 수 있습니다.

var set = mutableSetOf<자료형>()

빈 셋으로 초기화하고 값 입력하기

set = mutableSetOf<String>()
set.add("MON")
set.add("TUE")
set.add("WED")
set.add("MON") // 이미 MON이 존재하므로 에러

셋 출력하기

셋은 앞서 말씀드렸듯 인덱스로 조회하는 함수가 없기 때문에 특정 위치의 값을 직접 사용할 수 없다. 따라서 한 번에 출력하기 기능을 사용한다.

Log.d("SET", "Set 전체 출력 = ${set}")

셋 삭제하기

셋은 값이 중복되지 않는 특성 때문에 다른 리스트와 반대로 값을 직접적으로 삭제할 수 있다.

set.remove("MON")

전체 예시 코드

package kr.co.kibeom.collection

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 1. 셋 생성하고 값 추가하기
        var set = mutableSetOf<String>()
        set.add("MON")
        set.add("TUE")
        set.add("WED")
        set.add("MON") // 중복된 값 add 불가

        // 2. 전체 데이터 룰력
        Log.d("Collection", "Set 전체 출력 = ${set}")

        // 3. 특정 값 삭제하기
        set.remove("MON")
        Log.d("Collection", "Set 전체 출력 = ${set}")
    }
}

실행결과는 다음과 같다.


4.1 맵

맵은 다른 언어에서도 사용하는 자료구조 이므로 쉽게 알 수 있습니다. 맵은 키와 값으로 이루어져 있으며 해당하는 키에 값이 정해지는 구조입니다. 키, 값을 모두 String으로 정하면 다음과 같습니다.

var map = mutableMapOf<String, String>()

값 추가하기

var map = mutableMapOf<String, String>()
map.put("key1", "MON")
map.put("key2", "TUE")
map.put("key3", "WED")

맵 수정하기

map.put("key2", "FRI")

맵 삭제하기

map.remove("key2")

이 방식으로 그림으로 표현하면 다음과 같다.

key1/MON key2/TUE key3/WED

 

key1/MON key3/WED

전체 예시

 

 package kr.co.kibeom.collection

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 맵 생성하기
        var map = mutableMapOf<String, String>()
        // 값 추가
        map.put("key1", "MON")
        map.put("key2", "TUE")
        map.put("key3", "WED")

        // 값 사용
        var variable = map.get("key2")
        Log.d("Collection", "key2의 값은 ${variable} 입니다.")

        // 값 수정
        map.put("key2", "FRI")
        Log.d("Collection", "key2의 값은 ${map.get("key2")} 입니다.")

        // 값 삭제
        map.remove("key2")

        // 삭제한뒤 key2  없으므로 null 출력
        Log.d("Collection", "key2의 값은 ${map.get("key2")} 입니다.")

    }
}

 


5.1 이뮤터블 컬렉션

이뮤터블이란 뮤터블과 반대 즉 변경할 수 없는 리스트를 말한다. 값을 변경할 수 없기 때문에 add, set 등의 함수는 사용할 수 없고 최초로 입력된 값만 사용 가능하다. 즉 수정, 추가, 삭제가 불가능하다.

var list = listOf("1", "2")

'안드로이드 앱 개발' 카테고리의 다른 글

6. 함수  (0) 2021.12.20
5. 반복문  (0) 2021.12.19
3. 조건문  (0) 2021.12.12
2. 변수  (0) 2021.12.12
1. 코틀린의 기본적인 문법  (0) 2021.12.12

+ Recent posts