대딩 기록(~22.01)/안드로이드 공부노트

코틀린 기본 구문 (컬렉션, 람다)

문과 해달 2021. 8. 18. 14:46

*참고저서 <오준석의 안드로이드 생존코딩>

1. 컬렉션(Collection)

자바에서와 마찬가지로 컬렉션은 유용한 자료구조들을 제공한다.

 

1)리스트 (List)

배열처럼 자료형을 순서대로 가지고 있는 자료구조로, 추가, 삭제, 교체가 더욱 간편하다.

val foods:List<String> = listof("라면","갈비","밥")

// val foods = listof("라면","갈비","밥")도 가능

val drinks = mutableListOf("콜라","물","마운틴듀")
drinks.add("우유") // 추가
drinks.removeAt(0) // 삭제
drinks[1] = "녹차" // 교체

listOf를 사용하여 작성하고, 자료형을 생략할 수 있다. 추가,삭제,교체가 가능한 리스트를 만들 경우

mutableListOf를 사용한다.

 

2)맵 (Map)

키와 값으로 이루어진 키 중복불가의 자료구조이며, 파이썬의 딕셔너리를 생각하면 된다.

: 대신 to 를 사용한다는 것만 제외한다면, 사용방법은 거의 같다.

val map = mapOf("a" to 1, "b" to 2)

val map2 = mutableMapOf("a" to 1, "b" to 2)

map2["a"] = 3 //교체
map2["c"] = 4 //추가

 

3)세트 (Set)

파이썬의 세트처럼, 중복을 허용하지 않는 자료구조이다. 맵에서 키만 모아놓은 것과 같다고 할 수 있다.

val set = setOf("a" , "b")

val set2 = mutableSetOf("a", "b")

set2.add("c") //추가
set2.remove("c") //삭제

println(set2.contains("b")) // true

 

2. 람다식 (lambda)

람다식은 같은 함수를 더욱 간결하게 표현할 수 있는 문법이다.

fun add(x:Int, y:Int): Int {
	return x+y
}

fun add(x: Int, y: Int) = x + y

var add = {x: Int, y: Int -> x+y}
pirntln(add(2,5)) // 7

가장 위에 일반적인 형태의 함수가 있고, 아래는 람다를 이용한 함수들이다.

 

SAM변환은 하나의 추상메서드를 가진 인터페이스를 오버라이드할 때 이를 더 간결하게 표현하는 방법이다.

button.setOnClickListener(object: View.OnClickListener) {
  override fun onClick(v: View?) {
    //클릭 시 처리
  }
}

다음과 같은 코드를

button.setOnClickListener {
	it.visibility = View.Gone //클릭 시 처리
}

이렇게 간결하게 쓸 수 있다. it이라는 키워드는 위쪽 코드의 v인수를 자동으로 반환한다.