소개
소개
안녕하세요. 개발자 조세영입니다.
지금까지 프로그래밍은 사람들에게 어렵게 다가왔습니다. 그 이유는 프로그래밍에 필요한 방대한 지식이 인터넷 곳곳에 흩어져 있고, 파편화된 지식을 이해하기 위해서는 지식의 양에 비해 많은 노력이 필요했기 때문입니다.
하지만, 많은 공부 끝에 제가 발견한 것은 각 단계에서 체계적으로 필요한 부분만을 학습한다면, 효율이 수 배 아니 수십 배까지 올라갈 수 있다는 점입니다. 이런 점에 착안해서 저는 프로그래밍 지식을 체계화해 주니어 개발자부터 시니어 개발자까지 누구나 이해할 수 있도록 학습 자료들을 만들고 있습니다.
많은 분들이 제 학습 자료를 통해 어렵게 느껴지던 프로그래밍 개념들을 쉽게 이해하고 넘어갈 수 있길 바랍니다.
저서
코틀린 코루틴의 정석, 조세영, 에이콘 출판사, 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/
강의
전체 1수강평
- 체계적인 설명 덕분에 내용이 잘 정리됩니다.
마로탱
2024.10.25
1
- 강의력 되게 좋으시고 질문 피드백도 엄청 빠르세요! 코루틴 강의 중 최고인 것 같아요
liltjay
2024.10.21
1
게시글
질문&답변
2024.11.13
Dispatcher.IO의 동작원리
chhong님 안녕하세요. 지식 공유자 조세영입니다.먼저 강의를 재밌게 봐주셔서 감사하다는 말씀 드립니다.질문에 답변을 드리면 Dispatchers.Default나 Dispatchers.IO의 스레드는 성능에 차이가 없습니다. 그럼에도 이 둘을 나눠놓은 이유는 각 디스패처는 작업의 특성에 맞게 스레드풀의 크기가 다르고 특정 작업을 위해 다른 작업이 방해받는 상황을 방지하기 위함이 큽니다. Dispatchers.IO는 IO 작업의 특성에 맞게 최대한 많은 작업을 병렬로 실행할 수 있어야 되면서, 각 스레드는 실행되지 않는 상태에 놓이는 시간이 길기 때문에 64개의 스레드를 사용할 수 있게 하고, Dispatchers.Default는 스레드가 아무리 많아도 실제로 CPU에서 동시에 처리할 수 있는 작업의 개수는 제한이 있기 때문에 프로세서의 수만큼으로 스레드를 제한한다고 이해해주시면 좋을 것 같습니다.답변이 도움이 되었다면 좋을 것 같습니다. 감사합니다.
- 0
- 2
- 23
질문&답변
2024.11.13
실무에서 runBlocking 와 CoroutineScope 실무 사용에 대해
아무도_모를_아이디님 안녕하세요. 지식 공유자 조세영입니다.해당 부분 안드로이드의 CoroutineScope 경우 인프런 AI인턴이 잘 답변해준거 같습니다. Activity의 경우 lifecycleScope에서, ViewModel에서 코루틴을 실행하는 경우 viewModelScope에서 코루틴을 실행해 생명주기별로 관리를 할 때 사용되고, runBlocking은 동기 코드와 코루틴의 연결점 역할이 필요할 때 사용됩니다.서버에서도 runBlocking은 마찬가지이고, CoroutineScope의 경우 별도로 구조화되어야하는 작업이 있는 경우, 혹은 작업이 특정 생명주기 별로 관리되어야 하는 경우 사용하면 될 것 같습니다. 스프링을 예로 들자면 특정 Bean이 파괴될때 취소돼야 하는 작업이 CoroutineScope 있는 경우 @PreDestroy와 함께 사용하면 되지 않을까 합니다.서버의 경우는 제가 개인적으로 공부했던 부분이고 실무를 경험해보지 않았다보니 답변이 부족할 수 있는점 양해 부탁드립니다.
- 0
- 2
- 25
질문&답변
2024.11.09
Code3-6에서 imageProcessingDispatcher가 inline으로는 동작하지 않는 이유가 궁금합니다
azsxd34님 안녕하세요. 지식 공유자 조세영입니다.다음 코드에서 Dispatchers.Default.limitedParallelism(2) 가 repeat 블록 안(launch 함수의 인자)으로 들어갈 경우 repeat 블록이 반복될 때마다 Dispatchers.Default.limitedParallelism(2)가 새로 생성되서 그렇습니다. 즉, Dispatchers.Default.limitedParallelism(2)을 repeat 블록 안에 넣으면 Dispatchers.Default.limitedParallelism(2)가 1000개 생성됩니다.fun main() = runBlocking { val imageProcessingDispatcher = Dispatchers.Default.limitedParallelism(2) repeat(1000) { launch(imageProcessingDispatcher) { Thread.sleep(1000L) // 이미지 처리 작업 println("[${Thread.currentThread().name}] 이미지 처리 완료") } } } 답변이 도움이 되면 좋을 것 같습니다!감사합니다.
- 1
- 2
- 22
질문&답변
2024.11.06
공유 스레드 풀 질문드려요!
아무도_모를_아이디 님 안녕하세요. 지식 공유자 조세영입니다.말씀 주신대로 강의에서 사용한 코루틴 라이브러리 버전을 기준으로 Dispatchers.Default는 프로세서 개수와 2중 큰 값만큼 스레드를 만들 수 있도록 되어 있으며, Dispatchers.IO는 64와 프로세서 개수 중 큰 값만큼 스레드를 만들 수 있도록 되어 있습니다.이 부분은 현재 이렇게 되어있더라도 추후 버전에서 바뀔 수 있습니다. 참고 부탁드립니다.감사합니다.
- 1
- 2
- 29
질문&답변
2024.10.29
코루틴 이름 출력관련해서 질문이 있습니다!
해당 부분 Hello Coroutines 섹션의 콘솔 로그, IntelliJ IDEA를 사용한 코루틴 디버깅에서 확인 하실 수 있는데요.코드 실행 시의 Run configuration의 VM options에 -Dkotlinx.coroutines.debug 옵션을 넣어 실행하면 코루틴의 이름이 같이 표기가 됩니다.(사진) 글로 확인하고 싶으시다면 다음 글에서 확인하실 수 있습니다!https://kotlinworld.com/381감사합니다.
- 2
- 1
- 56