Kotiln 4

[이펙티브 코틀린] 7. 결과 부족이 발생할 경우 null과 Failure를 사용하라

우리는 함수를 작성하다보면 결과를 만들어 낼 수 없을 때가(예외) 있다. 대표적으로 아래와 같은 상황이 생길 수 있다. 서버로부터 데이터를 받을때 인터넷 문제로 받아오지 못한 경우 조건에 맞는 요소들중 첫번쨰 요소를 가져오려고 했는데 조건에 맞는 요소가 하나도 없는 경우 ex) index 에러 json 파싱을 하려고 했는데 형식이 맞지 않아서 발생하는 오류 이런 상황을 처리할때 두 가지 매커니즘을 활용 할 수 있다. 제목처럼 null이나 Failure(라는 이름의 sealed 클래스)를 사용해서 처리 예외를 throw 두가지에는 중요한 차이가 있다. 예외를 throw 하는거부터 보자. 일단 예외는 정보를 전달하는 방법으로 사용해서는 안된다. 예외는 잘못된 특별한 상황을 나타낼때 사용해야한다. 그 이유는 ..

Effective Kotiln 2023.03.01

코루틴의 suspend 에 대해서

코루틴은 일시중단 일단 일시중단이 가능하다. launch 든 async 든 내부에 일시중단을 하는 동작이 있다면 코루틴은 잠시 멈춘다. 코루틴은 일을 협력(?) 한다는 느낌을 내포하고 있는데 여러개의 코루틴이 존재 할 수 있고 어떤 스레드에서 동작할지 명시 해준다면 각각의 코루틴을 잠시 멈췄다가 다른 코루틴을 실행시키고 그리고 일이 마무리되면 다른 코루틴과 같이 결과를 전달하거나 서로 순서를 옮겨다니며 동작한다. 예를 들면 val job3 = CoroutineScope(Dispahchers.IO).async{ //2. IO 스레드에서 작업3을 수행 (1..100).sortedByDescending{it} //5. 작업3이 완료된다. } val job1 = CoroutineScope(Dispahchers...

Android/Coroutine 2022.03.15

lateinit 과 lazy의 차이점

lateinit과 lazy 는 늦은 초기화를 하게 해주는 키워드다. 늦은 초기화가 뭘까? 늦은 초기화는 선언과 동시에 값을 가져오기 곤란한 상황에 뒤에 이 변수를 초기화 해줄 수 있는 시점이 됐을 때 초기화를 하도록 미뤄주는 역할을 한다. 생각보다 쓸 일이 자주 생기는데 두가지 방법에는 차이가 있다. 먼저 lazy 에 대한 이야기다. 오늘 업무를 진행하다가 Dialog 와 관련된 작업을 할 일이 있었다. 순간 고민이 생겼는데 Dialog를 생성할때 중복되는 내용들을 baseDialog 로 만들어서 부모 클래스로 만들어뒀는데 여기서 높이와 넓이를 부모클래스에서 값을 받도록 하고 있어서 작업하려던 Dialog 에서 override 하고 있는 곳에 값을 넣어 줄 상황이 생겼다. 고정 값으로 값을 집어넣어주면 ..

Kotlin 2022.03.15