2016๋ devfest์์ แแ กแซแแ ณแ แ ฉแแ ตแแ ณ แแ ขแแ กแฏแแ ฆ แแ ฒแแ ญแผแแ กแซ แแ ฉแแ ฎแแ ณแฏ์ด๋ ์ฃผ์ ๋ก ๋ฐํํ ๋ ์๋๋ก์ด๋ ์คํ๋์ค์ ๋๋ฒ๊ฑฐ ํ์ ์ด์ง ๋ค๋ค๋๋ฐ, ์ผ๋ง ์ ์ฌ๋ด ํ ์คํฐ๋์์ ๋ค์ ํ๋ฒ ์ ๋ฆฌํ ๋ด์ฉ์ ๊ณต์ ํด๋ณธ๋ค.
๋จ์ ํ ์คํธ์ ์ด๋ ค์ ๋๋ฌธ์ธ์ง ๋ชฐ๋ผ๋ ์๋๋ก์ด๋ ์ฑ์ ๋ง๋ค๋ค๋ณด๋ฉด ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ํ ๋ ๋ณด๋ค ๋๋ฒ๊ฑฐ์ ์์กดํ ์ผ์ด ๋ง๋ค. ์ด ๋ ๋ช ๊ฐ์ง ๋๋ฒ๊ฑฐ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ ์๋, ํนํ๋ ๋๋ฒ๊น ์๊ฐ์ ๋ง์ด ๋จ์ถํ ์ ์์ ๊ฒ์ด๋ค.
์๋ ๋ชจ๋ ์ค๋ช ์ ๋งฅ์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑํ๋ค. ํ์ง๋ง ์๋์ฐ๋ ๋จ์ถํค๋ง ์ด์ง ๋ค๋ฅผ ๋ฟ ๋ชจ๋ ๊ธฐ๋ฅ์ ๋์ผํ๋ค.
์ฝ๋์ ๋ผ์ธ ๋ฒํธ ์ฌ์ด์ ๊ณต๊ฐ์ ํด๋ฆญํ๋ฉด ์ค๋จ์ ์ ์ค์ ํ ์ ์๋ค.
๋๋ฒ๊น
์ ํ๋ ค๋ฉด ์ฑ์ ๋๋ฒ๊น
๋ชจ๋๋ก ์คํํ๊ฑฐ๋, ์คํ์ค์ธ ์๋๋ก์ด๋ ์ฑ์ ๋๋ฒ๊ฑฐ๋ฅผ ๋ถ์ด๋ฉด ๋๋ค. ๋๊ฒ๋ ์คํ์ค์ธ ์ฑ์ ๋๋ฒ๊ฑฐ๋ฅผ ๋ถ์ด๋ ๋ฐฉ์์ ์ฌ์ฉํ๊ฒ ๋๋ค. ์ด ๋ช
๋ น์ ํด๋ฐ์ ์์ด์ฝ์ ๋๋ฅด๊ฑฐ๋, Cmd+Shift+A ๋ฅผ ๋๋ฅด๋ฉด ๋์ค๋ ๋ช
๋ น ๊ฒ์ ์ฐฝ์์ Attach debugger to Android process๋ฅผ ์ ํํด์ ์คํํ ์ ์๋ค. ๊ธฐ์์ด๋ฉด ๋จ์ถํค๋ฅผ ํ๋ ์ง์ ํ๋ ํธ์ ๊ถ์ฅํ๋ค.
์ค๋จ์ ์ ๋์์ด ๋ฉ์ถ ์ํ์์ ๋ค์ ๋ผ์ธ์ผ๋ก ๋์ด๊ฐ๊ฑฐ๋, ํจ์ ํธ์ถ ๋ด๋ถ๋ก ์ด๋ํ๋ ๋ฑ์ผ๋ก ํ๋ก๊ทธ๋จ์ ์์ฐจ์ ์ผ๋ก ์คํํ ์ ์๋ค.
์คํ์ด ๋ฉ์ถ ์ํ์์ ๋ค์ํ ๊ฐ์ฒด๋ ๋ณ์๋ค์ ๊ฐ์ ํ๊ฐํ๊ฑฐ๋ ์กฐ์ํ ์ ์๋ค. ์ฝํ๋ฆฐ์์ val ๋ก ์ ์ธ๋ ๋ณ์์ ๊ฐ์ ๋ฐ๊ฟ ์ ์์ง๋ง, ๋๋ฒ๊ฑฐ์์ ๊ทธ๋ฐ ์ ์ฝ์์ด ๋ชจ๋ ์กฐ์ํ ์ ์๋ค.
Option + F8 ์ ๋๋ฌ Evaluate ๊ธฐ๋ฅ์ ์คํํ๋ฉด ํํ์์ ์ด์ฉํด ๊ฐ์ ํ๊ฐํ ์ ์๋ค. ์๋์์ฑ๋ ์ง์ํ๋ค. ์ฝํ๋ฆฐ์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ expression ๋ชจ๋์ธ๋ฐ, ์ด ๊ฒฝ์ฐ ํ๋์ ํํ์๋ง ์
๋ ฅํ ์ ์๋ค. ๊ฐ๋จํ ํํ์์ ๊ฒฝ์ฐ Expression ๋ชจ๋๊ฐ ํธํ์ง๋ง ํ๋์ ํํ์๋ง์ผ๋ก ์ํ๋ ํ๊ฐ๊ฐ์ ์ป๊ธฐ ํ๋ค ๊ฒฝ์ฐ์ evaluate ํ์
์ฐ์๋จ์ ํ๋/์ถ์ ๋ชจ์ ์์ด์ฝ์ ๋๋ฌ Code fragment ๋ชจ๋๋ก ์ ํํ๋ฉด ์ฌ๋ฌ ์ค๋ก ํ๊ฐ ํํ์์ ๋ง๋ค์ด๋ผ ์ ์๋ค.
์ง์์ ์ผ๋ก ๊ด์ฐฐํด์ผ ํ๋ ํํ์์ Watch๊ธฐ๋ฅ์ ์ด์ฉํด ๋ฑ๋กํด๋๋ฉด ๋งค๋ฒ ํ๊ฐ์์ ์
๋ ฅํ์ง ์์๋ ๋๋ค.
Code fragment ๋ชจ๋
Watch
ํ๊ฐ ๋ฟ ์๋๋ผ ๊ฐ์ ๋ฐ๊ฟ๋ฒ๋ฆด ์๋ ์๋ค. http response code๊ฐ 200์ด ๋จ์ด์ก์ง๋ง 500์ผ๋ก ๋ฐ๊ฟ๋ฒ๋ฆฌ๋ ๋ฑ์ ์กฐ์์ ์ฝ๊ฒ ํ ์ ์๋ค.
Variable ๋ชฉ๋ก์์ ์ฐํด๋ฆญ > Set value... ๋ฉ๋ด๋ฅผ ์ ํํ๋ฉด ๋๋ค. ๋จ์ํ ์ซ์/๋ฌธ์๊ฐ ๋ฟ ์๋๋ผ ๊ฐ์ฒด ์ธ์คํด์ค๋ ์๋ก ๋ง๋ค์ด์ ๊ต์ฒดํ ์ ์๋ค. ์ธ์คํด์ค๋ฅผ ๋ฐ๊พธ๊ณ ์ถ๋ค๋ฉด ์
๋ ฅ์ฐฝ์ ์์ฑ์๋ฅผ ์
๋ ฅํ๋ฉด ๋๋ค.
Set Value... ๋ฉ๋ด
์์ฑ์๋ฅผ ์
๋ ฅํ์ฌ ๊ฐ์ฒด ๋ฐ๊พธ๊ธฐ
์ด์ ์ค๋จ์ ์์ ์ฐํด๋ฆญํ๋ฉด ๋์ค๋ ์ต์
์ฐฝ์ ์ฃผ์ ๊ธฐ๋ฅ์ ๋ค๋ค๋ณธ๋ค. ์ต์
์ฐฝ์์ More ์์ญ์ ๋๋ฅด๋ฉด ๋์ฑ ์ธ๋ถ์ ์ธ ์ค์ ์ ํ ์ ์๋ ์ฐฝ์ด ๋ฌ๋ค.
๋ฐ๋ณต๋ฌธ์ผ๋ก 100๋ช ์ user list ๋ฅผ ์ํํ๋ค๊ฐ name ์ด "ํ๊ธธ๋" ์ธ ๊ฐ์ฒด์๋ง ๋ฑ ๋ฉ์ถ๊ณ ์ถ๋ค๋ฉด ์ด๋ป๊ฒ ํ ๊น? ๋ฌด์กฐ๊ฑด ์ค๋จ์ ์ ๊ฑธ๊ณ , ํ๊ธธ๋์ด ๋์ฌ ๋ ๊น์ง resume์ ์ฐํํด์ผ ํ ๊น?
์ด ๋ Condition ์ต์
์ ํ์ฉํ๋ฉด ๋๋ค. ์ด ์ต์
์ ์ผ๋ฉด, ์
๋ ฅํ ํํ์์ ํ๊ฐ ๊ฒฐ๊ณผ๊ฐ true์ผ ๊ฒฝ์ฐ์๋ง ์ค๋จ์ ์์ ๋์์ ๋ฉ์ถ๋ค. ๋ฐ๋ผ์ user.name == "ํ๊ธธ๋" ์ด๋ฐ ํํ์์ ์
๋ ฅํ๋ฉด ๊ฐ๋จํ๊ฒ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค.
์๋งคํ์ผ๋ก More ์์ธ์ต์
์ฐฝ์ ์ด๋ฉด ๋ณด์ด๋ Pass count ์ต์
๋ ์๋ค. ์ด ์ต์
์ n๋ฒ ๊น์ง ๋ฉ์ถ์ง ๋ง๋ผ๋ ๊ธฐ๋ฅ์ด๋ค. 100๊ฐ์ ๋ฆฌ์คํธ๋ฅผ ์ํํ๋๋ฐ 35๋ฒ์ ๊ฑด๋๋ฐ๊ณ ๊ทธ ๋ค์์ ๋ฉ์ถ๊ณ ์ถ๋ค๋ฉด Pass count์ 35๋ฅผ ์
๋ ฅํ๋ฉด ๋๋ค. ํ์ง๋ง ํ๋ฒ ๋ฉ์ถ ๋ค์์ ๋ค์ ๋ฉ์ถ์ง ์๋๋ค๊ณ ๋ฌธ์์ ๋์์์ผ๋ Condition ์ต์
๊ณผ ์ ์ ํ ๋น๊ตํด์ ์ฌ์ฉํ๊ธธ ๋ฐ๋๋ค.
์๋, ๋ฉ์ถ๋ผ๊ณ ์ค๋จ์ ๊ฑฐ๋๊ฑฐ ์๋์ผ? ์ถ์ง๋ง ์ ๋ฉ์ถ๋ ์ค๋จ์ ์ ๋๋ฆ ๋งค์ฐ ์ ์ฉํ ๊ธฐ๋ฅ์ด๋ค. ๊ฐ๋ฐ์ ํ๋ค ๋ฌํ ๋ฒ๊ทธ ์ํฉ์ ๋ฅ์ณค์ ๋ ์ฝ๊ฒ ํ ์ ์๋ ์ ํ์ Log.d("์ฌ๊ธฐ ๋์ฐฉํ์ - a = ${a}" ) ์ด๋ฐ ์์ ์์ ๋ก๊ทธ ๋ก์น ์ด๋ค. ํ์ง๋ง ์๋์ ๊ฐ์ ์ํฉ์ด ์ฝ๊ฒ ๋ฐ์ํ๋ค.
(๋ก๊ทธ ๋ถ์ด๊ณ ์ฌ๋น๋)
์, ๋ก๊ทธ๊ฐ ๋น ์ก๋ค? ์ฌ๊ธฐ๋ ๋ ๋ก๊ทธ ๋ฃ์! (์ฌ๋น๋)
์์ด๊ณ ์ฌ๊ธฐ๊ฐ ์๋๊ฐ๋ฒผ... ์ฌ๊ธฐ๋ ๋ก๊ทธ ๋ฃ์! (์ฌ๋น๋)
์๋๋ก์ด๋์ ๊ฒฝ์ฐ์ ๋น๋ ์๊ฐ๋ ๋ฌด์๋ชปํ๊ธฐ์ ์ด๋ฌ๋ค๋ณด๋ฉด ๊ธ๋ฐฉ ์๊ฐ์ ํ๋นํ๊ฒ ๋๋ค. ์ด ๋์ ์ ๋ฉ์ถ๋ ์ค๋จ์ ์ ์ด์ฉํ๋ฉด ์ฝ๊ฒ ์๋์ ๋ชฉ์ ์ ๋ฌ์ฑํ ์ ์๋ค.
์ต์
์ฐฝ์์ ๊ธฐ๋ณธ์ผ๋ก ์ผ์ ธ์๋ Suspend ์ต์
์ ๋๋ฉด ์ ๋ฉ์ถ๋ ์ค๋จ์ ์ด ๋๋ค. ์ด๋ ๊ฒ๋ง ํด์ ์๋ฏธ๊ฐ ์๊ณ , ์๋ ํ๋ฉด๊ณผ ๊ฐ์ด Log message to console ์ด๋ Evaluate and log ์ต์
์ ์ผ์ผ ์๋ฏธ๊ฐ ์๋ค. ์ด ๋ก๊ทธ๋ debug ์๋์ฐ์ console ํญ์ ํ์๋๋ค. ๊ดํ logcat ๋ค์ฌ๋ค๋ณด๋ฉด์ ์ ์์ฐํ๋๊ณ ํ์ง ๋ง์.
์ต์
์ค์
์ถ๋ ฅ๋ ๋ก๊ทธ
์ด ๊ธ์์ ๋ค๋ฃฌ ๋ด์ฉ์ ๋ค intellij ์ค๋ช ์์ Debugging์ ๋์์๋ค. ์ฝ๊ธฐ ํ๋ค์ด์ ๋ฌธ์ ์ด์ง. ๋ ์์๋ณด๊ณ ์ถ์ ๋ถ์ ์ ๋ฌธ์๋ฅผ ์ฐฌ์ฐฌํ ์ฝ์ด๋ณด์๊ธฐ ๋ฐ๋๋ค.