모든 중단 함수는 또 다른 중단 함수에 의해 호출되어야 하며, 중단 함수를 연속으로 호출하면 시작되는 지점이 반드시 있습니다.

코루틴 빌더가 그 역할을 하며, 일반 함수와 중단 가능한 세계를 연결시키는 다리가 됩니다.

<aside> 💡

중단 함수(suspend fun)는 다른 중단 함수나 코루틴 안에서만 호출할 수 있어요.

그래서 중단 함수들끼리 계속 이어져 있다 하더라도,

결국엔 어디선가는 코루틴을 시작해주는 지점(시작점)이 필요해요.

이 시작점 역할을 하는 게 바로 launch, async, runBlocking 같은 코루틴 빌더예요.

즉, 일반 함수와 코루틴 세계를 이어주는 다리 역할을 코루틴 빌더가 해주는 것이에요.

</aside>

필수적인 코루틴 빌더

launch 빌더

launch가 작동하는 방식은 thread 함수를 호출하여 새로운 스레드를 시작하는 것과 비슷합니다.

fun main() {
	GlobalScope.lauch {
		delay(1000L)
		println("World!")
	}
		GlobalScope.lauch {
		delay(1000L)
		println("World!")
	}
		GlobalScope.lauch {
		delay(1000L)
		println("World!")
	}
	println("Hello.")
	Thread.sleep(2000L)
}

// Hello,
// (1초후)
// World!
// World!
// World!

//* world 출력 되는지 확인 해 볼 것 
//* 실행되는 스레드가 main이 아니고 다른스레드 인가?

GlobalScope 객체에서 launch를 호출하는 방식

→ 실제 현업에서는 GlobalScope 사용을 지양해야 한다.

GlobalScope는 "앱 전체에서 돌아가는 코루틴"이라 현업에서는 생명주기를 고려하지 않아 생기는 버그

관리 어려움 때문에 지양합니다.

main 함수의 끝에 Thread.sleep을 호출 해야 한다. → 스레드를 잠들게 하지 않으면 메인 함수는 코루틴을 실행하자마자 끝나 버리게 된다.