본문 바로가기

Android Studio (Kotlin)

코틀린 컬렉션과 예외처리

컬렉션 API

filter

  • Collection을 반복해서 주어진 람다에 각 원소를 넘겨주고 해당 조건에 맞는 원소만 필터링하는 기능
  • filter 안의 조건문을 만족하는 원소로 이루어진 새로운 collection 반환
data class Person(val name: String, val age:Int)
fun filterTest(){

	val list = listOf(1,2,3,4)
    println(list.filter{it%2==0}) //짝수만 필터링
    
    val peoples = listof(Person("안드로이드",30), Person("당근걸", 25))
    val filtered = peoples.filter{it.age>=30}
    filtered.forEach{
    	println(it)
    }
}

map

  • 각 원소를 원하는 형태로 변환하는 기능을 하며, 변환한 결과를 모아서 새 컬렉션을 반환한다.
  • 원본 리스트와 원소 개수는 동일하고, 각 원소는 주어진 람다에 따라 변환된 값을 사용
fun mapTest(){
	//각 원소의 제곱으로 모인 리스트를 만드는 map 예제
    val list = listOf(1,2,3,4)
    println(list.map{it*it})
    
    val people = listOf(Person("홍길동",29), Person("당근걸",25))
    val mapped = people.map{it->it.name} //Person 리스트를 name 리스트로 바꾼다
    mapped.forEach{
    	println(it)
    }
}

filter와 map의 연계

fun mapWithFilterTest(){
	val peoples = listOf(Person("홍길동",35), Person("당근걸",25))
    println(peoples.filter{it.age>=30}.map{it.name}) //나이 30세 이상인 사람의 이름 목록
    
    //나이가 가장 많은 사람의 이름을 알고 싶을 때, 비효율적코드
    people.filter{it.age == peoples.maxByOrNull(Person::age)!!.age} 
    
    //효율적 코드
    val maxAge = peoples.maxByOrNull(Person::age)!!.age
    val maxAgePeople = peoples.filter{it.age==maxAge}
    println(maxAgePeople)
}

Broadcast receiver

Broadcast receive

  • 시스템이나 다른 앱에서 보내는 브로드 캐스트 메시지를 받아서 처리하는 것

Broadcase receiver 등록 방식에 따른 종류

 

정적 리시버

  • AndroidManifest.xml 파일에 등록되며 라이프사이클과 무관하게 동작
  • 앱이 설치되면 즉시 사용 가능하며 등록과 해지가 자유롭지 못하다.
  • BroadcastReceiver를 상속받아 구현
  • manifest.xml 내부에 <receiver> 태그 속성으로 receiver 추가, 수신받을 intent에 대한 정보를 intent-filter 내부에 선언

동적 리시버

  • Activity와 같은 컴포넌트에서 프로그래밍적으로 등록하며 라이프사이클 내에서 등록 및 삭제 처리 필요
  • 해당 코드가 실행될 때 사용 가능하며 코드 내에서 필요에 따라 등록 및 삭제 가능

'Android Studio (Kotlin)' 카테고리의 다른 글

contentResolver를 이용한 연락처 저장  (0) 2022.04.14
Kotlin 기본 문법  (0) 2022.04.04
Kotlin 클래스  (0) 2022.04.03
안드로이드 UI 기본  (0) 2022.04.03
Android Architecture  (0) 2022.04.03