작성
·
26
1
- 학습 관련 질문을 남겨주세요. 질문을 상세히 작성하면 더 좋습니다.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
아무리 생각해도 코루틴 안에서 사용하는
코루틴 안의 delay나 await 등 점유 해제 가능한 fun들을 코드 중복을 피하기 위해 따로 빼놓은 delay나 join await를 포함한 코루틴용 fun의 키워드 같은데
구글링해서 보면 마치 delay나 await, join 이 포함된 fun 은 무조건 suspend를 사용하고 점유 해제 되도록 한다고 설명한데가 많네요.
결론은 suspend 자체가 점유 해제 하고 resume을 시켜주는 키워드가 아닌 것 같은데 제가 이해한게 맞나요?
답변 2
1
아무도_모를_아이디 님 안녕하세요. 지식 공유자 조세영입니다.
말씀해주신대로 suspend 는 코루틴을 일시 중단하고 재개하는 키워드가 아니라, 일시 중단 지점이 있을 수 있음을 알려주는 키워드일 뿐입니다. 함수 내부에 일시 중단 지점이 있을 경우에만 스레드가 점유 해제됩니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. 아무도_모를_아이디님.
코틀린 코루틴에서의 suspend
키워드와 관련된 질문을 주셨네요. suspend
키워드는 코루틴 내에서 비동기 작업을 처리하는 데 중요한 역할을 합니다. 아래 내용을 통해 보다 쉽게 이해하실 수 있도록 설명드리겠습니다.
suspend
키워드의 역할suspend
함수 정의: suspend
키워드는 일시 중단 가능한 함수를 정의할 때 사용됩니다. 이 함수는 일시적으로 호출을 중단하고, 후속 작업을 기다렸다가 나중에 다시 실행됩니다.
점유 해제와 재개: suspend
키워드 자체가 점유 해제를 수행하거나, 자동으로 재개되는 것은 아닙니다. suspend
키워드가 부여된 함수는 일반적으로 delay
, await
, join
과 같은 다른 일시 중단 함수와 결합하여 비동기 작업을 수행합니다. 이런 함수들은 비동기 작업을 수행하면서 스레드를 점유하지 않고, 다른 작업들을 수행할 수 있도록 점유 해제를 가능하게 합니다.
suspend
함수의 예delay(time)
: 일정 시간을 대기하지만 그동안 스레드를 차단하지 않습니다. 코루틴이 재개할 준비가 되면 이어서 작업을 실행합니다.await()
: 비동기 작업 완료 후 결과를 반환하는데 사용되며, 작업이 완료될 때까지 기다립니다.join()
: 코루틴이 완료될 때까지 대기합니다.즉, suspend
함수는 코루틴의 중단점 역할을 하며, 이를 사용하여 함수 실행을 비동기적으로 설계할 수 있습니다. 중요한 것은 suspend
기능은 코틀린 코루틴의 핵심으로 비동기 처리를 쉽게 만들지만, 자체적으로 점유 해제를 수행하는 것이 아니라 중단점을 가능하게 한다는 점입니다.
더 자세한 정보는 코틀린 코루틴 공식 문서에서 찾아보실 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
-_-b 감사합니다!! 진짜 책도 너무 멋집니다!!!