< Kotlin >
🔍 Data Class 무엇인가요?
데이터 클래스란 데이터를 보관하기 위한 클래스 입니다. 일반 class로 생성한 것과 달리 생성자와 setter& getter, toString(), equals(), hashCode(), componentN() 를 생성해주어 편리한 장점을 가지고 있습니다.
🔍 오버로딩과 오버라이딩은 무엇인가요?
오버로딩과 오버라이딩은 객체지향 프로그래밍의 중요한 특성인 다형성을 위해 사용합니다.
오버로딩의 경우 동일한 메소드의 이름으로 매개변수의 타입과 개수를 다르게 한 메소드를 여러개 정의하여 사용하는 것을 말합니다.
오버라이딩의 경우 부모클래스에서 사용하는 메소드를 부모 클래스를 상속받은 자식 클래스에서 재정의하여 사용하는 것을 말합니다.
🔍 lateinit 과 lazy의 차이는 무엇인가요?
lateinit 과 lazy 모두 늦은 초기화를 위해 사용합니다.
lateinit의 경우, 값의 변경이 가능하지만 null을 허용하지 않고 Primitive Type을 지원하지 않습니다.
by lazy의 경우 호출시에 by lazy 뒤에 선언한 값으로 프로퍼티가 초기화되지만, null을 허용하고 한번 값을 선언하면 변경되지 않습니다.
🔍 Object와 Companion Object의 초기화 및 삭제 시점은 무엇인가요?
object는 싱글톤 객체를 만들기 위한 키워드로, object 뒤에 붙은 이름을 통해 메소드나 변수의 호출이 직접 가능하다. 얘의 경우 앱이 실행되는 시점에 초기화되며, 앱이 종료되었을 때 삭제된다.
companion object는 클래스 내에서 생성되며, 클래스가 로드될 때, 생성이 된다. 그러다 클래스가 삭제되면 companion object 또한 같이 삭제가 된다.
🔍 고차함수는 무엇인가요?
고차 함수는 함수를 매개변수로 받거나 결과로 반환하는 함수입니다. 코틀린에서는 함수를 일급 객체로 다루기 때문에 고차 함수를 사용하기 쉽다. apply, let과 같은 스코프 함수들이 고차 함수에 해당됩니다.
🔍 Scope 함수에 대해 설명해주세요
스코프 함수는 객체의 범위 내에서 코드를 실행할 수 있게 해주는 함수들입니다. 주로 객체 설정, 속성 변경, 또는 특정 작업을 간결하게 수행할 때 유용하게 사용됩니다.
🔍 let 함수의 주요 용도와 사용 예는 무엇인가요?
let 함수는 호출 객체를 매개변수로 받아 작업을 수행하고 최종 결과를 반환합니다. 주로 널 안정성을 확보하고자 특정 값이 null이 아닐 때 작업을 수행할 때 유용합니다.
*참고
inline fun<T,R> T.let(block : (T) -> R) : R {
return block(this)
}
🔍 run 함수의 주요 용도와 사용 예는 무엇인가요?
run 함수는 객체의 속성을 참조하거나 초기화 작업을 수행할 때 사용하며, 마지막 줄의 결과를 반환합니다. 주로 객체를 구성하거나 작업의 결과를 생성하는 데 유용합니다.
*참고
inline fun <T,R> T.run(block : T.() -> R) : R{
return block()
}
🔍 with 함수의 주요 용도와 사용 예는 무엇인가요?
with는 특정 객체를 설정하거나 작업을 수행할 때 사용되며, 반환 값은 람다 블록의 최종 결과입니다. 다른 스코프와 함수와 달리 with는 객체를 함수의 인자로 전달하고, 해당 블록에서 this로 참조한다.
*참고
inline fun <T, R> with(receiver : T, block : T.() -> R) : R{
return receiver.block()
}
🔍 apply와 also의 차이점은 무엇인가요?
apply는 객체 설정을 위해 주로 사용되며, 블록 내에서 this로 호출 객체를 참조하고, 최종적으로 객체 자신을 반환합니다.
also는 호출 객체를 매개변수로 받아 처리하며, 객체 자체를 반환합니다. also는 주로 로깅이나 디버깅시 현재 객체 상태를 검사할 때 유용합니다.
*참고
inline fun <T> T.apply(block : T.() -> Unit) : T{
block()
return this
}
inline fun <T> T.also(block : (T) -> Unit) : T{
block(this)
return this
}
🔍 코루틴이란 무엇이고, 기존 스레딩과 어떻게 다릅니까?
코루틴은 비동기 작업을 쉽고 효율적으로 처리할 수 있도록 하는 경량 스레드입니다. 기존 스레딩과의 차이는 하나의 스레드에서 여러개의 코루틴이 실행될 수 있고, Dispathcer를 통해 스레드 전환을 자동으로 관리합니다.
🔍 Suspend function이란 무엇인가요?
suspend는 일시 중단 될 수 있는 함수로, 실행 중인 스레드를 차단하지 않고 일시적으로 실행을 멈추고 다른 작업을 수행하도록 합니다.
🔍 Dispatcher의 종류는 무엇이 있나요?
Dispathcers.Main -> UI 작업에 사용되며 메인 스레드에서 실행됩니다.
Dispathcers.IO -> 네트워크나 디스크 I/O와 같은 블로킹 작업을 처리합니다.
Dispatchers.Default -> CPU 연산이 많은 작업을 처리합니다.
🔍 Flow란 무엇인가요?
Flow는 Kotlin의 비동기 데이터 스트림을 제공하는 라이브러리입니다. 코루틴을 기반으로 설계되었고, 콜드 스트림을 생성하며, 데이터가 수집될 때까지 코드가 실행되지 않습니다.
🔍 Flow와 LiveData의 차이점은 무엇인가요?
Flow는 코루틴 스코프 내에서 동작하고, Lifecycle에 의존하지 않습니다. 반면, LiveData는 Android의 Lifecycle에 의존해 수명 주기를 관리합니다.
🔍 StateFlow와 SharedFlow의 차이는 무엇인가요?
StateFlow는 단일 상태 값을 가지고, 구독자가 마지막 상태를 받을 수 있습니다. 반면, SharedFlow는 다수의 구독자가 이전 값을 받지 않으며 브로드캐스팅을 지원하는 Flow입니다.
🔍 Flow의 buffer 연산자는 무엇인가요?
buffer 연산자는 생산자와 소비자의 속도가 다를 때 버퍼를 사용해 중간에 데이터를 저장함으로 백프레셔 문제를 완화할 수 있습니다.
'정리' 카테고리의 다른 글
[정리] 안드로이드 - Compose (0) | 2024.11.09 |
---|---|
[정리] 네트워크 정리 (0) | 2024.08.29 |
[정리] 안드로이드 정리 (0) | 2024.05.28 |
[정리] 자료구조 정리 (0) | 2024.05.28 |
[정리] 운영체제 정리 (0) | 2024.05.27 |