4 분 소요

it

Kotlin에서 it 키워드는 람다 표현식에서 사용되는 암시적 이름(implicit name)입니다. 이것은 단일 매개변수를 갖는 람다 표현식에서 매개변수의 이름을 생략할 수 있게 해줍니다. 이를 통해 코드가 더 간결하고 읽기 쉬워질 수 있습니다.

val numbers = listOf(1, 2, 3, 4, 5)

// 일반적인 람다 표현식
numbers.forEach { number ->
    println(number)
}

// `it` 키워드를 사용하는 람다 표현식
numbers.forEach {
    println(it)
}


ROOM

Android jetpack의 일부인 지속성 라이브러리입니다. Room은 SQLite 데이터베이스 위에 있는 추상화 레이어입니다

프로그램

생성 할때 Control + O 하면 생명주기 관련 매서드르 호출할 수 있다.

  1. onCreate(): 시스템이 앱을 생성할 때 호출됩니다.
  2. onStart(): 앱이 화면에 표시되도록 하지만 사용자는 아직 앱과 상호작용할 수 없습니다.
  3. onResume(): 앱을 포그라운드로 가져오고 사용자는 이제 앱과 상호작용할 수 있습니다.

리컴포지션

상태가 변경되었을 수 있는 구성 가능한 함수를 Compose에서 다시 실행하고 업데이트된 UI를 만드는 것을 의미합니다

Android Jetpack

Andriod Jetpack 라이브러리는 뛰어난 Android 앱을 더 간편하게 개발하는 데 사용할 수 있는 라이브러리 모음입니다.

ViewMOdel

구성요소는 UI가 사용하는 상태를 보유하고 노출합니다

StateFlow

현재 상태와 새로운 상태 업데이트를 내보내는 관찰 가능한 데이터 홀더 흐름입니다

# by 속성 위임 정의

인터페이스는 구현하는 클래스가 준수해야 하는 계약으로서, 작업을 하는 방법이 아닌 해야 할 작업에 중점을 둡니다. 인터페이스의 경우 클래스가 인터페이스를 구현합니다. 클래스는 인터페이스에 선언된 메서드와 속성의 구현 세부정보를 제공합니다

KProperty는 선언된 속성을 나타내는 인터페이스이며, 이를 통해 위임된 속성의 메타데이터에 액세스할 수 있습니다

ReadWriteProperty

https://developer.android.com/codelabs/basic-android-kotlin-compose-classes-and-objects?hl=ko&continue=https%3A%2F%2Fdeveloper.android.com%2Fcourses%2Fpathways%2Fandroid-basics-compose-unit-2-pathway-1%3Fhl%3Dko%23codelab-https%3A%2F%2Fdeveloper.android.com%2Fcodelabs%2Fbasic-android-kotlin-compose-classes-and-objects#8

=======

주석

주석은 코드에 추가정보를 첨부하는 방법입니다.

@Json
val imgSrcUrl: String

@Volatile
private var INSTANCE: AppDatabase? = null

예시

  1. @Composable
    • 구성 가능한 함수
  2. @Preview
    • 미리 보기 함수

Modifier

상위 요소 레이아웃 내에서 UI 요소가 배치되고 표시되고 동작하는 방식을 UI 요소에 알려줍니다

리소스 구조

|번호|이름|역활| |—|—| —| |1 |drawable| 이미지 리소스용| |2 |minmap| 런처 아이콘| |3 |values| 문자열 리소스용|

프로젝트 리소는 는 R 클래스에서 생성된 리소스 ID로 액세스 할 수 있다

R.drawable.graphic
R.(서브디렉토리).(리소스ID)

인수

매개변수로 함수를 호출할 때 전달되는 값을 인수라고한다

UI 레이어

  1. UI 요소: 화면에 데이터를 렌더링하는 구성요소. 이러한 요소는 Jetpack Compose를 사용하여 빌드합니다.
  2. 상태 홀더: 데이터를 보유하고 UI에 노출하며 앱 로직을 처리하는 구성요소. 상태 홀더의 예로 ViewModel을 들 수 있습니다.

배열

배열은 동일한 유형의 순서가 지정된 데이터를 저장하고 크기가 고정되어 있습니다.

val rockPlanets = arrayOf<String>("Mercury", "Venus", "Earth", "Mars")

val gasPlanets = arrayOf("Jupiter", "Saturn", "Uranus", "Neptune")

// 배열 요소가 더할 수도 있다
val solarSystem = rockPlanets + gasPlanets 

 배열  접근 방법 
println(solarSystem[0])
println(solarSystem[1])
println(solarSystem[2])
println(solarSystem[3])
println(solarSystem[4])
println(solarSystem[5])
println(solarSystem[6])
println(solarSystem[7])

* 결과 
Mercury
Venus
Earth
Mars
Jupiter
Saturn
Uranus
Neptune
 dlfqn tnwjd 
solarSystem[3] = "Little Earth"

# 목록 (list) 목록은 크기 조절이 가능하고 순서가 지정된 컬렉션입니다.

List는 순서가 지정된 읽기 전용 항목 컬렉션과 관련된 속성과 메서드를 정의하는 인터페이스입니다. MutableList는 요소 추가 및 삭제와 같이 목록을 수정하는 메서드를 정의하여 List 인터페이스를 확장합니다.

fun main() {
    val solarSystem = listOf("Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune")
}

println(solarSystem.get(3))
println(solarSystem[2])

# 인덱스 호출
println(solarSystem.indexOf("Earth"))

# 반복물 선언 가능
for (planet in solarSystem) {
    println(planet)
}


# 수정 가능한 배열
val solarSystem = mutableListOf("Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune")

solarSystem.add("Pluto")  //마지막에 추가
solarSystem.add(3, "Theia")
solarSystem[3] = "Future Moon" // 수정
solarSystem.removeAt(9) //삭제 
solarSystem.remove("Future Moon") //직접 삭제

세트

세트는 순서가 지정되지 않은 컬렉션이며 중복 값을 포함할 수 없습니다.

val solarSystem = mutableSetOf("Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune")


맵 컬렉션

맵은 세트와 유사하게 작동하고 지정된 유형의 키와 값 쌍을 저장합니다.

왼쪽이 킵값 오른쪽이 숫자

val solarSystem = mutableMapOf(
    "Mercury" to 0,
    "Venus" to 0,
    "Earth" to 1,
    "Mars" to 2,
    "Jupiter" to 79,
    "Saturn" to 82,
    "Uranus" to 27,
    "Neptune" to 14
)

컬렉션을 사용한 고차 함수

  1. forEach() forEach()를 사용하여 컬렉션의 각 요소를 반복할 수 있습니다.
class Cookie(
    val name: String,
    val softBaked: Boolean,
    val hasFilling: Boolean,
    val price: Double
)

val cookies = listOf(
    Cookie(
        name = "Chocolate Chip",
        softBaked = false,
        hasFilling = false,
        price = 1.69
    ),
    Cookie(
        name = "Banana Walnut",
        softBaked = true,
        hasFilling = false,
        price = 1.49
    ),
    Cookie(
        name = "Vanilla Creme",
        softBaked = false,
        hasFilling = true,
        price = 1.59
    ),
    Cookie(
        name = "Chocolate Peanut Butter",
        softBaked = false,
        hasFilling = true,
        price = 1.49
    ),
    Cookie(
        name = "Snickerdoodle",
        softBaked = true,
        hasFilling = false,
        price = 1.39
    ),
    Cookie(
        name = "Blueberry Tart",
        softBaked = true,
        hasFilling = true,
        price = 1.79
    ),
    Cookie(
        name = "Sugar and Sprinkles",
        softBaked = false,
        hasFilling = false,
        price = 1.39
    )
)

fun main() {
cookies.forEach {
    println("Menu item: ${it.name}")
}
}
  1. map() map()은 종종 다른 데이터 유형의 컬렉션으로 컬렉션의 항목 형식을 지정하는 데 사용됩니다. ``` val fullMenu = cookies.map { “${it.name} - $${it.price}” }

println(“Full menu:”) fullMenu.forEach { println(it) }


3. fliter()
filter()는 컬렉션의 하위 집합을 생성할 수 있습니다.

```kotlin

val softBakedMenu = cookies.filter {
    it.softBaked
}

println("Soft cookies:")
softBakedMenu.forEach {
    println("${it.name} - $${it.price}")
}
  1. groupBy() groupBy()는 함수 반환 값을 기준으로 컬렉션을 분할합니다.
val groupedMenu = cookies.groupBy { it.softBaked }

val softBakedMenu = groupedMenu[true] ?: listOf() 
val crunchyMenu = groupedMenu[false] ?: listOf()


println("Soft cookies:")
softBakedMenu.forEach {
    println("${it.name} - $${it.price}")
}
println("Crunchy cookies:")
crunchyMenu.forEach {
    println("${it.name} - $${it.price}")
}

  1. fold() fold()는 컬렉션을 단일 값으로 변환합니다. ```kotlin val totalPrice = cookies.fold(0.0) {total, cookie -> total + cookie.price }

println(“Total price: $${totalPrice}”)



7. sortBy()
sortedBy()는 지정된 속성별로 컬렉션을 정렬하는 데 사용됩니다.

```kotlin
val alphabeticalMenu = cookies.sortedBy {
    it.name
}

println("Alphabetical menu:")
alphabeticalMenu.forEach {
    println(it.name)
}

출처

https://developer.android.com/courses/android-basics-compose/course?hl=ko

  1. 데이터 베이스 관련 정보 https://developer.android.com/codelabs/basic-android-kotlin-compose-persisting-data-room?hl=ko&continue=https%3A%2F%2Fdeveloper.android.com%2Fcourses%2Fpathways%2Fandroid-basics-compose-unit-6-pathway-2%3Fhl%3Dko%23codelab-https%3A%2F%2Fdeveloper.android.com%2Fcodelabs%2Fbasic-android-kotlin-compose-persisting-data-room#0

댓글남기기