Kotlin (2) 썸네일형 리스트형 Flow 동작 이해 // code 1 interface Flow { suspend fun collect(collecotr: FlowCollector)}interface FlowCollector { suspend fun emit(value: T)}// code 3flow { emit(1) emit(2)} // 1.collect { println(it) } // 2// code 4public fun flow(@BuilderInference block: suspend FlowCollector.() -> Unit): Flow = SafeFlow(block)// Named anonymous objectprivate class SafeFlow(private val block: suspend FlowCol.. 변성 - 공변, 무공변, 반공변 공변,무공변,반공변에 대한 개념들은 "타입 S가 T의 하위타입이면 List도 List의 하위타입인가?"에 대한 질문으로 시작한다. 타입 S가 T의 하위 타입일때 -> Box와 Box가 어떤 관계도 아닌 경우 : 타입 S가 T의 하위 타입일때 -> Box가 Box의 하위타입인 경우 : 타입 S가 T의 상위 타입일때 -> Box가 Box의 상위타입인 경우 일반적으론 무공변이다. List랑 List은 어떤 관계도 없다. 왜그러냐면, 제네릭은 "타입소거"방식으로 동작한다. 타입소거란? 컴파일시에만 타입 검사를 하고 런타임시에는 제네릭의 인스턴스에 대한 타입정보를 갖고 있지 않는 것 예를 들어) List은 런타임시에는 그냥 List로 간주된다. (개발자눈에만 타입이 보인다는뜻) 그래서 is 키워트로 List의 타.. 이전 1 다음