본문 바로가기

전체 글

Coroutines Flow #2 플로우 중간 연산자 - Intermediate flow operators Flow는 Collection이나 Sequences에서와 같이 연산자로 흐름을 변환 할 수 있다. 이 연산자들은 Flow와 마찬가지로 콜드(Cold) 스트림이다. 이러한 연산자에 대한 호출은 일시 중단 기능은 아니며 새로운 변환에 정의를 빠르게 반환한다. 기본 연산자에는 map, filter와 같이 익숙한 이름이 있다. Sequences와의 중요한 차이점은 연산자 내의 코드블록이 일시 중단 함수를 호출 할 수 있다는 것이다. 요청을 수행하는 것이 일시 중단 기능으로 장기 실행되는 작업인 경우에도 요청의 흐름을 map 연산자로 결과에 매핑할 수 있다. suspend fun performRequest(request: Int): Stri.. 더보기
Coroutines Flow #1 일시 중단 함수는 비동기적으로 하나의 값만 리턴한다. 어떻게 하면 비동기적으로 계산된 여러 값을 리턴할 수 있을까? # 다중값 표현 - Representing multiple values Kotlin Collections를 이용하여 여러값을 나타낼 수 있다. fun foo(): List = listOf(1, 2, 3) fun main() { foo().forEach { value -> println(value) } } # outputs 1 2 3 # 시퀀스 - Sequences CPU 연산이 요구되는 어떤 일들을 나타내고자 할 때 Sequences를 이용할 수 있다. (각 계산에 100ms 소요) fun foo(): Sequence = sequence { // sequence builder for (i .. 더보기
[study: OS] — ?. Lock # 임계구역(Critical Section) 이란? 공유되는 자원, 즉 동시에 접근하려고 하는 자원에서 문제가 생기지 않게 독점을 보장해야 하는 영역 무슨 말이냐.. 내가 화잘실에 앉아있다. 배가 아프다. 아윤이가 배가 아프다며 처들어 온다. 모든 경우의 수를 무시하고 처들어온다. 환장한다. 여기서 화장실이 나와 아윤이가 공유해야 될 공유자원이고, 내가 잡고 있는 이 문이 임계영역이 된다. 동시접근을 해결하기 위해 화장실 문에 잠금장치(Lock)가 있고 조절 가능하다. 임계영역이란 프로그램에서 공유 자원의 독점을 보장하는 코드영역, 지정된 시간이 지나면 종료된다. 스레드가 공유자원의 사용을 보장받기 위해서 임계구역에 들어가거나 나올때 동기화 방법이 필요하다. # Lock 걸어 잠구는 행위 간단한 락 cl.. 더보기
Reflection #2 생성자에 대한 정보 @Test fun `생성자에 대한 정보 얻기`() { val clazz = Class.forName("java.lang.String") val ctorlist = clazz.declaredConstructors ctorlist.forEach {ct -> println("생성자 이름 = ${ct.name}") println("정의된 클래스 이름 = ${ct.declaringClass}") val pvec = ct.parameterTypes pvec.forEachIndexed {index, param -> println("인자 $index = $param") } val evec = ct.exceptionTypes evec.forEachIndexed { index, exception -> .. 더보기
Reflection #1 런 타임에 실행 중인 어플리케이션의 정보를 JVM으로부터 참조하거나 수정하는 기술 클래스, 인터페이스, 메소드, 필드 등을 찾을 수 있다. 객체를 생성하거나 변수를 변경, 메소드 호출이 가능하다. 자바에서 기본적으로 제공하는 API Sample String 클래스의 이름을 통해 String 클래스가 가진 모든 메서드 이름을 출력한다. @Test fun `스트링 클래스에 존재하는 모든 메소드`() { val c = Class.forName("java.lang.String") val m = c.declaredMethods m.forEach { println(it.name) } } Class 인스턴스의 getDeclaredMethods() 메소드를 호출하면 Method 배열을 얻을 수 있다. Method는 .. 더보기
Android Navigation #2 Principles of Navigation 1. Fixed start destination 고정된 하나의 시작 Destination이 있어야 한다. 뒤로 버튼을 눌러 런처로 돌아오면 마지막으로 표시되는 화면 일회성 또는 로그인 화면과 같은 조건부 화면은 시작화면으로 고려해서는 안된다. 2. Navigation state is represented as a stack of destinations Navigation 상태는 Destination Stack으로 표시된다. 시작 Destination은 항상 Bottom에 존재하며 현재 Destination은 Top에 존재한다. 3. Up and Back are identical within your app's task Up 및 Back Button은 동일해야 .. 더보기
Android Navigation #1 Navigation 기본 구성요소 Navigation Graph 모든 Navigation 관련 정보를 하나로 모은 XML 리소스 행선지인 Destinations, 경로들을 포함한다 NavHost Navigation Graph에서 Destination을 표시하는 빈 컨테이너 NavHost 구현한 NvaHostFragment가 존재한다 NavController NavHost에서 Navigation을 관리하는 객체 사용자가 이동할 때 NavHost에서 Destination을 전환 Navigation Graph에서 정의한 특정 경로를 따라 이동할지, 혹은 특정 대상으로 직접 이동할지 navController에게 전달한다. 그러면 NavController가 NavHost에 적절한 대상을 표시한다. 장점 트랜잭션 .. 더보기