소개
안녕하세요. 개발자 조세영입니다.
지금까지 프로그래밍은 사람들에게 어렵게 다가왔습니다. 그 이유는 프로그래밍에 필요한 방대한 지식이 인터넷 곳곳에 흩어져 있고, 파편화된 지식을 이해하기 위해서는 지식의 양에 비해 많은 노력이 필요했기 때문입니다.
하지만, 많은 공부 끝에 제가 발견한 것은 각 단계에서 체계적으로 필요한 부분만을 학습한다면, 효율이 수 배 아니 수십 배까지 올라갈 수 있다는 점입니다. 이런 점에 착안해서 저는 프로그래밍 지식을 체계화해 주니어 개발자부터 시니어 개발자까지 누구나 이해할 수 있도록 학습 자료들을 만들고 있습니다.
많은 분들이 제 학습 자료를 통해 어렵게 느껴지던 프로그래밍 개념들을 쉽게 이해하고 넘어갈 수 있길 바랍니다.
저서
코틀린 코루틴의 정석, 조세영, 에이콘 출판사, 2024
번역
코틀린 코루틴 공식 기술 문서 한국어 번역 및 배포, 2023
강연&발표
안드로이드 개발자를 위한 코틀린 코루틴, 삼성전자 MX 사업부, 2024
Optimizing Flow Collection on Coroutines, LINE Client Day, 2022
경력
(전) 라인플러스 Android Software Engineer
(전) 하이퍼커넥트 Android Software Engineer
(전) 티맥스데이터 Software Engineer
(전) 인공위성연구소 Graduate Researcher
(전) KAIST IIDS Lab Research Asssistant
학력
KAIST 전기및전자공학부 석사 졸
고려대학교 보건정책관리학부, 전기전자전파공학부 학사 졸
링크
GitHub: https://github.com/seyoungcho2
Tech Blog: https://kotlinworld.com/
LinkedIn: https://www.linkedin.com/in/seyoungcho/
강의
수강평
게시글
질문&답변
왜 runBlocking 종료로 메인스레드가 종료될까요?
비오님 안녕하세요. 지식공유자 조세영 입니다.Dispatchers.IO의 스레드는 데몬스레드이어서 그렇습니다.
- 0
- 1
- 37
질문&답변
cancel 질문드립니다.
dkdiehdbcjsk jehdb님 안녕하세요. 해당 경우는 launch 코루틴이 메인스레드를 점유 후 양보하지 않기 때문입니다. runBlocking 코루틴에서 cancel이 실행돼야하는데 계속 대기 상태에 머물러서 그렇습니다.이에 관한 자세한 내용은 이후 강의에서 다루는 코루틴의 양보와 관련된 내용에서 배우실 수 있습니다.
- 1
- 2
- 26
질문&답변
delay 함수 사용 시 스레드 양보
비가싫어요님 안녕하세요. 지식공유자 조세영입니다.네 맞습니다. delay는 일시중단 이후 일정 시간 이후에 재개되고 yield는 스레드 양보 후 지연 없이 재개 요청됩니다.감사합니다.
- 1
- 2
- 73
질문&답변
강사님께서 번역해주신 코틀린 코루틴 공식 가이드 문서 문의
yunjh1008님 안녕하세요. 한국어 번역본은 다음 링크에서 확인하실 수 있습니다.https://seyoungcho2.github.io/CoroutinesKoreanTranslation/감사합니다!
- 1
- 2
- 82
질문&답변
Flow와 Channel
Seok-woo Kim님 안녕하세요. 지식 공유자 조세영입니다.Channel과 Flow에 대한 강의도 계획에 있는데요 오픈까지 조금 시간이 걸릴 것 같습니다. 혹시 오픈하게 되면 새소식을 통해 알려드릴 수 있도록 하겠습니다!감사합니다.
- 1
- 2
- 98
질문&답변
[코루틴 테스트 심화] runTest의 스레드 관련 문의
이 부분 설명을 변경한 강의가 업로드 되었습니다. 리포트 해주셔서 감사합니다!
- 1
- 2
- 124
질문&답변
[코틀린 코루틴의 정석 책 추첨 이벤트] 강의 구매 기간 관련 문의
denia park님 안녕하세요. 이 이벤트는 연말, 연초에 강의를 구매하신 분들을 위해 준비되어서 부득이하게 기간 제한을 두게 되었습니다. 구매 해주신 날짜가 2024.12.19~2025.1.18 사이이신 분들이 대상인점 양해 부탁드립니다.다만, 이전 질문과 함께 날짜 오류도 리포트 해주셔서 너무 감사해서요. seyoungcho2@gmail.com 으로 연락처를 보내주시면 소정의 연말 선물을 보내드릴 수 있도록 하겠습니다. 강의를 열심히 들어주셔서 감사합니다!
- 1
- 1
- 178
질문&답변
[코루틴 테스트 심화] runTest의 스레드 관련 문의
denia park 님 안녕하세요. 지식 공유자 조세영입니다.runTest는 기본적으로 테스트 환경에서 실행되며, 코루틴 테스트 환경에서 메인 스레드 처럼 동작하는 Test worker 스레드에서 동작합니다. 이 부분은 조금 설명이 잘못 된 부분이 있는 것 같습니다. runTest 함수가 호출되면, runTest로 만들어진 코루틴이 완료될 때까지 호출된 스레드를 점유하고 블로킹하는데요. 이 부분에서는 메인스레드에서 runTest가 호출되었습니다.즉, runTest는 Test worker 스레드에서 실행되는 것이 맞고, 메인 스레드에서 runTest가 호출되기 때문에 코루틴이 실행 완료될 때까지 메인 스레드가 블로킹되게 됩니다. 따라서 위 설명은 다음과 같이 수정되는 것이 맞습니다.runTest를 호출해 실행되는 코루틴은 호출 스레드를 블로킹하며, 내부의 모든 코루틴이 실행 완료될 때까지 종료를 방지한다.이 부분은 빠른 시일 내에 조금 더 명확한 설명으로 대체할 수 있도록 하겠습니다. 질문 주셔서 감사합니다.
- 1
- 2
- 124
질문&답변
job과 코루틴의 관계?
구쟁천님 안녕하세요. 지식 공유자 조세영입니다.withContext 호출 시 Job이 새로 생성돼 헷갈리셨을 것 같습니다. 이 강의에서 Job에 대해 설명할 때는 Job이 코루틴을 제어하기 위한 인터페이스라고 설명하고, 이에 따라 Job을 사용해 코루틴을 제어하는 방법을 위주로 설명했는데요. 실제로 Job 인터페이스는 다양한 구현체를 가지고, launch 함수 호출시 생성되는 StandaloneCoroutine을 비롯해 여러 구현체를 가지고 있습니다.(사진) withContext 호출 시에는 Job의 구현체 중 하나인 DispatchedCoroutine이 생성되지만, 저는 이것이 새로운 코루틴을 생성하기보다는 현재 코루틴의 실행 컨텍스트를 전환하는 도구(코루틴의 실행 컨텍스트가 바뀌었을 때 다른 dispatch 하고 응답을 받아올 때까지 기다리는 도구)라고 이해했습니다. 실제로 위의 코드에서 디버깅을 해보시면 Job의 구현체는 다르지만, 같은 CoroutineId를 가지게 될 것으로 보입니다. 즉, 같은 코루틴에 연결되어 있다고 이해하면 좋을 것 같습니다. 이번 강의에서는 코루틴이 추상 레벨에서 노출하는 API를 위주로 다루었고, 이 내용들은 최대한 공식 기술 문서 등의 근거 자료가 있는 부분들을 위주로 제가 이해한 내용들을 덧붙이는 방식으로 강의를 진행했습니다. 질문 주신 부분에 대한 것은 사실 공식 기술 문서나, 기타 자료에는 나와 있지 않아서 제가 라이브러리 내부를 보고 파악한 내용을 바탕으로 답변 드려 정확하지 않을 수 있는 점 양해 부탁드립니다. 감사합니다. 답변이 도움이 되면 좋을 것 같습니다.
- 3
- 2
- 193
질문&답변
코루틴의 blocking I/O작업 처리
estatecloudinc님 안녕하세요. 지식 공유자 조세영입니다.네 맞습니다. 만약 라이브러리 내부에서 스레드 양보를 하지 않는다면 스레드 반납을 통한 이점이 사라집니다. 일부 라이브러리의 경우 suspend fun으로 선언된 api를 노출하지만 내부에서는 blocking i/o를 하는 경우도 있습니다.이 경우 말씀해주신 두가지가 가져갈 수 있는 이점이 됩니다.
- 0
- 2
- 106