[내일배움캠프 앱트랙] 캠프 3주차 - 12/8(금)

0
post-thumbnail

[내일배움캠프 앱트랙] 캠프 3주차 - 12/8(금)

📝TIL

Kotlin CodeKata

LeetCode

Kotlin 문법 종합반

  • 5-4 비동기 프로그래밍⭕
    • 동기 프로그래밍: 요청을 보내고 결과값을 받을 때까지 작업을 멈추고 기다림
    • 비동기 프로그래밍: 요청을 보내고 결과값을 받을 때까지 기다리는 동안 다른 작업을 하며 기다림
  • 5-5 쓰레드⭕
    • 쓰레드: 프로세스 안의 더 작은 작업 단위, 독립된 스택 메모리를 가짐
    • 쓰레드는 순서대로 실행 보장 X, CPU 자원 할당을 경쟁하며 실행됨
  • 5-6 코루틴⭕
    • 코루틴: 쓰레드보다 더 가볍게 사용 가능
    • 코루틴은 빌더와 함께 사용
      • ex. launch: 결과값이 없는 코루틴 빌더, Job 객체로 코루틴 관리
      • ex. async: 결과값이 있는 코루틴 빌더, Deffered 타입 값 리턴
    • 코루틴은 스코프로 범위 지정 가능
      • GlobalScope: 앱이 실행되면 생성되어 계속 사용
      • CoroutineScope: 필요할 때만 생성하여 사용 후 해제
    • 코루틴은 실행할 쓰레드를 Dispatcher로 지정 가능
      • Dispatchers.Main: UI와 상호작용하는 메인 쓰레드
      • Dispatchers.IO: I/O 작업에 최적화 쓰레드(ex. 네트워크 작업, 디스크 작업)
      • Dispatchers.Default: CPU 최적화 쓰레드
      • withContext() 사용
    • Gradle에 dependency 추가 필요
      dependencies{
      	implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1")
      }
    • 안드로이드에서 실행하는 경우, 앱이 항상 켜있지만, 실습 환경에서는 실행 후 바로 종료되는 JVM 환경
        fun main(args: Array<String>){
        	println("메인 쓰레드 시작")
        	var job = GlobalScope.launch{
        		delay(3000)
        		println("여기는 코루틴...")
        	}
        	println("메인 쓰레드 종료")
        }
        //코루틴 실행이 끝나기 전에, 메인 쓰레드가 종료됨 -> 코루틴 실행 결과 출력 X
        //실행 결과:
        //메인 쓰레드 시작
        //메인 쓰레드 종료
        fun main(args: Array<String>){
        	println("메인 쓰레드 시작")
        	var job = GlobalScope.launch{
        		delay(3000)
        		println("여기는 코루틴...")
        	} 
        	//job 실행이 끝날 때까지 메인 쓰레드 일시중단
        	runBlocking{
        		job.join()
        	}
        	println("메인 쓰레드 종료")
        }
        //코루틴 실행이 끝날 때까지 메인 쓰레드 기다림 -> 코루틴 결과 출력 O
        //실행 결과:
        //메인 쓰레드 시작
        //여기는 코루틴...
        //메인 쓰레드 종료
        fun main(args: Array<String>){
        	println("메인 쓰레드 시작")
        	var job = CoroutineScope(Dispatchers.Default).launch{
        		delay(3000)
        		println("여기는 코루틴...")
        	}
        	//job 실행이 끝날 때까지 메인 쓰레드 일시중단
        	runBlocking{
        		job.join()
        	}
        	println("메인 쓰레드 종료")
        	jop.cancel() //CoroutineScope 사용 후 해제
        }
        //실행 결과:
        //메인 쓰레드 시작
        //여기는 코루틴...
        //메인 쓰레드 종료
        fun main(args: Array<String>){
        	println("메인 쓰레드 시작")
        	var job = CoroutineScope(Dispatchers.Default).launch{
        		//async를 이용해 두 작업 비동기적으로 실행
        		var fileDownloadCoroutine = async(Dispatchers.IO){
        			delay(10000)
        			"파일 다운로드 완료"
        		}
        		var databaseConnectionCoroutine = async(Dispatchers.IO){
        			delay(5000)
        			"데이터베이스 연결 완료"
        		}
        		//await()을 이용해 코루틴 실행 결과를 받을 때까지 job 일시중단
        		println("${fileDownloadCoroutine.await()}")
        		println("${databaseConnectionCoroutine.await()}")
        	}
        	//job 실행이 끝날 때까지 메인 쓰레드 일시중단
        	runBlocking{
        		job.join()
        	}
        	println("메인 쓰레드 종료")
        	jop.cancel() //CoroutineScope 사용 후 해제
        }
        //실행 결과:
        //메인 쓰레드 시작
        //파일 다운로드 완료
        //데이터베이스 연결 완료
        //메인 쓰레드 종료
  • 5-7 쓰레드와 코루틴⭕
    • 쓰레드와 코루틴의 차이
      • 쓰레드:
        • 작업의 단위: Thread (각 Thread는 독립적인 스택 메모리 가짐)
        • 동시성 보장 수단: Context Switching
      • 코루틴:
        • 작업의 단위: Coroutine Object (JVM Heap에 적재되는 객체)
        • 동시성 보장 수단: Programmer Switching (No Context Switching)
        • 하나의 쓰레드에서 다수의 코루틴 수행

Kotlin 문법 심화

📝코멘트

profile
Be able to be vulnerable, in search of truth

0개의 댓글