인프런 커뮤니티 질문&답변

아무도_모를_아이디님의 프로필 이미지
아무도_모를_아이디

작성한 질문수

코틀린 코루틴 완전 정복

async-await 사용해 코루틴으로부터 결과 수신 받기

suspend 문의 드려요

작성

·

26

1

- 학습 관련 질문을 남겨주세요. 질문을 상세히 작성하면 더 좋습니다.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

아무리 생각해도 코루틴 안에서 사용하는

코루틴 안의 delay나 await 등 점유 해제 가능한 fun들을 코드 중복을 피하기 위해 따로 빼놓은 delay나 join await를 포함한 코루틴용 fun의 키워드 같은데

 

구글링해서 보면 마치 delay나 await, join 이 포함된 fun 은 무조건 suspend를 사용하고 점유 해제 되도록 한다고 설명한데가 많네요.

 

결론은 suspend 자체가 점유 해제 하고 resume을 시켜주는 키워드가 아닌 것 같은데 제가 이해한게 맞나요?

 

 

답변 2

1

조세영님의 프로필 이미지
조세영
지식공유자

아무도_모를_아이디 님 안녕하세요. 지식 공유자 조세영입니다.

말씀해주신대로 suspend 는 코루틴을 일시 중단하고 재개하는 키워드가 아니라, 일시 중단 지점이 있을 수 있음을 알려주는 키워드일 뿐입니다. 함수 내부에 일시 중단 지점이 있을 경우에만 스레드가 점유 해제됩니다.

감사합니다.

-_-b 감사합니다!! 진짜 책도 너무 멋집니다!!!

0

안녕하세요, 인프런 AI 인턴입니다. 아무도_모를_아이디님.

코틀린 코루틴에서의 suspend 키워드와 관련된 질문을 주셨네요. suspend 키워드는 코루틴 내에서 비동기 작업을 처리하는 데 중요한 역할을 합니다. 아래 내용을 통해 보다 쉽게 이해하실 수 있도록 설명드리겠습니다.

suspend 키워드의 역할

  • suspend 함수 정의: suspend 키워드는 일시 중단 가능한 함수를 정의할 때 사용됩니다. 이 함수는 일시적으로 호출을 중단하고, 후속 작업을 기다렸다가 나중에 다시 실행됩니다.

  • 점유 해제와 재개: suspend 키워드 자체가 점유 해제를 수행하거나, 자동으로 재개되는 것은 아닙니다. suspend 키워드가 부여된 함수는 일반적으로 delay, await, join과 같은 다른 일시 중단 함수와 결합하여 비동기 작업을 수행합니다. 이런 함수들은 비동기 작업을 수행하면서 스레드를 점유하지 않고, 다른 작업들을 수행할 수 있도록 점유 해제를 가능하게 합니다.

suspend 함수의 예

  • delay(time): 일정 시간을 대기하지만 그동안 스레드를 차단하지 않습니다. 코루틴이 재개할 준비가 되면 이어서 작업을 실행합니다.
  • await(): 비동기 작업 완료 후 결과를 반환하는데 사용되며, 작업이 완료될 때까지 기다립니다.
  • join(): 코루틴이 완료될 때까지 대기합니다.

즉, suspend 함수는 코루틴의 중단점 역할을 하며, 이를 사용하여 함수 실행을 비동기적으로 설계할 수 있습니다. 중요한 것은 suspend 기능은 코틀린 코루틴의 핵심으로 비동기 처리를 쉽게 만들지만, 자체적으로 점유 해제를 수행하는 것이 아니라 중단점을 가능하게 한다는 점입니다.

더 자세한 정보는 코틀린 코루틴 공식 문서에서 찾아보실 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

아무도_모를_아이디님의 프로필 이미지
아무도_모를_아이디

작성한 질문수

질문하기