λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

빈 ꡬ멍 μ±„μš°κΈ°

[Android][비동기 ν”„λ‘œκ·Έλž˜λ°] Android ν”„λ‘œκ·Έλž˜λ°μ—μ„œ 비동기 ν”„λ‘œκ·Έλž˜λ°μ˜ ν•„μš”μ„±

μ°Έκ³ 

μ•ˆλ“œλ‘œμ΄λ“œ 비동기 ν”„λ‘œκ·Έλž˜λ° μ±…

http://acornpub.co.kr/book/async-android

 

μ•ˆλ“œλ‘œμ΄λ“œ 비동기 ν”„λ‘œκ·Έλž˜λ°

책은 λ°˜μ‘ν˜• μ•± κ°œλ°œμ„ μœ„ν•œ μ•ˆλ“œλ‘œμ΄λ“œ 비동기 ν”„λ‘œκ·Έλž˜λ°μ˜ μ£Όμš” 기법

www.acornpub.co.kr

 

 

μ•ˆλ“œλ‘œμ΄λ“œμ—μ„œ 각 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ 맀우 짧게 κ΅λŒ€ν•˜λ©΄μ„œ CPUλ₯Ό μ‚¬μš©ν•œλ‹€. μš΄μ˜μ²΄μ œκ°€ CPU의 μ‹œκ°„λŸ‰μ„ λΉˆλ²ˆν•˜κ²Œ μŠ€μΌ€μ₯΄λ§ν•΄μ„œ, μ‹œκ°„ λΆ„ν•  λ°©μ‹μœΌλ‘œ μ‚¬μš©ν•œλ‹€. 단일 ν”„λ‘œμ„Έμ„œ λ””λ°”μ΄μŠ€λ„ ν•˜λ‚˜ μ΄μƒμ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ™μ‹œμ— λ™μž‘ν•˜λŠ” κ²ƒμ²˜λŸΌ 보이게 ν•œλ‹€.

ν”„λ‘œμ„ΈμŠ€ μ•ˆμ—μ„œλŠ” ν•˜λ‚˜ μ΄μƒμ˜ μ‹€ν–‰ 쀑인 μŠ€λž˜λ“œλ“€μ΄ μ‘΄μž¬ν•  수 있고, μš΄μ˜μ²΄μ œλŠ” μŠ€λ ˆλ“œμ— CPU μ‹œκ°„λŸ‰μ„ ν• λ‹Ήν•œλ‹€.

 

μ•±μ—μ„œ 메인 μŠ€λ ˆλ“œκ°€ μ‚¬μš©μž μƒν˜Έμž‘μš©(μž…λ ₯, 좜λ ₯) κΈ°λŠ₯을 맑고 μžˆλ‹€. 메인 μŠ€λ ˆλ“œκ°€ λ„ˆλ¬΄ 무거운 κ³„μ‚°μ΄λ‚˜ λ„€νŠΈμ›Œν¬ μž‘μ—… λ“±μœΌλ‘œ λ°”μ˜λ‹€λ©΄ μ‚¬μš©μž μƒν˜Έμž‘μš©μ΄ λŠ¦μ–΄μ§€κ²Œ λ˜λ©΄μ„œ μ‚¬μš©μž κ²½ν—˜μ— 치λͺ…적이닀. 메인 μŠ€λ ˆλ“œλŠ” λ΄‰μ‡„ν•˜λ©΄ μ•ˆλœλ‹€.

 

메인 μŠ€λ ˆλ“œμ—μ„œ 였래 κ±Έλ¦¬λŠ” μž‘μ—…μ„ μ—†μ• κΈ° μœ„ν•΄, λ°±κ·ΈλΌμš΄λ“œμ—μ„œ μž‘μ—…μ„ μ²˜λ¦¬ν•˜κ²Œ ν•˜λ©΄ λœλ‹€. 메인 μŠ€λ ˆλ“œλŠ” μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€λ₯Ό λΆ€λ“œλŸ½κ²Œ κ°±μ‹ ν•˜κ³  μ‚¬μš©μž μƒν˜Έμž‘μš©μ„ μœ„ν•΄ μ μ ˆν•œ μ‹œκ°„μ— μ‘λ‹΅ν•˜λ©΄ λœλ‹€. κ·Έλ ‡κ²Œν•˜κΈ° μœ„ν•΄ ν˜‘μ—…ν•˜λŠ” μŠ€λ ˆλ“œ μ‚¬μ΄μ—μ„œ 데이터λ₯Ό μ•ˆμ „ν•˜κ²Œ 전달해야 ν•œλ‹€. 독립적인 μ½”λ“œλ“€μ„ λ™μ‹œμ— μ‹€ν–‰ν•˜λŠ” 것을 λ™μ‹œμ„±μ΄λΌ λΆ€λ₯Έλ‹€. 

 

μƒˆλ‘œμš΄ μŠ€λ ˆλ“œλ₯Ό μƒμ„±ν•˜λŠ” 것은 μ‰½μ§€λ§Œ, λ™μ‹œμ„±μ΄ 잘 λŒμ•„κ°€κ²Œ ν•˜λŠ” 것은 μ–΄λ ΅λ‹€.

 

λ™μ‹œμ„± μ†Œν”„νŠΈμ›¨μ–΄μ˜ 이슈

 

1) μ •ν™•μ„±correctness : μΌκ΄€λœ μ •ν™•ν•œ κ²°κ³Όλ₯Ό λ§Œλ“¦

μ—¬λŸ¬ μŠ€λ ˆλ“œκ°€ 본인듀 μ„Έκ³„μ—μ„œλŠ” μ˜¬λ°”λ₯΄κ²Œ λ™μž‘ν•œ κ²ƒμ΄λ‚˜, 전체 ν”„λ‘œκ·Έλž¨ μΈ‘λ©΄μ—μ„œ μ •ν™•μ„± μ΄μŠˆκ°€ μƒκΈ°λŠ” 것.

* ν•΄κ²° 방법 : νŠΉμ • μžμ›μ— λ™μ‹œ 접근을 λ§‰λŠ” 것. > μƒν˜Έ 배재mutual exclusion라고 λΆ€λ₯Έλ‹€.

 

2) ν™œλ™μ„±liveness : μ™„λ£Œλ₯Ό ν–₯ν•œ 전진

μ •ν™•μ„± 이슈λ₯Ό 닀루닀가 생긴닀.

μ—¬λŸ¬ μŠ€λ ˆλ“œμ˜ μžμ› 접근을 λ΄‰μ‡„ν•˜λ‹€ λ³΄λ‹ˆ 병λͺ©ν˜„상, λ°λ“œλ½deadlock 등이 μƒκΈ°λŠ” 것이닀.

 

+ μ•ˆλ“œλ‘œμ΄λ“œμ—μ„œ μƒκΈ°λŠ” 이슈

3)  생λͺ…μ£ΌκΈ°

문제 1] 생λͺ…μ£ΌκΈ°λ₯Ό 가진 μΈμŠ€ν„΄μŠ€(μ•‘ν‹°λΉ„ν‹°, ν”„λž˜κ·Έλ¨ΌνŠΈ λ“±)λŠ” 가비지 μ»¬λ ‰μ…˜ λŒ€μƒμ΄ λ˜μ–΄μ•Ό ν•˜λŠ”λ°, 이 μΈμŠ€ν„΄μŠ€μ™€ κ΄€λ ¨λœ λ°±κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œλŠ” 가비지 μ»¬λ ‰μ…˜μ„ ν”Όν•˜κ±°λ‚˜ λ©”λͺ¨λ¦¬ λˆ„μˆ˜κ°€ 일어날 수 있음.

문제 2] 생λͺ…μ£ΌκΈ°λ₯Ό 가진 μΈμŠ€ν„΄μŠ€κ°€ μ’…λ£Œν•  수 μ—†μ–΄μ„œ λ°±κ·ΈλΌμš΄λ“œ μž‘μ—…μ΄ κ³„μ†λ˜λŠ” 경우 CPU, 배터리 λ‚­λΉ„ λ°œμƒμ΄ κ°€λŠ₯ν•˜λ‹€.  

문제 3] μ•ˆλ“œλ‘œμ΄λ“œ μ‹œμŠ€ν…œμ΄ μ’…λ£Œν•˜λ €κ³  ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€μ—μ„œ 아직 μž‘μ—…μ€‘μΈ λ°±κ·ΈλΌμš΄λ“œ μž‘μ—…μ΄ μžˆλ‹€λ©΄, ν”„λ‘œμ„ΈμŠ€λ₯Ό 아직 μ’…λ£Œν•˜μ§€ μ•Šμ•˜μŒμ„ μ‹œμŠ€ν…œμ— μ•Œλ €μ€˜μ•Ό 함.

> λ°±κ·ΈλΌμš΄λ“œ μž‘μ—…μ„ μ μ ˆν•˜κ²Œ μ·¨μ†Œν•˜κ±°λ‚˜ 생λͺ…μ£ΌκΈ°λ‘œλΆ€ν„° μ μ ˆν•œ 곳으둜 λΆ„λ¦¬μ‹œμΌœμ•Ό ν•œλ‹€.

 

4) μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€μ˜ μ‘°μž‘

였직 메인 μŠ€λ ˆλ“œλ§Œμ΄ μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‘°μž‘ν•  수 μžˆλ‹€.

 

κ²°κ³Ό

메인 μŠ€λ ˆλ“œκ°€ λ°±κ·ΈλΌμš΄λ“œ μž‘μ—… 결과와 ν•¨κ»˜ μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ°±μ‹ ν•˜λ„λ‘ λ°±κ·ΈλΌμš΄λ“œ μŠ€λ ˆλ“œλ₯Ό 메인 μŠ€λ ˆλ“œμ™€ ν•¨κ»˜ μ•ˆμ „ν•˜κ²Œ 동기화해야 ν•œλ‹€.