๊ธฐ์—…์šฉ JVM ๋ฐ ์•ˆ๋“œ๋กœ์ด๋“œ ์‹œ์Šคํ…œ์„ ์œ„ํ•œ Kotlin ์ •์  ๋ถ„์„ ๋„๊ตฌ

๊ธฐ์—…์šฉ JVM ๋ฐ ์•ˆ๋“œ๋กœ์ด๋“œ ์‹œ์Šคํ…œ์„ ์œ„ํ•œ Kotlin ์ •์  ๋ถ„์„ ๋„๊ตฌ

๊ธฐ์—…์šฉ JVM ๋ฐ Android ํฌํŠธํด๋ฆฌ์˜ค์—์„œ Kotlin ๋„์ž…์€ ์ผ๊ด€๋œ ํŒจํ„ด์„ ๋”ฐ๋ฅด์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ฃผ๋กœ Android ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ, Java ์„œ๋น„์Šค์˜ ์„ ํƒ์  ์žฌ์ž‘์„ฑ, ๋˜๋Š” ์•„ํ‚คํ…์ฒ˜ ํ†ตํ•ฉ๋ณด๋‹ค๋Š” ๊ฐœ๋ฐœ ์†๋„๋ฅผ ์šฐ์„ ์‹œํ•˜๋Š” ํ”Œ๋žซํผ ํ‘œ์ค€ํ™” ๋…ธ๋ ฅ ๋“ฑ์„ ํ†ตํ•ด ๋„์ž…๋ฉ๋‹ˆ๋‹ค. ์ •์  ๋ถ„์„์€ ์ด๋Ÿฌํ•œ ํ™˜๊ฒฝ์—์„œ ์ œ์–ด๋ ฅ์„ ๋˜์ฐพ๊ธฐ ์œ„ํ•œ ์‹œ๋„๋กœ ๋“ฑ์žฅํ•˜์ง€๋งŒ, ํŒŒํŽธํ™”๋œ ๋นŒ๋“œ ๊ทธ๋ž˜ํ”„, ํ˜ผํ•ฉ๋œ ์–ธ์–ด ์‹คํ–‰ ํ™˜๊ฒฝ, ๊ทธ๋ฆฌ๊ณ  ํŒ€ ๊ฐ„์˜ ๋„๊ตฌ ํ™œ์šฉ๋„ ์ฐจ์ด๋กœ ์ธํ•ด ๊ทธ ํšจ๊ณผ๊ฐ€ ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค.

๋Œ€๊ทœ๋ชจ ์กฐ์ง์—์„œ Kotlin ์ฝ”๋“œ๋Š” ๋‹จ๋…์œผ๋กœ ์‹คํ–‰๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋“œ๋ญ…๋‹ˆ๋‹ค. Java ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์ปดํŒŒ์ผ๋˜๊ณ , ์˜์กด์„ฑ ์ฃผ์ž… ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ†ตํ•ด ํ†ตํ•ฉ๋˜๋ฉฐ, ๋‹ค์–‘ํ•œ ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์— ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ •์  ๋ถ„์„์€ Kotlin ์†Œ์Šค ํŒŒ์ผ ๋‚ด์—์„œ๋งŒ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ปดํŒŒ์ผ ๊ฒฝ๊ณ„๋ฅผ ๋„˜์–ด ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹ฌ๋ณผ์ด JVM ๋ฐ Android ๋นŒ๋“œ ํŒŒ์ดํ”„๋ผ์ธ์„ ํ†ตํ•ด ์–ด๋–ป๊ฒŒ ์ „ํŒŒ๋˜๋Š”์ง€ ๋ช…ํ™•ํ•˜๊ฒŒ ํŒŒ์•…ํ•˜์ง€ ๋ชปํ•˜๋ฉด ๋ถ„์„ ๊ฒฐ๊ณผ๊ฐ€ ์‹ค์งˆ์ ์ธ ์‹ ํ˜ธ๊ฐ€ ์•„๋‹Œ ๋‹จ์ˆœํ•œ ์„ค๋ช… ์ž๋ฃŒ๋กœ ์ „๋ฝํ•  ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

Kotlin์˜ ์˜ํ–ฅ ๋ถ„์„

Smart TS XL์€ ๊ธฐ์—…์ด ์ €์žฅ์†Œ ๊ฒฝ๊ณ„๋ฅผ ๋„˜์–ด Kotlin ๋ณ€๊ฒฝ ์•ˆ์ „์„ฑ์— ๋Œ€ํ•ด ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ ํƒ์ƒ‰

๊ธฐ์—… ํ˜„๋Œ€ํ™” ํ”„๋กœ๊ทธ๋žจ์€ Kotlin ๋ถ„์„์˜ ์—ญํ• ์„ ๋”์šฑ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. Kotlin์— ๋„์ž…๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋ ˆ๊ฑฐ์‹œ Java ์„œ๋น„์Šค, ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ์™ธ๋ถ€ ํ†ตํ•ฉ ๊ณ„์ธต์— ํŒŒ๊ธ‰ ํšจ๊ณผ๋ฅผ ๋ฏธ์น˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŒŒ๊ธ‰ ํšจ๊ณผ๋ฅผ ์ดํ•ดํ•˜๋ ค๋ฉด ๊ทœ์น™ ์‹œํ–‰ ์ด์ƒ์˜ ๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ ๊ตฌ์กฐ๊ฐ€ ์‹คํ–‰ ๋™์ž‘๊ณผ ์–ด๋–ป๊ฒŒ ์ผ์น˜ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ถ”์  ๊ฐ€๋Šฅํ•œ ํ†ต์ฐฐ๋ ฅ์ด ํ•„์š”ํ•˜๋ฉฐ, ์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ œ์™€ ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ด€๋ จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ ์ถ”์ ์„ฑ ๊ทผ๊ฐ„์ด ๋˜๋Š” ํ˜„๋Œ€ํ™” ์—ญ๋Ÿ‰์œผ๋กœ์„œ.

Kotlin ์‚ฌ์šฉ์ด ํ™•๋Œ€๋จ์— ๋”ฐ๋ผ ์ •์  ๋ถ„์„์€ ๋Œ€๊ทœ๋ชจ ํ™˜๊ฒฝ์—์„œ ๊ฑฐ๋ฒ„๋„Œ์Šค, ๋ณด์•ˆ ์ƒํƒœ ๋ฐ ๋ณ€๊ฒฝ ์•ˆ์ „์„ฑ์„ ์ง€์›ํ•˜๋Š” ๋ฐ ์ ์  ๋” ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ๋Œ€๋Š” ๋ถ„์„์„ ๋…๋ฆฝ์ ์ธ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋กœ ์ทจ๊ธ‰ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š” ๋” ๊ด‘๋ฒ”์œ„ํ•œ ์‹œ์Šคํ…œ ์ธํ…”๋ฆฌ์ „์Šค ๊ณ„์ธต์˜ ์ผ๋ถ€๋กœ ์ธ์‹ํ•ด์•ผ ํ•œ๋‹ค๋Š” ํ•œ๊ณ„๋ฅผ ๋“œ๋Ÿฌ๋ƒ…๋‹ˆ๋‹ค. ๋ฆฐํŒ…, ์˜๋ฏธ๋ก ์  ์ถ”๋ก  ๋ฐ ์ •์  ๋ถ„์„์„ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ •์  ์†Œ์Šค Kotlin์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์žกํ•œ JVM ๋ฐ Android ์ƒํƒœ๊ณ„์™€ ์•ˆ์ •์ ์œผ๋กœ ๊ณต์กดํ•ด์•ผ ํ•˜๋Š” ๊ธฐ์—…์—๊ฒŒ๋Š” ์ด๋Ÿฌํ•œ ์ดํ•ด๊ฐ€ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

์ฐจ๋ก€

JVM ๋ฐ Android ํฌํŠธํด๋ฆฌ์˜ค์—์„œ Kotlin ์ •์  ๋ถ„์„์„ ์ œ์–ด ํ‰๋ฉด์œผ๋กœ ํ™œ์šฉํ•˜๊ธฐ

Kotlin ํ™˜๊ฒฝ์—์„œ ์ •์  ๋ถ„์„์€ ๊ฐœ๋ฐœ์ž์˜ ํŽธ์˜๋ฅผ ์œ„ํ•œ ๋„๊ตฌ๊ฐ€ ์•„๋‹Œ ์•„ํ‚คํ…์ฒ˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ ๊ฐ„์ฃผ๋  ๋•Œ ๋น„๋กœ์†Œ ์ œ์–ด ํ‰๋ฉด์œผ๋กœ์„œ์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ JVM ๋ฐ Android ํฌํŠธํด๋ฆฌ์˜ค์—์„œ Kotlin์€ ์ด๋ฏธ ๊ธฐ์กด์˜ ๊ณ„์ธต ๊ตฌ์กฐ, ๋Ÿฐํƒ€์ž„ ๊ฒฐํ•ฉ๋„, ์šด์˜์ƒ์˜ ์ œ์•ฝ ์กฐ๊ฑด์„ ์•ˆ๊ณ  ์žˆ๋Š” ์‹œ์Šคํ…œ์— ๋„์ž…๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ถ„์„์€ ๊ฐœ๋ณ„ ์ €์žฅ์†Œ๋‚˜ ํŒ€ ์ฐจ์›์ด ์•„๋‹Œ, ์กฐ์ง์  ๋ฐ ๊ธฐ์ˆ ์  ๊ฒฝ๊ณ„๋ฅผ ๋„˜์–ด ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฃผ๋œ ๊ฐˆ๋“ฑ์€ ์ฝ”ํ‹€๋ฆฐ์˜ ํ‘œํ˜„๋ ฅ์ด ํ’๋ถ€ํ•œ ์ถ”์ƒํ™” ๋ชจ๋ธ๊ณผ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์‹œ์Šคํ…œ์— ์š”๊ตฌ๋˜๋Š” ์šด์˜์ƒ์˜ ๊ธฐ๋Œ€์น˜ ์‚ฌ์ด์˜ ๋ถˆ์ผ์น˜์—์„œ ๋น„๋กฏ๋ฉ๋‹ˆ๋‹ค. ์ฝ”ํ‹€๋ฆฐ์€ ํ‘œ๋ฉด์ ์ธ ๊ฒ€์‚ฌ๋กœ๋Š” ๊ด€๋ฆฌํ•˜๊ธฐ ์–ด๋ ค์šด ๋ณต์žกํ•œ ๋กœ์ง, ์•”๋ฌต์ ์ธ ๊ณ„์•ฝ, ๊ทธ๋ฆฌ๊ณ  ํ”„๋ ˆ์ž„์›Œํฌ ๊ธฐ๋ฐ˜์˜ ์‹คํ–‰ ๊ฒฝ๋กœ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ •์  ๋ถ„์„์€ ์ด๋Ÿฌํ•œ ์‹œ์Šคํ…œ์— ๊ด€์ฐฐ ๊ฐ€๋Šฅ์„ฑ์„ ํšŒ๋ณต์‹œ์ผœ ์ค„ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€๋˜์ง€๋งŒ, ๊ทธ ์„ฑ๊ณต ์—ฌ๋ถ€๋Š” ์‹คํ–‰ ํ˜„์‹ค, ์˜์กด์„ฑ ๊ตฌ์กฐ, ๊ทธ๋ฆฌ๊ณ  ๋ฐฐํฌ ๋ฐฉ์‹๊ณผ์˜ ์กฐํ™”์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๊ตญ์–ด ์‹คํ–‰ ๊ทธ๋ž˜ํ”„ ๋‚ด ์ •์  ๋ถ„์„ ์œ„์น˜ ์ง€์ •

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ JVM ํ™˜๊ฒฝ์—์„œ Kotlin ์ฝ”๋“œ๋Š” ์‹คํ–‰ ๊ฒฝ๋กœ๋ฅผ ๋‹จ๋…์œผ๋กœ ์†Œ์œ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋“œ๋ญ…๋‹ˆ๋‹ค. ์ข…์ข… Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์‹คํ–‰์„ ์œ„์ž„ํ•˜๊ฑฐ๋‚˜, ์ƒ์„ฑ๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, Kotlin์ด ์•„๋‹Œ ์„œ๋น„์Šค์—์„œ ํ˜ธ์ถœ๋˜๋Š” API๋ฅผ ๋…ธ์ถœํ•˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. Kotlin ์†Œ์Šค ์ฝ”๋“œ ๋‚ด์—์„œ๋งŒ ์ž‘๋™ํ•˜๋Š” ์ •์  ๋ถ„์„์œผ๋กœ๋Š” ์ด๋Ÿฌํ•œ ์ƒํ˜ธ ์ž‘์šฉ์„ ์ •ํ™•ํ•˜๊ฒŒ ๋ชจ๋ธ๋งํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ถ„์„์€ Kotlin ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์—ฌ๋Ÿฌ ์–ธ์–ด, ๋นŒ๋“œ ์ œํ’ˆ ๋ฐ ๋Ÿฐํƒ€์ž„ ์ปจํ…Œ์ด๋„ˆ์— ๊ฑธ์ณ ์žˆ๋Š” ๋” ๋„“์€ ์‹คํ–‰ ๊ทธ๋ž˜ํ”„ ๋‚ด์— ์œ„์น˜์‹œ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Kotlin ์„œ๋น„์Šค๊ฐ€ ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ํ”Œ๋žซํผ ๊ตฌ์„ฑ ์š”์†Œ์— ์ฐธ์—ฌํ•  ๋•Œ ์ด๋Ÿฌํ•œ ์œ„์น˜ ์ง€์ • ๋ฌธ์ œ๊ฐ€ ๋ถ„๋ช…ํ•ด์ง‘๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Kotlin ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์ง๋ ฌํ™” ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ†ตํ•ด Java ๋˜๋Š” JVM ์ด์™ธ์˜ ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ํ•˜์œ„ ์†Œ๋น„์ž์—๊ฒŒ ์ „ํŒŒ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์–ธ์–ด ๊ฐ„ ๊ทธ๋ž˜ํ”„ ์ธ์‹์ด ์—†์œผ๋ฉด ์ •์  ๋ถ„์„ ๊ฒฐ๊ณผ๋Š” ๋กœ์ปฌ์—๋งŒ ๊ตญํ•œ๋˜์–ด ์‹œ์Šคํ…œ์  ์˜ํ–ฅ์„ ์ „๋‹ฌํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ•œ๊ณ„๋Š” ์•ž์„œ ๋…ผ์˜๋œ ๋” ๊ด‘๋ฒ”์œ„ํ•œ ๋ฌธ์ œ์™€ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„ ์œ„ํ—˜ ๊ฐ์†Œ๋ถˆ์™„์ „ํ•œ ๊ฐ€์‹œ์„ฑ์œผ๋กœ ์ธํ•ด ๋ณ€ํ™”์˜ ๊ฒฐ๊ณผ๊ฐ€ ๊ณผ์†Œํ‰๊ฐ€๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋งฅ๋ฝ์—์„œ ํšจ๊ณผ์ ์ธ ์ •์  ๋ถ„์„์€ Kotlin์„ ์ด๊ธฐ์ข… ์‹คํ–‰ ๊ทธ๋ž˜ํ”„ ๋‚ด์˜ ํ•˜๋‚˜์˜ ๋…ธ๋“œ ์œ ํ˜•์œผ๋กœ ์ทจ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. Kotlin ์‹ฌ๋ณผ๊ณผ ๋ฐ”์ดํŠธ์ฝ”๋“œ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์—ฐ๊ด€์‹œํ‚ค๊ณ , ์–ธ์–ด ๊ฒฝ๊ณ„๋ฅผ ๋„˜๋‚˜๋“œ๋Š” ํ˜ธ์ถœ ์ฒด์ธ์„ ์ถ”์ ํ•˜๋ฉฐ, ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜๋ฉด์„œ ์˜์กด์„ฑ ๋ฐฉํ–ฅ์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ํ†ตํ•ด ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ๊ฒฐ์ •์„ ๋‚ด๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ณ€๋™์„ฑ์ด ํฐ Kotlin ๋ชจ๋“ˆ์„ ๊ฒฉ๋ฆฌํ•˜๊ฑฐ๋‚˜ ๊ณต์œ  ๊ณ„์•ฝ์„ ์žฌ๊ตฌ์„ฑํ•˜์—ฌ ์˜ํ–ฅ ๋ฒ”์œ„๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ํฌ์ง€์…”๋‹์ด ๋ถ€์กฑํ•˜๋ฉด ์ข…์ข… ์ž˜๋ชป๋œ ํ™•์‹ ์œผ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„๊ตฌ๋Š” ์•„ํ‚คํ…์ฒ˜ ๊ฒฐํ•ฉ๋„๊ฐ€ ๊ณ„์† ์ฆ๊ฐ€ํ•˜๋Š” ๋™์•ˆ์—๋„ ๋ฌธ์ œ ๋ฐœ์ƒ ๊ฑด์ˆ˜๊ฐ€ ๊ฐ์†Œํ•œ๋‹ค๊ณ  ๋ณด๊ณ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •์  ๋ถ„์„์€ ์ฝ”ํ‹€๋ฆฐ ์ฝ”๋“œ๊ฐ€ ์‹œ์Šคํ…œ ์ „์ฒด ์‹คํ–‰์— ์–ด๋–ป๊ฒŒ ์ฐธ์—ฌํ•˜๋Š”์ง€, ๋‹จ์ˆœํžˆ ๋กœ์ปฌ ๊ทœ์น™์„ ์ค€์ˆ˜ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋งŒ์„ ๋ณด์—ฌ์ค„ ๋•Œ ๋น„๋กœ์†Œ ์ œ์–ด ํ‰๋ฉด์œผ๋กœ์„œ์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Kotlin ๋ถ„์„ ์›Œํฌํ”Œ๋กœ์—์„œ ์ œ์–ด์™€ ํ”ผ๋“œ๋ฐฑ์˜ ๊ด€๊ณ„

Kotlin ๋ถ„์„ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ์‹คํŒจ ํŒจํ„ด์€ ํ”ผ๋“œ๋ฐฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ์ œ์–ด ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ˜ผ๋™ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. IDE ๊ฒ€์‚ฌ, ๋ฆฐํ„ฐ, ์ปค๋ฐ‹ ์ „ ๊ฒ€์‚ฌ๋Š” ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์‹ ์†ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ๊ธฐ์—… ํฌํŠธํด๋ฆฌ์˜ค ์ „์ฒด์— ๊ฑธ์ณ ๊ฐ•์ œ์ ์ธ ๊ฒฝ๊ณ„๋ฅผ ์„ค์ •ํ•˜์ง€๋Š” ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์ œ์–ด ํ‰๋ฉด์œผ๋กœ์„œ์˜ ์ •์  ๋ถ„์„์€ ๋‹ค๋ฅธ ์ˆ˜์ค€์˜ ์ถ”์ƒํ™”์™€ ๊ถŒํ•œ์—์„œ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ œ์–ด ์ค‘์‹ฌ ๋ถ„์„์€ ์‹œ๊ฐ„๊ณผ ํŒ€ ์ „๋ฐ˜์— ๊ฑธ์ณ ๋ถˆ๋ณ€์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐœ๋ณ„ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ์ฃผ๊ธฐ๋ฅผ ๋„˜์–ด ์ง€์†๋˜๋Š” ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•œ ์˜์กด์„ฑ ๋ฐฉํ–ฅ, ๋ณต์žก์„ฑ ์ž„๊ณ„๊ฐ’ ๋ฐ ์•„ํ‚คํ…์ฒ˜ ์ œ์•ฝ ์กฐ๊ฑด์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”ํ‹€๋ฆฐ ์‹œ์Šคํ…œ์—์„œ๋Š” ์–ธ์–ด ๊ธฐ๋Šฅ์œผ๋กœ ์ธํ•ด ๋ณต์žก์„ฑ ์ฆ๊ฐ€๊ฐ€ ๊ฐ€๋ ค์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ด๋Ÿฌํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์ด ํŠนํžˆ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ธ๋ผ์ธ ํ•จ์ˆ˜, ํ™•์žฅ ๋ฉ”์„œ๋“œ ๋ฐ DSL ์Šคํƒ€์ผ ๊ตฌ๋ฌธ์€ ๋™์ž‘์„ ๋‹จ์ˆœํ•ด ๋ณด์ด์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ๋ณต์žกํ•œ ํ˜•ํƒœ๋กœ ์••์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ถ„์„์ด ๊ฐœ๋ฐœ์ž ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„์—๋งŒ ๊ตญํ•œ๋˜๋ฉด ์ด๋Ÿฌํ•œ ํŒจํ„ด์€ ์„ฑ๋Šฅ ์ €ํ•˜๋‚˜ ์œ ์ง€ ๊ด€๋ฆฌ ๋ณ‘๋ชฉ ํ˜„์ƒ์œผ๋กœ ๋“œ๋Ÿฌ๋‚  ๋•Œ๊นŒ์ง€ ๋ˆˆ์— ๋„์ง€ ์•Š๊ฒŒ ์ถ•์ ๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด ์ œ์–ด ์ค‘์‹ฌ ๋ถ„์„์€ ์„œ๋น„์Šค ๊ฒฝ๊ณ„ ๋˜๋Š” ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ณ„์•ฝ๊ณผ ๊ฐ™์€ ํฌํŠธํด๋ฆฌ์˜ค ์ˆ˜์ค€์˜ ์ œ์•ฝ ์กฐ๊ฑด์— ๋”ฐ๋ผ Kotlin ์ฝ”๋“œ๋ฅผ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ฐจ์ด์ ์€ ๋” ๊ด‘๋ฒ”์œ„ํ•œ ๋…ผ์˜๋ฅผ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์ •์  ๋ถ„์„ ํ•œ๊ณ„ํ”ผ๋“œ๋ฐฑ ๋„๊ตฌ๋งŒ์œผ๋กœ๋Š” ์ƒˆ๋กญ๊ฒŒ ๋‚˜ํƒ€๋‚˜๋Š” ๊ตฌ์กฐ์  ์œ„ํ—˜์„ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ œ์–ด ๊ณ„์ธต์„ ๊ตฌ์ถ•ํ•˜๋ ค๋ฉด ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ๊ฐœ๋ณ„ ๊ฐœ๋ฐœ์ž ํ™˜๊ฒฝ์—์„œ ๋ถ„๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ถ„์„ ๊ฒฐ๊ณผ๋Š” CI ํ™˜๊ฒฝ์—์„œ ์žฌํ˜„ ๊ฐ€๋Šฅํ•ด์•ผ ํ•˜๊ณ , ์•„ํ‚คํ…์ฒ˜ ๊ทœ์น™๊ณผ์˜ ์—ฐ๊ด€์„ฑ์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜๋ฉฐ, ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๊ฐ์‚ฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ด€์ ์—์„œ ์ •์  ๋ถ„์„์€ ์ฆ‰๊ฐ์ ์ธ ์ˆ˜์ •๋ณด๋‹ค๋Š” Kotlin ๋„์ž…์ด ํ™•๋Œ€๋จ์— ๋”ฐ๋ผ ์žฅ๊ธฐ์ ์ธ ์‹œ์Šคํ…œ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๋ฐ ๋” ์ค‘์ ์„ ๋‘๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Kotlin ๋ถ„์„ ๊ฒฐ๊ณผ๊ฐ€ ํฌํŠธํด๋ฆฌ์˜ค ์ „๋ฐ˜์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ

์ •์  ๋ถ„์„ ๊ฒฐ๊ณผ๋Š” ํฌํŠธํด๋ฆฌ์˜ค ์ˆ˜์ค€์—์„œ ํ•ด์„๋  ์ˆ˜ ์žˆ์„ ๋•Œ ๋น„๋กœ์†Œ ๊ธฐ์—… ๊ฐ€์น˜๋ฅผ ์ง€๋‹™๋‹ˆ๋‹ค. ์ฝ”ํ‹€๋ฆฐ ๋„์ž…์€ ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋ถ€ํ„ฐ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค, ๊ณต์œ  ์ธํ”„๋ผ ๊ตฌ์„ฑ ์š”์†Œ์— ์ด๋ฅด๊ธฐ๊นŒ์ง€ ๋‹ค์–‘ํ•œ ์˜์—ญ์— ๊ฑธ์ณ ์ด๋ฃจ์–ด์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์˜์—ญ ์ „๋ฐ˜์— ๊ฑธ์ณ ์ง‘๊ณ„ํ•˜๊ฑฐ๋‚˜ ๋น„๊ตํ•  ์ˆ˜ ์—†๋Š” ๋ถ„์„ ๊ฒฐ๊ณผ๋Š” ์ „๋žต์ ์ด๋ผ๊ธฐ๋ณด๋‹ค๋Š” ์ „์ˆ ์ ์ธ ์ˆ˜์ค€์— ๊ทธ์นฉ๋‹ˆ๋‹ค.

ํฌํŠธํด๋ฆฌ์˜ค ์ „๋ฐ˜์— ๊ฑธ์นœ ํ•ด์„์„ ์œ„ํ•ด์„œ๋Š” ๋‹ค์–‘ํ•œ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์—์„œ ๋ฐœ๊ฒฌ๋œ ๊ฒฐ๊ณผ๋ฅผ ํ‘œ์ค€ํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ ๋ชจ๋“ˆ์—์„œ ๋ฐœ๊ฒฌ๋œ ๋ฌธ์ œ๋Š” ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์—์„œ ๋™์ผํ•œ ํŒจํ„ด์ด ๋‚˜ํƒ€๋‚ด๋Š” ์šด์˜์ƒ์˜ ์˜ํ–ฅ๊ณผ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ •์  ๋ถ„์„์€ ์ฝ”ํ‹€๋ฆฐ์—์„œ ๋ฐœ๊ฒฌ๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฐํฌ ํ™˜๊ฒฝ์— ๋งž์ถฐ ๋งฅ๋ฝํ™”ํ•˜๊ณ , ์ˆ˜๋ช… ์ฃผ๊ธฐ ์ œ์•ฝ ์กฐ๊ฑด, ๋™์‹œ์„ฑ ๋ชจ๋ธ ๋ฐ ๋Ÿฐํƒ€์ž„ ํ”„๋กœํ•„์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋งฅ๋ฝํ™”๋Š” ํ˜„๋Œ€ํ™” ๊ณ„ํš ์ˆ˜๋ฆฝ์—๋„ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. Kotlin์€ ๊ธฐ์กด Java ์‹œ์Šคํ…œ์ด๋‚˜ ๋น„ JVM ์‹œ์Šคํ…œ์ด ์ƒˆ๋กœ์šด ๊ตฌ์„ฑ ์š”์†Œ์™€ ๊ณต์กดํ•˜๋Š” ์ ์ง„์  ํ˜„๋Œ€ํ™” ๋…ธ๋ ฅ์˜ ์ผํ™˜์œผ๋กœ ์ž์ฃผ ๋„์ž…๋ฉ๋‹ˆ๋‹ค. ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ํ†ตํ•ด ์–ด๋–ค Kotlin ๋ชจ๋“ˆ์ด ์‹œ์Šคํ…œ ๋™์ž‘์„ ์•ˆ์ •ํ™”ํ•˜๋Š”์ง€, ์–ด๋–ค ๋ชจ๋“ˆ์ด ์ƒˆ๋กœ์šด ๊ฒฐํ•ฉ ์œ„ํ—˜์„ ์ดˆ๋ž˜ํ•˜๋Š”์ง€ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ†ต์ฐฐ๋ ฅ๊ณผ๋„ ์ผ๋งฅ์ƒํ†ตํ•ฉ๋‹ˆ๋‹ค. ์ ์ง„์  ํ˜„๋Œ€ํ™” ์ „๋žต๊ฐ€์‹œ์„ฑ์ด ์ˆœ์„œ ๊ฒฐ์ •์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

ํฌํŠธํด๋ฆฌ์˜ค ๊ด€์ ์ด ์—†๋‹ค๋ฉด ์ •์  ๋ถ„์„์€ ๋‹จํŽธ์ ์ธ ๋ณด๊ณ ์„œ๋“ค์˜ ๋ชจ์Œ์œผ๋กœ ์ „๋ฝํ•  ๋ฟ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๊ด€์ ์„ ํ™œ์šฉํ•˜๋ฉด Kotlin ๋ถ„์„์€ ๊ฑฐ๋ฒ„๋„Œ์Šค, ์šฐ์„ ์ˆœ์œ„ ์„ค์ •, ์•„ํ‚คํ…์ฒ˜ ์ง„ํ™”์— ์œ ์šฉํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ œ์–ด ์˜์—ญ์€ ๋ถ„์„ ๊ฒฐ๊ณผ์˜ ์–‘์ด ์•„๋‹ˆ๋ผ, ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์‹œ์Šคํ…œ ์ˆ˜์ค€์˜ ์˜์‚ฌ๊ฒฐ์ •์„ ํ˜•์„ฑํ•˜๋Š” ๋Šฅ๋ ฅ์—์„œ ๋น„๋กฏ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ์—…์šฉ JVM ๋ฐ ์•ˆ๋“œ๋กœ์ด๋“œ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ๋˜๋Š” Kotlin ์ •์  ๋ถ„์„ ๋„๊ตฌ

๊ธฐ์—… ํ™˜๊ฒฝ์—์„œ Kotlin ์ •์  ๋ถ„์„ ๋„๊ตฌ์˜ ์—ญํ• ์€ ์ข…์ข… ์˜คํ•ด๋ฉ๋‹ˆ๋‹ค. ๋„๊ตฌ๋“ค์„ ์„œ๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅํ•œ ์Šค์บ๋„ˆ๋กœ ํ‰๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ๊ฐ ๋„๊ตฌ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ์ˆ˜์ค€์˜ ์˜๋ฏธ๋ก ์  ์ดํ•ด์™€ ์กฐ์ง์  ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. JVM ๋ฐ Android ํฌํŠธํด๋ฆฌ์˜ค์—์„œ Kotlin ๋ถ„์„ ๋„๊ตฌ๋Š” ํƒ์ง€ํ•˜๋Š” ๋ฌธ์ œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ถ„์„ ๋ชจ๋ธ์ด ์ปดํŒŒ์ผ ๊ฒฝ๊ณ„, ๋ฐฐํฌ ํ† ํด๋กœ์ง€, ๊ทธ๋ฆฌ๊ณ  ํŒ€ ๊ฐ„ ๊ฑฐ๋ฒ„๋„Œ์Šค ์š”๊ตฌ ์‚ฌํ•ญ๊ณผ ์–ผ๋งˆ๋‚˜ ์ž˜ ๋ถ€ํ•ฉํ•˜๋Š”์ง€๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ‰๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์—…๋“ค์€ ๋‹จ์ผ ๋ถ„์„ ๋„๊ตฌ๋กœ ํ‘œ์ค€ํ™”ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋“œ๋ญ…๋‹ˆ๋‹ค. ๋Œ€์‹ , ์ฝ”ํ‹€๋ฆฐ ๊ธฐ๋ฐ˜ ๋ถ„์„ ๋„๊ตฌ์™€ ํ”Œ๋žซํผ ์ „๋ฐ˜์˜ ๊ฑฐ๋ฒ„๋„Œ์Šค ์‹œ์Šคํ…œ, ๋ณด์•ˆ ์Šค์บ๋„ˆ๊ฐ€ ๊ณต์กดํ•˜๋Š” ๊ณ„์ธตํ˜• ํˆด์ฒด์ธ์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์˜ ํšจ๊ณผ๋Š” ๊ฐ ๋„๊ตฌ ๋ฒ”์ฃผ์˜ ๋ถ„์„ ํ•œ๊ณ„์™€ ๋ถ„์„ ๊ฒฐ๊ณผ๊ฐ€ ์˜์‚ฌ ๊ฒฐ์ • ๊ณผ์ •์— ์–ด๋–ป๊ฒŒ ๋ฐ˜์˜๋˜๋Š”์ง€๋ฅผ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ตฌ๋ถ„์€ ์†Œ์Šค ์ฝ”๋“œ ๋ถ„์„๊ณผ ๊ด€๋ จ๋œ ๋” ๊ด‘๋ฒ”์œ„ํ•œ ๋…ผ์˜, ์ฆ‰ ๋กœ์ปฌ ๊ฒ€์‚ฌ์™€ ์‹œ์Šคํ…œ ์ˆ˜์ค€ ์ถ”๋ก  ๊ฐ„์˜ ๊ตฌ์กฐ์  ์ฐจ์ด๋ฅผ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.

Smart TS XL์€ ๋‹ค๊ตญ์–ด ์ •์  ๋ฐ ์˜ํ–ฅ ๋ถ„์„ ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.

Smart TS XL์€ Kotlin์„ ๋…๋ฆฝ์ ์ธ ์–ธ์–ด ์˜์—ญ์œผ๋กœ ์ทจ๊ธ‰ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์—์„œ Kotlin ๋„ค์ดํ‹ฐ๋ธŒ ๋ถ„์„๊ธฐ์™€๋Š” ์ฐจ๋ณ„ํ™”๋ฉ๋‹ˆ๋‹ค. ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ JVM ๋ฐ Android ํ™˜๊ฒฝ์—์„œ Kotlin์€ ์„œ๋น„์Šค, ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ๋ ˆ๊ฑฐ์‹œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ณ„์ธต ์—ญํ• ์„ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. Smart TS XL์€ ์ด๋Ÿฌํ•œ ํ˜„์‹ค์„ ๋ฐ˜์˜ํ•˜์—ฌ Java, ๋นŒ๋“œ ์„ค๋ช…์ž ๋ฐ ์™ธ๋ถ€ ํ†ตํ•ฉ ์ง€์ ์„ ํฌํ•จํ•˜๋Š” ๋‹ค๊ตญ์–ด ์ •์  ๋ถ„์„ ๊ทธ๋ž˜ํ”„ ๋‚ด์—์„œ Kotlin์„ ๋ชจ๋ธ๋งํ•ฉ๋‹ˆ๋‹ค.

์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ Kotlin ์ฝ”๋“œ๊ฐ€ ๋‹จ์ผ ์ €์žฅ์†Œ๋ฅผ ๋„˜์–ด ๋น„์ฆˆ๋‹ˆ์Šค ํ•ต์‹ฌ ์‹คํ–‰ ๊ฒฝ๋กœ์— ์ฐธ์—ฌํ•  ๋•Œ ์ค‘์š”ํ•ด์ง‘๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Kotlin ์„œ๋น„์Šค๋Š” ๊ธฐ์กด Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” API๋ฅผ ๋…ธ์ถœํ•˜๊ฑฐ๋‚˜ ํ•˜์œ„ ์‹œ์Šคํ…œ์˜ ๋ฐฐ์น˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด Kotlin ๋„๊ตฌ๋Š” ๋กœ์ปฌ ๋ณต์žก์„ฑ์ด๋‚˜ ์Šคํƒ€์ผ ๋ฌธ์ œ๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, Kotlin ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์‹œ์Šคํ…œ ๊ฒฝ๊ณ„๋ฅผ ๋„˜์–ด ์‹คํ–‰ ํ๋ฆ„์„ ์–ด๋–ป๊ฒŒ ๋ฐ”๊พธ๋Š”์ง€ ์žฌ๊ตฌ์„ฑํ•˜์ง€๋Š” ๋ชปํ•ฉ๋‹ˆ๋‹ค. Smart TS XL์€ ์ด์™€ ๋‹ฌ๋ฆฌ ์ด๊ธฐ์ข… ์ฝ”๋“œ๋ฒ ์ด์Šค ์ „๋ฐ˜์— ๊ฑธ์ณ ์ข…์†์„ฑ ํƒ์ƒ‰, ํ˜ธ์ถœ ์ฒด์ธ ์žฌ๊ตฌ์„ฑ ๋ฐ ์˜ํ–ฅ ์˜์—ญ ์‹๋ณ„์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค.

์•ˆ๋“œ๋กœ์ด๋“œ ํฌํŠธํด๋ฆฌ์˜ค์—์„œ๋„ ์ด๋Ÿฌํ•œ ์–ธ์–ด ๊ฐ„ ๊ด€์ ์€ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. Kotlin UI ๋ ˆ์ด์–ด๋Š” ์ข…์ข… ๊ณต์œ  SDK ๊ตฌ์„ฑ ์š”์†Œ, ๋„ค์ดํ‹ฐ๋ธŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ ๋ชจ๋“ˆ์—๋งŒ ๊ตญํ•œ๋œ ์ •์  ๋ถ„์„์œผ๋กœ๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋” ๋„“์€ ์ƒํƒœ๊ณ„์— ์–ด๋–ป๊ฒŒ ์ „ํŒŒ๋˜๋Š”์ง€ ์™„์ „ํžˆ ์„ค๋ช…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Smart TS XL์€ Kotlin ์•„ํ‹ฐํŒฉํŠธ๋ฅผ JVM ์„œ๋น„์Šค ๋ฐ ๊ณต์œ  ๊ตฌ์„ฑ ์š”์†Œ์™€ ์—ฐ๊ด€์‹œ์ผœ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋ฆด๋ฆฌ์Šค ์ˆœ์„œ ๋ฐ ์œ„ํ—˜ ๊ด€๋ฆฌ ์ „๋žต์„ ์ˆ˜๋ฆฝํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ ‘๊ทผ ๋ฐฉ์‹์˜ ๊ฐ€์น˜๋Š” ์˜ํ–ฅ ๋ถ„์„ ์†Œํ”„ํŠธ์›จ์–ด ํ…Œ์ŠคํŠธ์™€ ๊ด€๋ จ๋œ ๊ธฐ์—…์˜ ์š”๊ตฌ ์‚ฌํ•ญ๊ณผ ์ผ๋งฅ์ƒํ†ตํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ๊ฐœ๋ณ„์ ์ธ ๋ฌธ์ œ์ ์„ ๋‚˜์—ดํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋ฌด์—‡์ด ์˜ํ–ฅ์„ ๋ฐ›๋Š”์ง€ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. Smart TS XL์€ Kotlin ๊ธฐ๋ฐ˜ ๋„๊ตฌ๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์‹œ์Šคํ…œ ์ „๋ฐ˜์˜ ์‹คํ–‰ ๋ชจ๋ธ ๋‚ด์—์„œ ํ•ด๋‹น ๋„๊ตฌ๋“ค์˜ ๊ฒฐ๊ณผ๋ฌผ์„ ๋งฅ๋ฝํ™”ํ•˜๋Š” ํ†ตํ•ฉ ๊ณ„์ธต ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Kotlin ๋„์ž…์ด ํ˜„๋Œ€ํ™” ๋ฐ ๊ฑฐ๋ฒ„๋„Œ์Šค ๊ณ„ํš๊ณผ ๊ต์ฐจํ•˜๋Š” ํฌํŠธํด๋ฆฌ์˜ค์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

Kotlin ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ ๋ฐ ๋ณต์žก์„ฑ ๋ถ„์„์„ ์œ„ํ•œ Detekt

Detekt๋Š” ๊ตฌ์กฐ์  ํ’ˆ์งˆ๊ณผ ์–ธ์–ด ํŠน์œ ์˜ ํŒจํ„ด์— ์ดˆ์ ์„ ๋งž์ถ˜ ๊ฐ€์žฅ ์˜ค๋ž˜๋˜๊ณ  ๊ถŒ์œ„ ์žˆ๋Š” Kotlin ๊ธฐ๋ฐ˜ ์ •์  ๋ถ„์„ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. Kotlin ๊ตฌ๋ฌธ๊ณผ ๊ด€์šฉ๊ตฌ์— ๋Œ€ํ•œ ๊นŠ์€ ์ดํ•ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ผ๋ฐ˜์ ์ธ JVM ๋ถ„์„๊ธฐ๊ฐ€ ๋†“์น˜๊ธฐ ์‰ฌ์šด ๋ฌธ์ œ๋“ค์„ ํƒ์ง€ํ•˜๋Š” ๊ฒƒ์ด Detekt์˜ ๊ฐ•์ ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์—๋Š” ํ•จ์ˆ˜ํ˜• ๊ตฌ๋ฌธ์œผ๋กœ ์ธํ•œ ๊ณผ๋„ํ•œ ์ค‘์ฒฉ, ์ธ๋ผ์ธ ํ•จ์ˆ˜์™€ ๊ฐ™์€ ์–ธ์–ด ๊ธฐ๋Šฅ์˜ ์˜ค์šฉ, ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๊ฐ€๋…์„ฑ์„ ์ €ํ•ดํ•˜๋Š” ํŒจํ„ด ๋“ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ์—… ํ™˜๊ฒฝ์—์„œ Detekt๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ Gradle ๋นŒ๋“œ ๋ฐ CI ํŒŒ์ดํ”„๋ผ์ธ์— ํ†ตํ•ฉ๋˜์–ด ํŒ€ ๊ฐ„ ์ผ๊ด€๋œ ๊ทœ์น™ ์ ์šฉ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ทœ์น™ ๊ธฐ๋ฐ˜ ๋ชจ๋ธ์€ ์‚ฌ์šฉ์ž ์ •์˜๋ฅผ ์ง€์›ํ•˜๋ฏ€๋กœ ์กฐ์ง์€ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ๋‚ด๋ถ€ ์ฝ”๋”ฉ ํ‘œ์ค€ ๋ฐ ์•„ํ‚คํ…์ฒ˜ ์ง€์นจ์— ๋งž์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์œ ์—ฐ์„ฑ ๋•๋ถ„์— Detekt๋Š” ํŠนํžˆ ๋น ๋ฅธ ๋„์ž… ์‹œ๊ธฐ์— ๋Œ€๊ทœ๋ชจ Kotlin ๊ธฐ์—ฌ์ž ๊ธฐ๋ฐ˜์„ ์•ˆ์ •ํ™”ํ•˜๋Š” ๋ฐ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ Detekt์˜ ๋ถ„์„ ๋ฒ”์œ„๋Š” ์†Œ์Šค ์ฝ”๋“œ ์ˆ˜์ค€์˜ ๊ฒ€์‚ฌ์— ๊ตญํ•œ๋ฉ๋‹ˆ๋‹ค. Detekt๋Š” Kotlin ํŒŒ์ผ์„ ํ•ด๋‹น ๋ชจ๋“ˆ์˜ ์ปจํ…์ŠคํŠธ ๋‚ด์—์„œ๋งŒ ํ‰๊ฐ€ํ•˜๋ฉฐ, ๋ชจ๋“ˆ ๊ฐ„ ์‹คํ–‰ ๋™์ž‘์„ ์ถ”๋ก ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Java์™€ Kotlin์ด ํ˜ผํ•ฉ๋œ ์‹œ์Šคํ…œ์—์„œ๋Š” ๋ณต์žก์„ฑ์ด ๋กœ์ปฌ ๊ตฌ์กฐ๋ณด๋‹ค๋Š” ์ƒํ˜ธ ์ž‘์šฉ์—์„œ ๋น„๋กฏ๋  ๋•Œ ์ด๋Ÿฌํ•œ ํ•œ๊ณ„๊ฐ€ ๋‘๋“œ๋Ÿฌ์ง€๊ฒŒ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. Detekt๋Š” ๋ฐ€์ง‘๋œ ๋กœ์ง์„ ๊ฐ•์กฐ ํ‘œ์‹œํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ํ•ด๋‹น ๋กœ์ง์ด ๋” ๋„“์€ ์‹คํ–‰ ๊ฒฝ๋กœ ๋˜๋Š” ์„œ๋น„์Šค ์ƒํ˜ธ ์ž‘์šฉ์— ์–ด๋–ป๊ฒŒ ๊ด€์—ฌํ•˜๋Š”์ง€๋Š” ํŒŒ์•…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ํ•œ๊ณ„๋Š” ๋ฆฐํŒ…๊ณผ ์‹ฌ์ธต์ ์ธ ์ •์  ์ถ”๋ก  ์‚ฌ์ด์˜ ๊ณตํ†ต์ ์ธ ๊ฒฝ๊ณ„๋ฅผ ๋ฐ˜์˜ํ•˜๋ฉฐ, ์ด๋Š” ์ •์  ์†Œ์Šค ์ฝ”๋“œ ๋ถ„์„์— ๋Œ€ํ•œ ๋…ผ์˜์—์„œ ๋‹ค๋ค„์ง€๋Š” ์ฐจ์ด์ ์ž…๋‹ˆ๋‹ค. Detekt๋Š” ๋ถ€๋ถ„์ ์ธ ์ฝ”๋“œ ์ตœ์ ํ™”์—๋Š” ํƒ์›”ํ•˜์ง€๋งŒ, ๊ตฌ์กฐ์ ์œผ๋กœ๋Š” ๊น”๋”ํ•˜์ง€๋งŒ ์‹œ์Šคํ…œ์ ์œผ๋กœ๋Š” ์œ„ํ—˜ํ•œ ์ฝ”๋“œ๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ์ตœ์ ํ™”ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ๋ถ„์„ ๊ณ„์ธต๊ณผ ํ•จ๊ป˜ ๊ฒฐ๊ณผ๋ฅผ ํ•ด์„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์—…์šฉ ํˆด์ฒด์ธ์—์„œ Detekt๋Š” ๋…๋ฆฝ์ ์ธ ์ œ์–ด ๋ฉ”์ปค๋‹ˆ์ฆ˜๋ณด๋‹ค๋Š” ์ดˆ๊ธฐ ๋‹จ๊ณ„์—์„œ ์œ„ํ—˜ ์‹ ํ˜ธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.

ํฌํŠธํด๋ฆฌ์˜ค ์ˆ˜์ค€์˜ ๊ฑฐ๋ฒ„๋„Œ์Šค๋ฅผ ์œ„ํ•œ Kotlin ๋ถ„์„๊ธฐ๊ฐ€ ํฌํ•จ๋œ SonarQube

SonarQube๋Š” ์ค‘์•™ ์ง‘์ค‘์‹ ๊ด€๋ฆฌ์™€ ์–ธ์–ด ๊ฐ„ ์ผ๊ด€์„ฑ์„ ๊ฐ•์กฐํ•จ์œผ๋กœ์จ Kotlin ๋ถ„์„ ๋ถ„์•ผ์—์„œ ์ฐจ๋ณ„ํ™”๋œ ์œ„์น˜๋ฅผ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Kotlin์„ ์—ฌ๋Ÿฌ JVM ์–ธ์–ด ์ค‘ ํ•˜๋‚˜๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์—…์—์„œ SonarQube๋Š” ํฌํŠธํด๋ฆฌ์˜ค ์ „๋ฐ˜์— ๊ฑธ์ณ ํ’ˆ์งˆ ์ง€ํ‘œ, ๋ณด์•ˆ ์ทจ์•ฝ์ , ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋Š” ํ†ตํ•ฉ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. SonarQube์˜ Kotlin ๋ถ„์„๊ธฐ๋Š” ์ด ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ Kotlin ์ฝ”๋“œ๋ฒ ์ด์Šค๊นŒ์ง€ ํ™•์žฅํ•˜์—ฌ Java ๋ฐ ๊ธฐํƒ€ ์ง€์› ์–ธ์–ด์™€์˜ ๋น„๊ต ๋ถ„์„์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

SonarQube์˜ ๊ฐ•์ ์€ ์‹œ๊ฐ„ ๊ฒฝ๊ณผ์— ๋”ฐ๋ฅธ ๋ณ€ํ™”์™€ ์—ฌ๋Ÿฌ ํŒ€์— ๊ฑธ์นœ ๊ฒฐ๊ณผ๋ฅผ ์ข…ํ•ฉ์ ์œผ๋กœ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ข…ํ•ฉ ๋ถ„์„์€ ๊ด€๋ฆฌ์ž์˜ ๊ฐ๋…, ์ถ”์„ธ ๋ถ„์„, ๊ทœ์ • ์ค€์ˆ˜ ๋ณด๊ณ ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. Kotlin ํ™˜๊ฒฝ์—์„œ SonarQube๋Š” ๊ณต์œ  ๋ชจ๋“ˆ์˜ ๋ณต์žก์„ฑ ์ฆ๊ฐ€๋‚˜ ์ €์žฅ์†Œ ์ „๋ฐ˜์— ๊ฑธ์นœ ๊ทœ์น™ ์ ์šฉ ๋ถˆ๊ท ํ˜•๊ณผ ๊ฐ™์€ ๋ฐ˜๋ณต์ ์ธ ํŒจํ„ด์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ธ์‚ฌ์ดํŠธ๋Š” Kotlin ๋„์ž… ํ™•๋Œ€ ๊ณผ์ •์—์„œ ํ’ˆ์งˆ ๊ธฐ์ค€์„ ํ‘œ์ค€ํ™”ํ•˜๋ ค๋Š” ์กฐ์ง์— ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋™์‹œ์— SonarQube์˜ ๋ชจ๋ธ์€ ๋ณธ์งˆ์ ์œผ๋กœ ๋ฉ”ํŠธ๋ฆญ ๊ธฐ๋ฐ˜์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ ํŠน์„ฑ์„ ์ ์ˆ˜์™€ ์ž„๊ณ„๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š”๋ฐ, ์ด๋กœ ์ธํ•ด ํŠน์ • ๋ฐœ๊ฒฌ ์‚ฌํ•ญ์˜ ๊ทผ๋ณธ์ ์ธ ์‹คํ–‰ ์˜๋ฏธ๊ฐ€ ๋ชจํ˜ธํ•ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์ž‘์„ ๊ฐ„๊ฒฐํ•œ ํ‘œํ˜„์‹์œผ๋กœ ์••์ถ•ํ•˜๋Š” Kotlin ๊ธฐ๋Šฅ์€ ๋ฉ”ํŠธ๋ฆญ ์ธก๋ฉด์—์„œ๋Š” ์œ„ํ—˜๋„๊ฐ€ ๋‚ฎ์•„ ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฏธ๋ฌ˜ํ•œ ๋Ÿฐํƒ€์ž„ ๊ฒฐํ•ฉ์„ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ•œ๊ณ„๋Š” ์œ ์ง€๋ณด์ˆ˜์„ฑ ๋ฉ”ํŠธ๋ฆญ ํ•œ๊ณ„ ๋ถ„์„์—์„œ ์ œ๊ธฐ๋œ ๋น„ํŒ๊ณผ ์ผ๋งฅ์ƒํ†ตํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ SonarQube๋Š” Kotlin ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ์‹œ์Šคํ…œ ๋™์ž‘์— ๋Œ€ํ•œ ํ™•์ •์ ์ธ ํ‰๊ฐ€๋ณด๋‹ค๋Š” ๊ฑฐ๋ฒ„๋„Œ์Šค ์‹ ํ˜ธ๋กœ ํ•ด์„ํ•  ๋•Œ ๊ฐ€์žฅ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค. SonarQube๋Š” ํญ๋„“์€ ๋ถ„์„ ๋ฒ”์œ„์™€ ์ผ๊ด€์„ฑ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ์‹ฌ์ธต์ ์ธ ๋ถ„์„๊ณผ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ณด์™„์ ์ธ ๋„๊ตฌ์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ JVM ๋ฐ Android ํฌํŠธํด๋ฆฌ์˜ค์—์„œ SonarQube๋Š” ์ข…์ข… ๋ณด๋‹ค ์ „๋ฌธํ™”๋œ ๋ถ„์„ ์—”์ง„ ์œ„์— ๊ตฌ์ถ•๋œ ๋ณด๊ณ  ๋ฐ ๊ทœ์ œ ๊ณ„์ธต ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

ํ”Œ๋žซํผ ์ œ์•ฝ์ด ์žˆ๋Š” Kotlin ๋ถ„์„์„ ์œ„ํ•œ Android Lint

Android Lint๋Š” Kotlin ์ •์  ๋ถ„์„์˜ ํŠน์ • ๋ถ€๋ถ„์„ ๋‹ค๋ฃจ๋ฉฐ, Android ํ”Œ๋žซํผ ์ œ์•ฝ ์กฐ๊ฑด์„ ๊ณ ๋ คํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. Kotlin์€ ์ตœ์‹  Android ๊ฐœ๋ฐœ์—์„œ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์–ธ์–ด์ด๋ฉฐ, Android Lint๋Š” ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ, ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ, ์Šค๋ ˆ๋”ฉ ๋ฐ API ํ˜ธํ™˜์„ฑ๊ณผ ๊ด€๋ จ๋œ ํ”Œ๋žซํผ๋ณ„ ๊ทœ์น™์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ทœ์น™์€ ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์—์„œ๋งŒ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฐํ•จ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์—…์šฉ ์•ˆ๋“œ๋กœ์ด๋“œ ํฌํŠธํด๋ฆฌ์˜ค์—์„œ Android Lint๋Š” ์ผ๋ฐ˜์ ์ธ JVM ๋ถ„์„์œผ๋กœ๋Š” ์ ์šฉํ•˜๊ธฐ ์–ด๋ ค์šด ํ”Œ๋žซํผ ๊ธฐ๋Œ€์น˜์— ๋งž์ถฐ Kotlin ์ฝ”๋“œ๋ฅผ ์ตœ์ ํ™”ํ•จ์œผ๋กœ์จ ์ฆ‰๊ฐ์ ์ธ ๊ฐ€์น˜๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ถ€์ ์ ˆํ•œ ์ƒ๋ช…์ฃผ๊ธฐ ์ฒ˜๋ฆฌ, ๋น„ํšจ์œจ์ ์ธ ๋ฆฌ์†Œ์Šค ์ ‘๊ทผ, UI ์Šค๋ ˆ๋“œ ์ž‘์—…์˜ ์˜ค์šฉ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ๋“ค์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•ˆ์ •์„ฑ๊ณผ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฏ€๋กœ, Android Lint๋Š” ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํฌํ•จํ•˜๋Š” ๋ชจ๋“  Kotlin ๋ถ„์„ ์Šคํƒ์—์„œ ํ•„์ˆ˜์ ์ธ ์š”์†Œ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ Android Lint๋Š” ์˜๋„์ ์œผ๋กœ ๋ฒ”์œ„๊ฐ€ ์ข์Šต๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค, ๊ณต์œ  JVM ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„ ์ข…์†์„ฑ์„ ๋ถ„์„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Android Lint์˜ ๋ถ„์„ ๊ฒฐ๊ณผ๋Š” Android ๋Ÿฐํƒ€์ž„ ๋‚ด์—์„œ๋Š” ์˜๋ฏธ๊ฐ€ ์žˆ์ง€๋งŒ, Kotlin ์ฝ”๋“œ๊ฐ€ ๋” ๊ด‘๋ฒ”์œ„ํ•œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์›Œํฌํ”Œ๋กœ์— ์ฐธ์—ฌํ•  ๋•Œ๋Š” ๊ด€๋ จ์„ฑ์ด ๋–จ์–ด์ง‘๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ถ„๋ฆฌ๋Š” ํ”Œ๋žซํผ๋ณ„ ํ†ต์ฐฐ๋ ฅ๊ณผ ์‹œ์Šคํ…œ ์ „๋ฐ˜์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ์กฐํ™”์‹œ์ผœ์•ผ ํ•˜๋Š” ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ์ •์  ๋ถ„์„์—์„œ ๋…ผ์˜๋˜๋Š” ๋ฌธ์ œ์ ์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ Android Lint๋Š” ํฌ๊ด„์ ์ธ ๋ถ„์„ ์†”๋ฃจ์…˜์ด๋ผ๊ธฐ๋ณด๋‹ค๋Š” ํŠนํ™”๋œ ๋„๊ตฌ์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค. Kotlin ๊ธฐ๋ฐ˜ ๋„๊ตฌ ๋ฐ ํฌํŠธํด๋ฆฌ์˜ค ๊ด€๋ฆฌ ๋„๊ตฌ๋ฅผ ๋ณด์™„ํ•˜์—ฌ ํ”Œ๋žซํผ ๊ทœ์ • ์ค€์ˆ˜๋ฅผ ๋ณด์žฅํ•˜๋Š” ๋™์‹œ์— ์‹œ์Šคํ…œ ๊ฐ„ ๋น„๊ต ๋ถ„์„์€ ๋‹ค๋ฅธ ๊ณ„์ธต์— ๋งก๊น๋‹ˆ๋‹ค. Android ๋ฐ JVM Kotlin ์ž์‚ฐ์„ ๋ชจ๋‘ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ์—…์˜ ๊ฒฝ์šฐ, ์ด๋Ÿฌํ•œ ๊ฒฝ๊ณ„๋ฅผ ์ธ์‹ํ•จ์œผ๋กœ์จ Android ์ค‘์‹ฌ์˜ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋ฐ”์ผ์ด ์•„๋‹Œ ํ™˜๊ฒฝ์— ์ž˜๋ชป ์ ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์—…์šฉ JVM ๋ฐ ์•ˆ๋“œ๋กœ์ด๋“œ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ๋˜๋Š” Kotlin ์ •์  ๋ถ„์„ ๋„๊ตฌ

๊ธฐ์—… ํ™˜๊ฒฝ์—์„œ Kotlin ์ •์  ๋ถ„์„ ๋„๊ตฌ์˜ ์—ญํ• ์€ ์ข…์ข… ์˜คํ•ด๋ฉ๋‹ˆ๋‹ค. ๋„๊ตฌ๋“ค์„ ์„œ๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅํ•œ ์Šค์บ๋„ˆ๋กœ ํ‰๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ๊ฐ ๋„๊ตฌ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ์ˆ˜์ค€์˜ ์˜๋ฏธ๋ก ์  ์ดํ•ด์™€ ์กฐ์ง์  ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. JVM ๋ฐ Android ํฌํŠธํด๋ฆฌ์˜ค์—์„œ Kotlin ๋ถ„์„ ๋„๊ตฌ๋Š” ํƒ์ง€ํ•˜๋Š” ๋ฌธ์ œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ถ„์„ ๋ชจ๋ธ์ด ์ปดํŒŒ์ผ ๊ฒฝ๊ณ„, ๋ฐฐํฌ ํ† ํด๋กœ์ง€, ๊ทธ๋ฆฌ๊ณ  ํŒ€ ๊ฐ„ ๊ฑฐ๋ฒ„๋„Œ์Šค ์š”๊ตฌ ์‚ฌํ•ญ๊ณผ ์–ผ๋งˆ๋‚˜ ์ž˜ ๋ถ€ํ•ฉํ•˜๋Š”์ง€๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ‰๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์—…๋“ค์€ ๋‹จ์ผ ๋ถ„์„ ๋„๊ตฌ๋กœ ํ‘œ์ค€ํ™”ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋“œ๋ญ…๋‹ˆ๋‹ค. ๋Œ€์‹ , ์ฝ”ํ‹€๋ฆฐ ๊ธฐ๋ฐ˜ ๋ถ„์„ ๋„๊ตฌ์™€ ํ”Œ๋žซํผ ์ „๋ฐ˜์˜ ๊ฑฐ๋ฒ„๋„Œ์Šค ์‹œ์Šคํ…œ, ๋ณด์•ˆ ์Šค์บ๋„ˆ๊ฐ€ ๊ณต์กดํ•˜๋Š” ๊ณ„์ธตํ˜• ํˆด์ฒด์ธ์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์˜ ํšจ๊ณผ๋Š” ๊ฐ ๋„๊ตฌ ๋ฒ”์ฃผ์˜ ๋ถ„์„ ํ•œ๊ณ„๋ฅผ ์ดํ•ดํ•˜๊ณ  ๋ถ„์„ ๊ฒฐ๊ณผ๊ฐ€ ์˜์‚ฌ ๊ฒฐ์ • ๊ณผ์ •์— ์–ด๋–ป๊ฒŒ ๋ฐ˜์˜๋˜๋Š”์ง€ ํŒŒ์•…ํ•˜๋Š” ๋ฐ ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ตฌ๋ถ„์€ ๋” ๊ด‘๋ฒ”์œ„ํ•œ ๋…ผ์˜๋ฅผ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์†Œ์Šค ์ฝ”๋“œ ๋ถ„์„๊ธฐ ๊ทธ๋ฆฌ๊ณ  ์ง€์—ญ์  ๊ฒ€์‚ฌ์™€ ์‹œ์Šคํ…œ ์ˆ˜์ค€ ์ถ”๋ก  ๊ฐ„์˜ ๊ตฌ์กฐ์  ์ฐจ์ด์ .

Smart TS XL์€ ๋‹ค๊ตญ์–ด ์ •์  ๋ฐ ์˜ํ–ฅ ๋ถ„์„ ๋ ˆ์ด์–ด์ž…๋‹ˆ๋‹ค.

Smart TS XL์€ Kotlin์„ ๋…๋ฆฝ์ ์ธ ์–ธ์–ด ์˜์—ญ์œผ๋กœ ์ทจ๊ธ‰ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์—์„œ Kotlin ๋„ค์ดํ‹ฐ๋ธŒ ๋ถ„์„๊ธฐ์™€๋Š” ์ฐจ๋ณ„ํ™”๋ฉ๋‹ˆ๋‹ค. ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ JVM ๋ฐ Android ํ™˜๊ฒฝ์—์„œ Kotlin์€ ์„œ๋น„์Šค, ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ๋ ˆ๊ฑฐ์‹œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๊ณ„์ธต ์—ญํ• ์„ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. Smart TS XL์€ ์ด๋Ÿฌํ•œ ํ˜„์‹ค์„ ๋ฐ˜์˜ํ•˜์—ฌ Java, ๋นŒ๋“œ ์„ค๋ช…์ž ๋ฐ ์™ธ๋ถ€ ํ†ตํ•ฉ ์ง€์ ์„ ํฌํ•จํ•˜๋Š” ๋‹ค๊ตญ์–ด ์ •์  ๋ถ„์„ ๊ทธ๋ž˜ํ”„ ๋‚ด์—์„œ Kotlin์„ ๋ชจ๋ธ๋งํ•ฉ๋‹ˆ๋‹ค.

์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ Kotlin ์ฝ”๋“œ๊ฐ€ ๋‹จ์ผ ์ €์žฅ์†Œ๋ฅผ ๋„˜์–ด ๋น„์ฆˆ๋‹ˆ์Šค ํ•ต์‹ฌ ์‹คํ–‰ ๊ฒฝ๋กœ์— ์ฐธ์—ฌํ•  ๋•Œ ์ค‘์š”ํ•ด์ง‘๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Kotlin ์„œ๋น„์Šค๋Š” ๊ธฐ์กด Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” API๋ฅผ ๋…ธ์ถœํ•˜๊ฑฐ๋‚˜ ํ•˜์œ„ ์‹œ์Šคํ…œ์˜ ๋ฐฐ์น˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด Kotlin ๋„๊ตฌ๋Š” ๋กœ์ปฌ ๋ณต์žก์„ฑ์ด๋‚˜ ์Šคํƒ€์ผ ๋ฌธ์ œ๋ฅผ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, Kotlin ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์‹œ์Šคํ…œ ๊ฒฝ๊ณ„๋ฅผ ๋„˜์–ด ์‹คํ–‰ ํ๋ฆ„์„ ์–ด๋–ป๊ฒŒ ๋ฐ”๊พธ๋Š”์ง€ ์žฌ๊ตฌ์„ฑํ•˜์ง€๋Š” ๋ชปํ•ฉ๋‹ˆ๋‹ค. Smart TS XL์€ ์ด์™€ ๋‹ฌ๋ฆฌ ์ด๊ธฐ์ข… ์ฝ”๋“œ๋ฒ ์ด์Šค ์ „๋ฐ˜์— ๊ฑธ์ณ ์ข…์†์„ฑ ํƒ์ƒ‰, ํ˜ธ์ถœ ์ฒด์ธ ์žฌ๊ตฌ์„ฑ ๋ฐ ์˜ํ–ฅ ์˜์—ญ ์‹๋ณ„์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค.

์•ˆ๋“œ๋กœ์ด๋“œ ํฌํŠธํด๋ฆฌ์˜ค์—์„œ๋„ ์ด๋Ÿฌํ•œ ์–ธ์–ด ๊ฐ„ ๊ด€์ ์€ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. Kotlin UI ๋ ˆ์ด์–ด๋Š” ์ข…์ข… ๊ณต์œ  SDK ๊ตฌ์„ฑ ์š”์†Œ, ๋„ค์ดํ‹ฐ๋ธŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์™€ ์ƒํ˜ธ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ ๋ชจ๋“ˆ์—๋งŒ ๊ตญํ•œ๋œ ์ •์  ๋ถ„์„์œผ๋กœ๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋” ๋„“์€ ์ƒํƒœ๊ณ„์— ์–ด๋–ป๊ฒŒ ์ „ํŒŒ๋˜๋Š”์ง€ ์™„์ „ํžˆ ์„ค๋ช…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. Smart TS XL์€ Kotlin ์•„ํ‹ฐํŒฉํŠธ๋ฅผ JVM ์„œ๋น„์Šค ๋ฐ ๊ณต์œ  ๊ตฌ์„ฑ ์š”์†Œ์™€ ์—ฐ๊ด€์‹œ์ผœ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋ฆด๋ฆฌ์Šค ์ˆœ์„œ ๋ฐ ์œ„ํ—˜ ๊ด€๋ฆฌ ์ „๋žต์„ ์ˆ˜๋ฆฝํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ ‘๊ทผ ๋ฐฉ์‹์˜ ๊ฐ€์น˜๋Š” ๊ธฐ์—…์˜ ์š”๊ตฌ ์‚ฌํ•ญ๊ณผ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ ์—์„œ ๋ถ€ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์˜ํ–ฅ ๋ถ„์„ ์†Œํ”„ํŠธ์›จ์–ด ํ…Œ์ŠคํŒ…์˜ํ–ฅ์„ ๋ฐ›๋Š” ๋ถ€๋ถ„์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ๊ฐœ๋ณ„์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ๋‚˜์—ดํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ์ค‘์š”ํ•œ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. Smart TS XL์€ Kotlin ๊ธฐ๋ฐ˜ ๋„๊ตฌ๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์‹œ์Šคํ…œ ์ „๋ฐ˜์˜ ์‹คํ–‰ ๋ชจ๋ธ ๋‚ด์—์„œ ํ•ด๋‹น ๋„๊ตฌ๋“ค์˜ ๊ฒฐ๊ณผ๋ฌผ์„ ๋งฅ๋ฝํ™”ํ•˜๋Š” ํ†ตํ•ฉ ๊ณ„์ธต ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Kotlin ๋„์ž…์ด ํ˜„๋Œ€ํ™” ๋ฐ ๊ฑฐ๋ฒ„๋„Œ์Šค ๊ณ„ํš๊ณผ ๊ต์ฐจํ•˜๋Š” ํฌํŠธํด๋ฆฌ์˜ค์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

Kotlin ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ ๋ฐ ๋ณต์žก์„ฑ ๋ถ„์„์„ ์œ„ํ•œ Detekt

Detekt๋Š” ๊ตฌ์กฐ์  ํ’ˆ์งˆ๊ณผ ์–ธ์–ด ํŠน์œ ์˜ ํŒจํ„ด์— ์ดˆ์ ์„ ๋งž์ถ˜ ๊ฐ€์žฅ ์˜ค๋ž˜๋˜๊ณ  ๊ถŒ์œ„ ์žˆ๋Š” Kotlin ๊ธฐ๋ฐ˜ ์ •์  ๋ถ„์„ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. Kotlin ๊ตฌ๋ฌธ๊ณผ ๊ด€์šฉ๊ตฌ์— ๋Œ€ํ•œ ๊นŠ์€ ์ดํ•ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ผ๋ฐ˜์ ์ธ JVM ๋ถ„์„๊ธฐ๊ฐ€ ๋†“์น˜๊ธฐ ์‰ฌ์šด ๋ฌธ์ œ๋“ค์„ ํƒ์ง€ํ•˜๋Š” ๊ฒƒ์ด Detekt์˜ ๊ฐ•์ ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์—๋Š” ํ•จ์ˆ˜ํ˜• ๊ตฌ๋ฌธ์œผ๋กœ ์ธํ•œ ๊ณผ๋„ํ•œ ์ค‘์ฒฉ, ์ธ๋ผ์ธ ํ•จ์ˆ˜์™€ ๊ฐ™์€ ์–ธ์–ด ๊ธฐ๋Šฅ์˜ ์˜ค์šฉ, ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๊ฐ€๋…์„ฑ์„ ์ €ํ•ดํ•˜๋Š” ํŒจํ„ด ๋“ฑ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ์—… ํ™˜๊ฒฝ์—์„œ Detekt๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ Gradle ๋นŒ๋“œ ๋ฐ CI ํŒŒ์ดํ”„๋ผ์ธ์— ํ†ตํ•ฉ๋˜์–ด ํŒ€ ๊ฐ„ ์ผ๊ด€๋œ ๊ทœ์น™ ์ ์šฉ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ทœ์น™ ๊ธฐ๋ฐ˜ ๋ชจ๋ธ์€ ์‚ฌ์šฉ์ž ์ •์˜๋ฅผ ์ง€์›ํ•˜๋ฏ€๋กœ ์กฐ์ง์€ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ๋‚ด๋ถ€ ์ฝ”๋”ฉ ํ‘œ์ค€ ๋ฐ ์•„ํ‚คํ…์ฒ˜ ์ง€์นจ์— ๋งž์ถœ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์œ ์—ฐ์„ฑ ๋•๋ถ„์— Detekt๋Š” ํŠนํžˆ ๋น ๋ฅธ ๋„์ž… ์‹œ๊ธฐ์— ๋Œ€๊ทœ๋ชจ Kotlin ๊ธฐ์—ฌ์ž ๊ธฐ๋ฐ˜์„ ์•ˆ์ •ํ™”ํ•˜๋Š” ๋ฐ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ Detekt์˜ ๋ถ„์„ ๋ฒ”์œ„๋Š” ์†Œ์Šค ์ฝ”๋“œ ์ˆ˜์ค€์˜ ๊ฒ€์‚ฌ์— ๊ตญํ•œ๋ฉ๋‹ˆ๋‹ค. Detekt๋Š” Kotlin ํŒŒ์ผ์„ ํ•ด๋‹น ๋ชจ๋“ˆ์˜ ์ปจํ…์ŠคํŠธ ๋‚ด์—์„œ๋งŒ ํ‰๊ฐ€ํ•˜๋ฉฐ, ๋ชจ๋“ˆ ๊ฐ„ ์‹คํ–‰ ๋™์ž‘์„ ์ถ”๋ก ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Java์™€ Kotlin์ด ํ˜ผํ•ฉ๋œ ์‹œ์Šคํ…œ์—์„œ๋Š” ๋ณต์žก์„ฑ์ด ๋กœ์ปฌ ๊ตฌ์กฐ๋ณด๋‹ค๋Š” ์ƒํ˜ธ ์ž‘์šฉ์—์„œ ๋น„๋กฏ๋  ๋•Œ ์ด๋Ÿฌํ•œ ํ•œ๊ณ„๊ฐ€ ๋‘๋“œ๋Ÿฌ์ง€๊ฒŒ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. Detekt๋Š” ๋ฐ€์ง‘๋œ ๋กœ์ง์„ ๊ฐ•์กฐ ํ‘œ์‹œํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ํ•ด๋‹น ๋กœ์ง์ด ๋” ๋„“์€ ์‹คํ–‰ ๊ฒฝ๋กœ ๋˜๋Š” ์„œ๋น„์Šค ์ƒํ˜ธ ์ž‘์šฉ์— ์–ด๋–ป๊ฒŒ ๊ด€์—ฌํ•˜๋Š”์ง€๋Š” ํŒŒ์•…ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ํ•œ๊ณ„๋Š” ๋ฆฐํŒ…๊ณผ ์‹ฌ์ธต์ ์ธ ์ •์  ์ถ”๋ก  ์‚ฌ์ด์˜ ๊ณตํ†ต์ ์ธ ๊ฒฝ๊ณ„๋ฅผ ๋ฐ˜์˜ํ•˜๋ฉฐ, ์ด๋Š” ์ •์  ์†Œ์Šค ์ฝ”๋“œ ๋ถ„์„์— ๋Œ€ํ•œ ๋…ผ์˜์—์„œ ๋‹ค๋ค„์ง€๋Š” ์ฐจ์ด์ ์ž…๋‹ˆ๋‹ค. Detekt๋Š” ๋ถ€๋ถ„์ ์ธ ์ฝ”๋“œ ์ตœ์ ํ™”์—๋Š” ํƒ์›”ํ•˜์ง€๋งŒ, ๊ตฌ์กฐ์ ์œผ๋กœ๋Š” ๊น”๋”ํ•˜์ง€๋งŒ ์‹œ์Šคํ…œ์ ์œผ๋กœ๋Š” ์œ„ํ—˜ํ•œ ์ฝ”๋“œ๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ์ตœ์ ํ™”ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ๋ถ„์„ ๊ณ„์ธต๊ณผ ํ•จ๊ป˜ ๊ฒฐ๊ณผ๋ฅผ ํ•ด์„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์—…์šฉ ํˆด์ฒด์ธ์—์„œ Detekt๋Š” ๋…๋ฆฝ์ ์ธ ์ œ์–ด ๋ฉ”์ปค๋‹ˆ์ฆ˜๋ณด๋‹ค๋Š” ์ดˆ๊ธฐ ๋‹จ๊ณ„์—์„œ ์œ„ํ—˜ ์‹ ํ˜ธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.

ํฌํŠธํด๋ฆฌ์˜ค ์ˆ˜์ค€์˜ ๊ฑฐ๋ฒ„๋„Œ์Šค๋ฅผ ์œ„ํ•œ Kotlin ๋ถ„์„๊ธฐ๊ฐ€ ํฌํ•จ๋œ SonarQube

SonarQube๋Š” ์ค‘์•™ ์ง‘์ค‘์‹ ๊ด€๋ฆฌ์™€ ์–ธ์–ด ๊ฐ„ ์ผ๊ด€์„ฑ์„ ๊ฐ•์กฐํ•จ์œผ๋กœ์จ Kotlin ๋ถ„์„ ๋ถ„์•ผ์—์„œ ์ฐจ๋ณ„ํ™”๋œ ์œ„์น˜๋ฅผ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Kotlin์„ ์—ฌ๋Ÿฌ JVM ์–ธ์–ด ์ค‘ ํ•˜๋‚˜๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์—…์—์„œ SonarQube๋Š” ํฌํŠธํด๋ฆฌ์˜ค ์ „๋ฐ˜์— ๊ฑธ์ณ ํ’ˆ์งˆ ์ง€ํ‘œ, ๋ณด์•ˆ ์ทจ์•ฝ์ , ๊ธฐ์ˆ  ๋ถ€์ฑ„๋ฅผ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋Š” ํ†ตํ•ฉ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. SonarQube์˜ Kotlin ๋ถ„์„๊ธฐ๋Š” ์ด ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ Kotlin ์ฝ”๋“œ๋ฒ ์ด์Šค๊นŒ์ง€ ํ™•์žฅํ•˜์—ฌ Java ๋ฐ ๊ธฐํƒ€ ์ง€์› ์–ธ์–ด์™€์˜ ๋น„๊ต ๋ถ„์„์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

SonarQube์˜ ๊ฐ•์ ์€ ์‹œ๊ฐ„ ๊ฒฝ๊ณผ์— ๋”ฐ๋ฅธ ๋ณ€ํ™”์™€ ์—ฌ๋Ÿฌ ํŒ€์— ๊ฑธ์นœ ๊ฒฐ๊ณผ๋ฅผ ์ข…ํ•ฉ์ ์œผ๋กœ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ข…ํ•ฉ ๋ถ„์„์€ ๊ด€๋ฆฌ์ž์˜ ๊ฐ๋…, ์ถ”์„ธ ๋ถ„์„, ๊ทœ์ • ์ค€์ˆ˜ ๋ณด๊ณ ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. Kotlin ํ™˜๊ฒฝ์—์„œ SonarQube๋Š” ๊ณต์œ  ๋ชจ๋“ˆ์˜ ๋ณต์žก์„ฑ ์ฆ๊ฐ€๋‚˜ ์ €์žฅ์†Œ ์ „๋ฐ˜์— ๊ฑธ์นœ ๊ทœ์น™ ์ ์šฉ ๋ถˆ๊ท ํ˜•๊ณผ ๊ฐ™์€ ๋ฐ˜๋ณต์ ์ธ ํŒจํ„ด์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ธ์‚ฌ์ดํŠธ๋Š” Kotlin ๋„์ž… ํ™•๋Œ€ ๊ณผ์ •์—์„œ ํ’ˆ์งˆ ๊ธฐ์ค€์„ ํ‘œ์ค€ํ™”ํ•˜๋ ค๋Š” ์กฐ์ง์— ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋™์‹œ์— SonarQube์˜ ๋ชจ๋ธ์€ ๋ณธ์งˆ์ ์œผ๋กœ ๋ฉ”ํŠธ๋ฆญ ๊ธฐ๋ฐ˜์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ ํŠน์„ฑ์„ ์ ์ˆ˜์™€ ์ž„๊ณ„๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š”๋ฐ, ์ด๋Š” ํŠน์ • ๋ฐœ๊ฒฌ ์‚ฌํ•ญ์˜ ๊ทผ๋ณธ์ ์ธ ์‹คํ–‰ ์˜๋ฏธ๋ฅผ ๋ชจํ˜ธํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์ž‘์„ ๊ฐ„๊ฒฐํ•œ ํ‘œํ˜„์‹์œผ๋กœ ์••์ถ•ํ•˜๋Š” Kotlin ๊ธฐ๋Šฅ์€ ๋ฉ”ํŠธ๋ฆญ ์ธก๋ฉด์—์„œ๋Š” ์œ„ํ—˜๋„๊ฐ€ ๋‚ฎ์•„ ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฏธ๋ฌ˜ํ•œ ๋Ÿฐํƒ€์ž„ ๊ฒฐํ•ฉ์„ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ•œ๊ณ„๋Š” ๊ธฐ์กด ๋ถ„์„์—์„œ ๋ฐœ๊ฒฌ๋œ ๋น„ํŒ๊ณผ ์ผ๋งฅ์ƒํ†ตํ•ฉ๋‹ˆ๋‹ค. ์œ ์ง€๋ณด์ˆ˜์„ฑ ์ง€ํ‘œ ์ œํ•œ.

๊ฒฐ๊ณผ์ ์œผ๋กœ SonarQube๋Š” Kotlin ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ์‹œ์Šคํ…œ ๋™์ž‘์— ๋Œ€ํ•œ ํ™•์ •์ ์ธ ํ‰๊ฐ€๋ณด๋‹ค๋Š” ๊ฑฐ๋ฒ„๋„Œ์Šค ์‹ ํ˜ธ๋กœ ํ•ด์„ํ•  ๋•Œ ๊ฐ€์žฅ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค. SonarQube๋Š” ํญ๋„“์€ ๋ถ„์„ ๋ฒ”์œ„์™€ ์ผ๊ด€์„ฑ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ์‹ฌ์ธต์ ์ธ ๋ถ„์„๊ณผ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ณด์™„์ ์ธ ๋„๊ตฌ์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ JVM ๋ฐ Android ํฌํŠธํด๋ฆฌ์˜ค์—์„œ SonarQube๋Š” ์ข…์ข… ๋ณด๋‹ค ์ „๋ฌธํ™”๋œ ๋ถ„์„ ์—”์ง„ ์œ„์— ๊ตฌ์ถ•๋œ ๋ณด๊ณ  ๋ฐ ๊ทœ์ œ ๊ณ„์ธต ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

ํ”Œ๋žซํผ ์ œ์•ฝ์ด ์žˆ๋Š” Kotlin ๋ถ„์„์„ ์œ„ํ•œ Android Lint

Android Lint๋Š” Kotlin ์ •์  ๋ถ„์„์˜ ํŠน์ • ๋ถ€๋ถ„์„ ๋‹ค๋ฃจ๋ฉฐ, Android ํ”Œ๋žซํผ ์ œ์•ฝ ์กฐ๊ฑด์„ ๊ณ ๋ คํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. Kotlin์€ ์ตœ์‹  Android ๊ฐœ๋ฐœ์—์„œ ๊ฐ€์žฅ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์–ธ์–ด์ด๋ฉฐ, Android Lint๋Š” ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ, ๋ฆฌ์†Œ์Šค ์‚ฌ์šฉ, ์Šค๋ ˆ๋”ฉ ๋ฐ API ํ˜ธํ™˜์„ฑ๊ณผ ๊ด€๋ จ๋œ ํ”Œ๋žซํผ๋ณ„ ๊ทœ์น™์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ทœ์น™์€ ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์—์„œ๋งŒ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฐํ•จ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์—…์šฉ ์•ˆ๋“œ๋กœ์ด๋“œ ํฌํŠธํด๋ฆฌ์˜ค์—์„œ Android Lint๋Š” ์ผ๋ฐ˜์ ์ธ JVM ๋ถ„์„์œผ๋กœ๋Š” ์ ์šฉํ•˜๊ธฐ ์–ด๋ ค์šด ํ”Œ๋žซํผ ๊ธฐ๋Œ€์น˜์— ๋งž์ถฐ Kotlin ์ฝ”๋“œ๋ฅผ ์ตœ์ ํ™”ํ•จ์œผ๋กœ์จ ์ฆ‰๊ฐ์ ์ธ ๊ฐ€์น˜๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ถ€์ ์ ˆํ•œ ์ƒ๋ช…์ฃผ๊ธฐ ์ฒ˜๋ฆฌ, ๋น„ํšจ์œจ์ ์ธ ๋ฆฌ์†Œ์Šค ์ ‘๊ทผ, UI ์Šค๋ ˆ๋“œ ์ž‘์—…์˜ ์˜ค์šฉ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ๋“ค์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•ˆ์ •์„ฑ๊ณผ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฏ€๋กœ, Android Lint๋Š” ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํฌํ•จํ•˜๋Š” ๋ชจ๋“  Kotlin ๋ถ„์„ ์Šคํƒ์—์„œ ํ•„์ˆ˜์ ์ธ ์š”์†Œ์ž…๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ Android Lint๋Š” ์˜๋„์ ์œผ๋กœ ๋ฒ”์œ„๊ฐ€ ์ข์Šต๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค, ๊ณต์œ  JVM ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐ„ ์ข…์†์„ฑ์„ ๋ถ„์„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Android Lint์˜ ๋ถ„์„ ๊ฒฐ๊ณผ๋Š” Android ๋Ÿฐํƒ€์ž„ ๋‚ด์—์„œ๋Š” ์˜๋ฏธ๊ฐ€ ์žˆ์ง€๋งŒ, Kotlin ์ฝ”๋“œ๊ฐ€ ๋” ๊ด‘๋ฒ”์œ„ํ•œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์›Œํฌํ”Œ๋กœ์— ์ฐธ์—ฌํ•  ๋•Œ๋Š” ๊ด€๋ จ์„ฑ์ด ๋–จ์–ด์ง‘๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ถ„๋ฆฌ๋Š” ํ”Œ๋žซํผ๋ณ„ ํ†ต์ฐฐ๋ ฅ๊ณผ ์‹œ์Šคํ…œ ์ „๋ฐ˜์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ์กฐํ™”์‹œ์ผœ์•ผ ํ•˜๋Š” ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ์ •์  ๋ถ„์„์—์„œ ๋…ผ์˜๋˜๋Š” ๋ฌธ์ œ์ ์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ Android Lint๋Š” ํฌ๊ด„์ ์ธ ๋ถ„์„ ์†”๋ฃจ์…˜์ด๋ผ๊ธฐ๋ณด๋‹ค๋Š” ํŠนํ™”๋œ ๋„๊ตฌ์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค. Kotlin ๊ธฐ๋ฐ˜ ๋„๊ตฌ ๋ฐ ํฌํŠธํด๋ฆฌ์˜ค ๊ด€๋ฆฌ ๋„๊ตฌ๋ฅผ ๋ณด์™„ํ•˜์—ฌ ํ”Œ๋žซํผ ๊ทœ์ • ์ค€์ˆ˜๋ฅผ ๋ณด์žฅํ•˜๋Š” ๋™์‹œ์— ์‹œ์Šคํ…œ ๊ฐ„ ๋น„๊ต ๋ถ„์„์€ ๋‹ค๋ฅธ ๊ณ„์ธต์— ๋งก๊น๋‹ˆ๋‹ค. Android ๋ฐ JVM Kotlin ์ž์‚ฐ์„ ๋ชจ๋‘ ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ์—…์˜ ๊ฒฝ์šฐ, ์ด๋Ÿฌํ•œ ๊ฒฝ๊ณ„๋ฅผ ์ธ์‹ํ•จ์œผ๋กœ์จ Android ์ค‘์‹ฌ์˜ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋ฐ”์ผ์ด ์•„๋‹Œ ํ™˜๊ฒฝ์— ์ž˜๋ชป ์ ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

CI ๊ธฐ๋ฐ˜ Kotlin ๊ฒ€์‚ฌ ํ‘œ์ค€ํ™”๋ฅผ ์œ„ํ•œ Qodana

Qodana๋Š” JetBrains์˜ ๊ฒ€์‚ฌ ์—”์ง„์„ ๊ฐœ๋ณ„ ๊ฐœ๋ฐœ์ž ํ™˜๊ฒฝ์„ ๋„˜์–ด ์ง€์†์  ํ†ตํ•ฉ(CI) ์›Œํฌํ”Œ๋กœ๋กœ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค. ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ Kotlin ํ™˜๊ฒฝ์—์„œ ์ด๋Ÿฌํ•œ ๋ณ€ํ™”๋Š” ์ •์  ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ๋กœ์ปฌ IDE ๊ตฌ์„ฑ, ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ฒ„์ „ ๋ฐ ๊ฐœ๋ฐœ์ž๋ณ„ ์„ค์ •๊ณผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์ €์žฅ์†Œ์—์„œ ์ž‘์—…ํ•˜๋Š” Kotlin ํŒ€์€ ์ข…์ข… ๋กœ์ปฌ์—์„œ ์ ์šฉ๋˜๋Š” ๊ทœ์น™์ด ํ”„๋กœ์ ํŠธ๋งˆ๋‹ค ๋ฏธ๋ฌ˜ํ•˜๊ฒŒ ๋‹ค๋ฅธ ๊ฒ€์‚ฌ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ๊ฒช์Šต๋‹ˆ๋‹ค. Qodana๋Š” ์ œ์–ด๋œ CI ํ™˜๊ฒฝ์—์„œ ๊ฒ€์‚ฌ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ผ๊ด€๋˜๊ณ  ์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•จ์œผ๋กœ์จ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

์‹คํ–‰ ๊ด€์ ์—์„œ Qodana๋Š” ์†Œ์Šค ๋ถ„์„ ๊ณ„์ธต์—์„œ ์ž‘๋™ํ•˜๋ฉฐ IntelliJ IDEA ๊ฒ€์‚ฌ์— ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ์˜๋ฏธ๋ก ์  ์ดํ•ด ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด Kotlin ์–ธ์–ด ๊ตฌ๋ฌธ, null ์•ˆ์ „์„ฑ ๊ทœ์น™ ๋ฐ ์ปดํŒŒ์ผ๋Ÿฌ ์ •๋ ฌ ๊ฒ€์‚ฌ๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์ธ์‹ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. CI ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ์ด๋Š” ์•„ํ‹ฐํŒฉํŠธ๊ฐ€ ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ๋ฐฐํฌ๋˜๊ธฐ ์ „์— ๊ตฌ์กฐ์  ๋ฌธ์ œ๋ฅผ ์กฐ๊ธฐ์— ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. JetBrains ํˆด๋ง์„ ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์—…์˜ ๊ฒฝ์šฐ, Qodana๋Š” ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ๋ถ„์„ ๋ชจ๋ธ์„ ๋„์ž…ํ•˜์ง€ ์•Š๊ณ ๋„ ๊ฐœ๋ฐœ์ž ํ”ผ๋“œ๋ฐฑ ๋ฃจํ”„์™€ ์ค‘์•™ ์ง‘์ค‘์‹ ๊ทœ์ œ ์ ์šฉ ๊ฐ„์˜ ์—ฐ๊ฒฐ ๊ณ ๋ฆฌ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ Qodana์˜ ๋ถ„์„ ๋ฒ”์œ„๋Š” ์˜๋„์ ์œผ๋กœ ์ข์Šต๋‹ˆ๋‹ค. ๋ชจ๋“ˆ, ์„œ๋น„์Šค ๋˜๋Š” ๋Ÿฐํƒ€์ž„ ๊ฒฝ๊ณ„๋ฅผ ๋„˜๋‚˜๋“œ๋Š” ์‹คํ–‰ ๊ฒฝ๋กœ๋ฅผ ์žฌ๊ตฌ์„ฑํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Kotlin ์ฝ”๋“œ๋Š” ์ฃผ๋กœ ์ €์žฅ์†Œ ๋ฒ”์œ„ ๋‚ด์—์„œ ๋ถ„์„๋˜๋ฉฐ, ๋ถ„์„ ๊ฒฐ๊ณผ๋Š” ํ•˜์œ„ ์‚ฌ์šฉ์ž๋‚˜ ๋ฐฐํฌ ํ† ํด๋กœ์ง€์™€์˜ ์ƒ๊ด€๊ด€๊ณ„ ์—†์ด ๋ณด๊ณ ๋ฉ๋‹ˆ๋‹ค. ๋ณต์žกํ•œ JVM ํฌํŠธํด๋ฆฌ์˜ค์—์„œ Qodana๋Š” ๊ณต์œ  API๋‚˜ ๋นŒ๋“œ ํƒ€์ž„ ๊ตฌ์„ฑ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ์‹œ์Šคํ…œ์  ๊ฒฐํ•ฉ์„ ํŒŒ์•…ํ•˜์ง€ ๋ชปํ•œ ์ฑ„ ๋กœ์ปฌ์—์„œ์˜ ์ •ํ™•์„ฑ๋งŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ œํ•œ์€ ์•ž์„œ ๋…ผ์˜๋œ ๋” ๊ด‘๋ฒ”์œ„ํ•œ ์ œ์•ฝ ์กฐ๊ฑด์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ ๋ถ„์„ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์†Œ์Šค ์ฝ”๋“œ ์ค‘์‹ฌ ๋„๊ตฌ๋Š” ์ผ๊ด€์„ฑ ์œ ์ง€์—๋Š” ํƒ์›”ํ•˜์ง€๋งŒ ์‹œ์Šคํ…œ ๋™์ž‘ ๋ชจ๋ธ๋ง์—๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Qodana๋Š” ์ง„๋‹จ ๊ณ„์ธต๋ณด๋‹ค๋Š” ์ผ๊ด€์„ฑ ์œ ์ง€๋ฅผ ์œ„ํ•œ ๊ฐ•์ œ ๊ณ„์ธต์œผ๋กœ์„œ ๊ฐ€์žฅ ํšจ๊ณผ์ ์œผ๋กœ ๊ธฐ๋Šฅํ•ฉ๋‹ˆ๋‹ค. Qodana๋Š” ๋นŒ๋“œ ์‹œ์ ์— Kotlin ์ฝ”๋“œ๊ฐ€ ํ•ฉ์˜๋œ ๊ฒ€์‚ฌ ํ‘œ์ค€์„ ์ค€์ˆ˜ํ•˜๋„๋ก ๋ณด์žฅํ•˜์ง€๋งŒ, ๋ณด์™„์ ์ธ ๋ถ„์„ ์ ‘๊ทผ ๋ฐฉ์‹์„ ํ†ตํ•ด ํ•ด๋‹น ์ฝ”๋“œ๊ฐ€ ๋” ํฐ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์‹œ์Šคํ…œ์— ํ†ตํ•ฉ๋œ ํ›„ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋ฐ”์ผ ํ”Œ๋žซํผ ์ œ์•ฝ ์กฐ๊ฑด ํ•˜์—์„œ์˜ Kotlin ๋ถ„์„์„ ์œ„ํ•œ Android Lint

Android Lint๋Š” Kotlin ์ •์  ๋ถ„์„ ์ƒํƒœ๊ณ„ ๋‚ด์—์„œ ๋…ํŠนํ•œ ์œ„์น˜๋ฅผ ์ฐจ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” JVM๋งŒ์„ ๊ธฐ์ค€์œผ๋กœ ์ฝ”๋“œ๋ฅผ ํ‰๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ Android ํ”Œ๋žซํผ์˜ ๊ด€์ ์—์„œ ์ฝ”๋“œ๋ฅผ ํ‰๊ฐ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. Kotlin์€ ์ตœ์‹  Android ๊ฐœ๋ฐœ์˜ ์ฃผ์š” ์–ธ์–ด์ด๋ฉฐ, Android Lint๋Š” Android SDK ์‚ฌ์šฉ๋ฒ•, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜๋ช… ์ฃผ๊ธฐ, ๋ฆฌ์†Œ์Šค ๊ด€๋ฆฌ ์ œ์•ฝ ์กฐ๊ฑด์— ๋Œ€ํ•œ ๊นŠ์€ ์ดํ•ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ”Œ๋žซํผ ์ค‘์‹ฌ์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹ ๋•๋ถ„์— ์ผ๋ฐ˜์ ์ธ Kotlin ๋˜๋Š” JVM ๋ถ„์„ ๋„๊ตฌ๋กœ๋Š” ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ๋“ค์„ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์—…์šฉ ์•ˆ๋“œ๋กœ์ด๋“œ ํฌํŠธํด๋ฆฌ์˜ค์—์„œ Android Lint๋Š” ๋ผ์ดํ”„์‚ฌ์ดํด ๊ด€๋ฆฌ ์˜ค๋ฅ˜, ์Šค๋ ˆ๋”ฉ ์œ„๋ฐ˜, ๋น„ํšจ์œจ์ ์ธ ๋ฆฌ์†Œ์Šค ์ ‘๊ทผ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ์œ„ํ—˜์„ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹๋ฐ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. Kotlin์˜ ์ถ”์ƒํ™”๋Š” ๊ฐ„๊ฒฐํ•œ ๊ตฌ๋ฌธ ๋’ค์— ํ”Œ๋žซํผ ์ƒํ˜ธ ์ž‘์šฉ์„ ์ˆจ๊ฒจ ์ด๋Ÿฌํ•œ ์œ„ํ—˜์„ ๋ชจํ˜ธํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Android Lint๋Š” UI ์Šค๋ ˆ๋“œ ์ ‘๊ทผ ํŒจํ„ด ๋ฐ ์ปดํฌ๋„ŒํŠธ ๋ผ์ดํ”„์‚ฌ์ดํด ๊ฒฝ๊ณ„์™€ ๊ฐ™์ด ์•ˆ๋“œ๋กœ์ด๋“œ ๋Ÿฐํƒ€์ž„ ์˜๋ฏธ ์ฒด๊ณ„์— ์ง์ ‘์ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ๊ทœ์น™์„ ์ ์šฉํ•จ์œผ๋กœ์จ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ฐ•์ ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  Android Lint์˜ ์ ์šฉ ๋ฒ”์œ„๋Š” ๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์„ ๋„˜์–ด์„œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. Android์™€ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค ๊ฐ„์— ๊ณต์œ ๋˜๋Š” Kotlin ์ฝ”๋“œ๋Š” Android Lint ๊ฒ€์‚ฌ๋ฅผ ํ†ต๊ณผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ชจ๋ฐ”์ผ์ด ์•„๋‹Œ ์‹คํ–‰ ํ™˜๊ฒฝ์—์„œ๋Š” ์œ„ํ—˜์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ถ„๋ฆฌ๋Š” ํŠนํžˆ ํ”Œ๋žซํผ ๊ฐ„์— Kotlin ๋ชจ๋“ˆ์„ ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์—…์—์„œ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. Android Lint๋Š” ๋ชจ๋ฐ”์ผ ๋™์ž‘์— ๋Œ€ํ•œ ๋†’์€ ์ˆ˜์ค€์˜ ๋ถ„์„ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ, ๊ทธ ๊ฒฐ๊ณผ๋Š” JVM ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋‚˜ ๋ฐฐ์น˜ ์›Œํฌ๋กœ๋“œ์—๋Š” ์ผ๋ฐ˜ํ™”ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด ๊ฒฝ๊ณ„๋Š” ๋‹ค์Œ์—์„œ ๋‹ค๋ฃฌ ๊ณผ์ œ๋“ค๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์˜ ์ •์  ๋ถ„์„ํ”Œ๋žซํผ๋ณ„ ์ •ํ™•์„ฑ์ด ์‹œ์Šคํ…œ ์ „๋ฐ˜์˜ ์•ˆ์ „์„ฑ์„ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ, Android Lint๋Š” ํŠน์ˆ˜ ๋ถ„์„ ๋„๊ตฌ๋กœ ๊ฐ„์ฃผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Android Lint๋Š” ํ”Œ๋žซํผ ๊ทœ์ • ์ค€์ˆ˜๋ฅผ ๋ณด์žฅํ•จ์œผ๋กœ์จ ๋ณด๋‹ค ๊ด‘๋ฒ”์œ„ํ•œ Kotlin ๋ถ„์„ ์ž‘์—…์„ ๋ณด์™„ํ•˜๋Š” ๋™์‹œ์—, ํ”Œ๋žซํผ ๊ฐ„ ์ข…์†์„ฑ ๋ถ„์„์€ ๊ธฐ์—… ์Šคํƒ์˜ ๋‹ค๋ฅธ ๋„๊ตฌ์— ๋งก๊น๋‹ˆ๋‹ค.

Checkstyle๊ณผ Kotlin ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์–ธ์–ด ๊ฐ„ ์ผ๊ด€์„ฑ์„ ํ™•๋ณดํ•˜์„ธ์š”.

Checkstyle์€ ์ž๋ฐ” ์ƒํƒœ๊ณ„์—์„œ ์ฝ”๋”ฉ ๊ทœ์น™๊ณผ ๊ตฌ์กฐ์  ๊ทœ์ •์„ ๊ฐ•์ œํ•˜๋Š” ๋„๊ตฌ๋กœ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Kotlin์„ ๋„์ž…ํ•˜๋Š” ๊ธฐ์—… ํ™˜๊ฒฝ์—์„œ๋Š” ๊ธฐ์กด ์ž๋ฐ” ์ฝ”๋“œ๋ฒ ์ด์Šค์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์–ธ์–ด ๊ฐ„ ์Šคํƒ€์ผ ๋ฐ ๊ตฌ์กฐ์  ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Checkstyle์— Kotlin ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์€ ์กฐ์ง์ด ์ ์ง„์ ์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋ฉด์„œ ์ฐจ์ด์ ์„ ์ตœ์†Œํ™”ํ•˜๊ณ ์ž ํ•˜๋Š” ์ „ํ™˜๊ธฐ์— ๊ฐ€์žฅ ํ”ํ•˜๊ฒŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ฑฐ๋ฒ„๋„Œ์Šค ๊ด€์ ์—์„œ Checkstyle์€ ๊ธฐ์กด CI ํŒŒ์ดํ”„๋ผ์ธ์— ์‰ฝ๊ฒŒ ํ†ตํ•ฉ๋˜๋Š” ์นœ์ˆ™ํ•œ ๊ฐ•์ œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Checkstyle์˜ ๊ทœ์น™์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ณ  ์„ ์–ธ์ ์ด๋ฉฐ, ๋ช…๋ช… ๊ทœ์น™, ํ˜•์‹ ์ง€์ • ๋ฐ ๊ธฐ๋ณธ ๊ตฌ์กฐ์  ์ œ์•ฝ ์กฐ๊ฑด์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค. Kotlin์— ์ด๋Ÿฌํ•œ ๊ทœ์น™์„ ์ ์šฉํ•˜๋ฉด ๊ธฐ์—ฌ์ž์˜ ํ–‰๋™์„ ์•ˆ์ •ํ™”ํ•˜๊ณ  Java ๋ชจ๋“ˆ๊ณผ Kotlin ๋ชจ๋“ˆ ๊ฐ„์˜ ํ‘œ๋ฉด์ ์ธ ์ฐจ์ด๋ฅผ ์ค„์—ฌ ๊ฒ€ํ†  ๋ฐ ๊ฐ์‚ฌ ๊ณผ์ •์„ ๊ฐ„์†Œํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ Checkstyle์˜ ๋ถ„์„ ๊นŠ์ด๋Š” ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค. Kotlin ํŠน์œ ์˜ ์˜๋ฏธ๋ก ์  ์ธ์‹์ด ๋ถ€์กฑํ•˜๊ณ , null ์•ˆ์ „์„ฑ, ์Šค๋งˆํŠธ ํ˜•๋ณ€ํ™˜, ๊ณ ์ฐจ ํ•จ์ˆ˜์™€ ๊ฐ™์€ ์–ธ์–ด์  ํŠน์ง•์„ ๋ชจ๋ธ๋งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ Kotlin ํ™˜๊ฒฝ์—์„œ Checkstyle์ด ์ œ์‹œํ•˜๋Š” ๋ถ„์„ ๊ฒฐ๊ณผ๋Š” ํ”ผ์ƒ์ ์ด๋ฉฐ, ๋” ์‹ฌ์ธต์ ์ธ ๊ตฌ์กฐ์  ๋ฌธ์ œ๋ฅผ ๋†“์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Checkstyle์€ ์‹คํ–‰ ๋™์ž‘์„ ์ถ”๋ก ํ•˜๊ฑฐ๋‚˜ ์˜์กด์„ฑ ์ฒด์ธ์„ ๋ถ„์„ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, Kotlin ๋ถ„์„์˜ ์ฃผ์š” ๋„๊ตฌ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ํ•œ๊ณ„๋Š” ๊ตฌ๋ฌธ ์ค‘์‹ฌ ๋„๊ตฌ๊ฐ€ ์˜๋ฏธ๋ก ์  ์œ„ํ—˜์„ ํฌ์ฐฉํ•˜๋Š” ๋ฐ ์–ด๋ ค์›€์„ ๊ฒช๋Š” ์ •์  ์†Œ์Šค ์ฝ”๋“œ ๋ถ„์„ ๋ถ„์•ผ์—์„œ ํ”ํžˆ ๋‚˜ํƒ€๋‚˜๋Š” ํ˜„์ƒ์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ Kotlin ํ™˜๊ฒฝ์—์„œ Checkstyle์€ ๋ณด์กฐ์ ์ธ ์ œ์–ด ๋„๊ตฌ๋กœ์„œ ๊ฐ€์žฅ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์–ธ์–ด ์ „ํ™˜ ๊ณผ์ •์—์„œ ๊ธฐ๋ณธ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋„๋ก ์ง€์›ํ•˜์ง€๋งŒ, ์ฝ”๋“œ ๋™์ž‘ ๋ฐ ํ˜„๋Œ€ํ™” ์œ„ํ—˜์— ๋Œ€ํ•œ ์˜๋ฏธ ์žˆ๋Š” ํ†ต์ฐฐ๋ ฅ์„ ์ œ๊ณตํ•˜๋ ค๋ฉด Kotlin์„ ์ง€์›ํ•˜๋Š” ์‹œ์Šคํ…œ ์ˆ˜์ค€ ๋ถ„์„ ๋„๊ตฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Kotlin ๋ณด์•ˆ ์ค‘์‹ฌ ์ •์  ๋ถ„์„์„ ์œ„ํ•œ Snyk ์ฝ”๋“œ

Snyk Code๋Š” ์ทจ์•ฝ์  ํƒ์ง€ ๋ฐ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์ฝ”๋”ฉ ํŒจํ„ด์— ์ดˆ์ ์„ ๋งž์ถฐ Kotlin ์ •์  ๋ถ„์„์— ๋ณด์•ˆ ์ค‘์‹ฌ์  ๊ด€์ ์„ ๋„์ž…ํ•ฉ๋‹ˆ๋‹ค. Snyk Code์˜ Kotlin ์ง€์› ๊ธฐ๋Šฅ์€ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๋ฌธ์ œ, ์ธ์ ์…˜ ์œ„ํ—˜, ๊ทธ๋ฆฌ๊ณ  ์•…์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์œผ๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋Š” ์•ˆ์ „ํ•˜์ง€ ์•Š์€ API ์‚ฌ์šฉ์„ ์‹๋ณ„ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Kotlin ์„œ๋น„์Šค๊ฐ€ ์™ธ๋ถ€ ์ž…๋ ฅ์ด๋‚˜ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ธฐ์—… ํ™˜๊ฒฝ์—์„œ ์ด๋Ÿฌํ•œ ๋ณด์•ˆ ์ค‘์‹ฌ ๋ถ„์„์€ ๋งค์šฐ ์ค‘์š”ํ•œ ์œ„ํ—˜ ์˜์—ญ์— ๋Œ€์‘ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋„๊ตฌ์˜ ๋ถ„์„ ๋ชจ๋ธ์€ ๋ณด์•ˆ ํ๋ฆ„๊ณผ ๊ด€๋ จ๋œ ํŒจํ„ด ์ธ์‹ ๋ฐ ์˜๋ฏธ๋ก ์  ์ถ”๋ก ์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ œ์–ด ๋ฐ์ดํ„ฐ๊ฐ€ Kotlin ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์–ด๋–ป๊ฒŒ ์ „ํŒŒ๋˜๋Š”์ง€ ๋ถ„์„ํ•˜๊ณ , ์•ˆ์ „ํ•œ ์ฝ”๋”ฉ ๊ธฐ์ค€์„ ์œ„๋ฐ˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ๋ฌธ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์ง• ๋•๋ถ„์— Snyk Code๋Š” ์™ธ๋ถ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋…ธ์ถœ๋˜๋Š” Kotlin ๊ธฐ๋ฐ˜ API ๋ฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์— ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ณด๋‹ค ๊ตฌ์ฒด์ ์ด์ง€๋งŒ ์˜ํ–ฅ๋ ฅ์ด ํฐ ๋ฌธ์ œ ์œ ํ˜•์„ ์ง‘์ค‘์ ์œผ๋กœ ๋‹ค๋ฃจ๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์ธ ์ฝ”๋“œ ํ’ˆ์งˆ ๊ด€๋ฆฌ ๋„๊ตฌ๋ฅผ ๋ณด์™„ํ•ฉ๋‹ˆ๋‹ค.

๋™์‹œ์— Snyk Code๋Š” ํฌ๊ด„์ ์ธ ๊ตฌ์กฐ์  ๋˜๋Š” ์•„ํ‚คํ…์ฒ˜์  ํ†ต์ฐฐ๋ ฅ์„ ์ œ๊ณตํ•˜๋ ค๋Š” ์‹œ๋„๋Š” ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Snyk Code์˜ ๋ถ„์„ ๊ฒฐ๊ณผ๋Š” ๋ณด์•ˆ ๋ฒ”์œ„์— ๊ตญํ•œ๋˜๋ฉฐ, ์ทจ์•ฝ์ ์ด ๋” ๊ด‘๋ฒ”์œ„ํ•œ ์‹œ์Šคํ…œ ์ข…์†์„ฑ์ด๋‚˜ ๋ฐฐํฌ ์•„ํ‚คํ…์ฒ˜์™€ ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์„ค๋ช…์€ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ตฌ์กฐ์ ์œผ๋กœ ๋ณต์žกํ•˜์ง€๋งŒ ๋‹น์žฅ ์ทจ์•ฝํ•˜์ง€ ์•Š์€ Kotlin ์ฝ”๋“œ๋Š” ์šด์˜์ƒ์˜ ๋ถˆ์•ˆ์ •์„ฑ์„ ์ดˆ๋ž˜ํ•˜๋”๋ผ๋„ Snyk Code ๋ถ„์„์„ ํ†ต๊ณผํ•˜์—ฌ ์šฐ๋ ค ์‚ฌํ•ญ์œผ๋กœ ํ‘œ์‹œ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ ˆ์ถฉ์•ˆ์€ ๋‹ค์Œ ๋…ผ์˜์™€ ์ผ๋งฅ์ƒํ†ตํ•ฉ๋‹ˆ๋‹ค. ๋ณด์•ˆ ์นจํ•ด ๋ฐฉ์ง€๋ณด์•ˆ ์Šค์บ๋„ˆ๋Š” ํŠน์ • ์œ„ํ˜‘ ๋ชจ๋ธ์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜์ง€๋งŒ, ์‹œ์Šคํ…œ ์ „์ฒด์— ๋Œ€ํ•œ ํฌ๊ด„์ ์ธ ์ดํ•ด๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ Kotlin ํ™˜๊ฒฝ์—์„œ Snyk Code๋Š” ํŠน์ • ์œ„ํ˜‘์— ํŠนํ™”๋œ ๋ณด์•ˆ ๊ณ„์ธต โ€‹โ€‹์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐฉ์–ด ํƒœ์„ธ๋ฅผ ๊ฐ•ํ™”ํ•˜์ง€๋งŒ, ์‹œ์Šคํ…œ ํ˜„๋Œ€ํ™” ๋ฐ ์žฅ๊ธฐ์ ์ธ ์œ„ํ—˜ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ณด๋‹ค ๊ด‘๋ฒ”์œ„ํ•œ ๋ถ„์„ ์ „๋žต์— ํ†ตํ•ฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ JVM ๋ฐ ์•ˆ๋“œ๋กœ์ด๋“œ ํ™˜๊ฒฝ์—์„œ Kotlin ์ •์  ๋ถ„์„ ๋„๊ตฌ ๋น„๊ต

๋ถ„์„ ๋Šฅ๋ ฅSMART TS XL๋ฐ ํ…ํŠธ์ฝ”๋‹ค๋‚˜SonarQube (Kotlin)์•ˆ๋“œ๋กœ์ด๋“œ ๋ฆฐํŠธ์ฒดํฌ์Šคํƒ€์ผ(์ฝ”ํ‹€๋ฆฐ)Snyk ์ฝ”๋“œ
Kotlin ์–ธ์–ด ์ธ์‹๊ฐ€๋Šฅ๊ฐ€๋Šฅ๊ฐ€๋Šฅ๊ฐ€๋Šฅ๊ฐ€๋Šฅ์ผ๋ถ€์˜๊ฐ€๋Šฅ
Java-Kotlin ์–ธ์–ด ๊ฐ„ ๋ถ„์„๊ฐ€๋Šฅ์•„๋‹ˆ์ œํ•œ๋œ์ œํ•œ๋œ์•„๋‹ˆ์ผ๋ถ€์˜์ œํ•œ๋œ
์‹œ์Šคํ…œ ์ „์ฒด ์ข…์†์„ฑ ๊ทธ๋ž˜ํ”„๊ฐ€๋Šฅ์•„๋‹ˆ์•„๋‹ˆ์ผ๋ถ€์˜์•„๋‹ˆ์•„๋‹ˆ์•„๋‹ˆ
๋ชจ๋“ˆ ๊ฐ„ ์˜ํ–ฅ ๋ถ„์„๊ฐ€๋Šฅ์ œํ•œ๋œ์•„๋‹ˆ์ผ๋ถ€์˜์•„๋‹ˆ์•„๋‹ˆ์•„๋‹ˆ
์‹คํ–‰ ๊ฒฝ๋กœ ์žฌ๊ตฌ์„ฑ๊ฐ€๋Šฅ์•„๋‹ˆ์•„๋‹ˆ์•„๋‹ˆ์•„๋‹ˆ์•„๋‹ˆ์ œํ•œ๋œ
CI ํŒŒ์ดํ”„๋ผ์ธ ํ†ตํ•ฉ๊ฐ€๋Šฅ๊ฐ€๋Šฅ๊ฐ€๋Šฅ๊ฐ€๋Šฅ๊ฐ€๋Šฅ๊ฐ€๋Šฅ๊ฐ€๋Šฅ
IDE ์ค‘์‹ฌ ํ”ผ๋“œ๋ฐฑ์•„๋‹ˆ์ผ๋ถ€์˜์ผ๋ถ€์˜์ผ๋ถ€์˜์ผ๋ถ€์˜์•„๋‹ˆ์•„๋‹ˆ
์•ˆ๋“œ๋กœ์ด๋“œ ํ”Œ๋žซํผ ์˜๋ฏธ๋ก ์ผ๋ถ€์˜์•„๋‹ˆ์•„๋‹ˆ์•„๋‹ˆ๊ฐ€๋Šฅ์•„๋‹ˆ์ผ๋ถ€์˜
๋ณด์•ˆ ์ค‘์‹ฌ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๋ถ„์„์ผ๋ถ€์˜์•„๋‹ˆ์•„๋‹ˆ์ผ๋ถ€์˜์•„๋‹ˆ์•„๋‹ˆ๊ฐ€๋Šฅ
ํฌํŠธํด๋ฆฌ์˜ค ์ˆ˜์ค€์˜ ๊ฑฐ๋ฒ„๋„Œ์Šค ๊ฐ€์‹œ์„ฑ๊ฐ€๋Šฅ์•„๋‹ˆ์•„๋‹ˆ๊ฐ€๋Šฅ์•„๋‹ˆ์ผ๋ถ€์˜์ผ๋ถ€์˜
๋‹ค์ค‘ ์ €์žฅ์†Œ ์ƒ๊ด€๊ด€๊ณ„๊ฐ€๋Šฅ์•„๋‹ˆ์•„๋‹ˆ์ผ๋ถ€์˜์•„๋‹ˆ์•„๋‹ˆ์•„๋‹ˆ
ํ˜„๋Œ€ํ™” ์ค€๋น„๋„ ํ‰๊ฐ€๊ฐ€๋Šฅ์•„๋‹ˆ์•„๋‹ˆ์•„๋‹ˆ์•„๋‹ˆ์•„๋‹ˆ์•„๋‹ˆ

๊ธฐ์—… ์ง€์› ์—ญํ• ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐํƒ€ Kotlin ์ •์  ๋ถ„์„ ๋„๊ตฌ

์ฃผ์š” ๋ถ„์„ ํ”Œ๋žซํผ ์™ธ์—๋„ ๊ธฐ์—…๋“ค์€ ์ข…์ข… ๋ณด๋‹ค ๊ตฌ์ฒด์ ์ธ ์ œ์–ด ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”ํ‹€๋ฆฐ ๊ด€๋ จ ๋„๊ตฌ๋“ค์„ ๋ณด์กฐ์ ์œผ๋กœ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋“ค์€ ์‹คํ–‰ ๋™์ž‘์ด๋‚˜ ์‹œ์Šคํ…œ ์ „๋ฐ˜์˜ ์˜์กด์„ฑ ๊ตฌ์กฐ์— ๋Œ€ํ•œ ํฌ๊ด„์ ์ธ ํ†ต์ฐฐ๋ ฅ์„ ์ œ๊ณตํ•˜๋„๋ก ์„ค๊ณ„๋œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์˜คํžˆ๋ ค ํฌ๋งทํŒ… ์ •๊ทœํ™”, IDE ์ค‘์‹ฌ์˜ ํ”ผ๋“œ๋ฐฑ, ๋ฐ”์ดํŠธ์ฝ”๋“œ ๊ฒ€์‚ฌ, ์˜์กด์„ฑ ๊ด€๋ฆฌ์™€ ๊ฐ™์€ ํŠน์ • ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋“ค์˜ ๊ฐ€์น˜๋Š” ์‹ฌ์ธต์ ์ธ ๋ถ„์„ ๊ณ„์ธต์„ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋ณด์กฐ์ ์ธ ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ ์˜๋„์ ์œผ๋กœ ํ™œ์šฉ๋  ๋•Œ ๋“œ๋Ÿฌ๋‚ฉ๋‹ˆ๋‹ค.

์„ฑ์ˆ™ํ•œ ์ฝ”ํ‹€๋ฆฐ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋“ค์ด ์ข…์ข… ๊ทœ๋ชจ ํ™•์žฅ์— ๋”ฐ๋ผ ๋ฐœ์ƒํ•˜๋Š” ํŠน์ • ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…๋ฉ๋‹ˆ๋‹ค. ํฌ๋งทํŒ… ์˜ค๋ฅ˜, ์ผ๊ด€์„ฑ ์—†๋Š” ๊ฐœ๋ฐœ์ž ํ”ผ๋“œ๋ฐฑ, ๋˜๋Š” ์˜์กด์„ฑ ๊ฐ€์‹œ์„ฑ ๋ถ€์กฑ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋“ค์€ ์ œ๋Œ€๋กœ ๊ด€๋ฆฌ๋˜์ง€ ์•Š์œผ๋ฉด ๋ถ„์„ ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ์‹ ๋ขฐ๋„๋ฅผ ๋–จ์–ด๋œจ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณด์กฐ ๋„๊ตฌ๋“ค์€ ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์˜ ํŠน์ • ์ธก๋ฉด์„ ์•ˆ์ •ํ™”ํ•จ์œผ๋กœ์จ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋“ค์„ ์™„ํ™”ํ•˜๋Š” ๋ฐ ๋„์›€์„ ์ค๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋“ค์˜ ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋Š” ๋Ÿฐํƒ€์ž„ ๋™์ž‘, ๋ชจ๋“ˆ ๊ฐ„ ์ƒํ˜ธ ์ž‘์šฉ, ๋˜๋Š” ์•„ํ‚คํ…์ฒ˜ ์˜๋„์— ๋Œ€ํ•œ ๋งฅ๋ฝ ์ •๋ณด๊ฐ€ ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋ฏ€๋กœ ์‹ ์ค‘ํ•˜๊ฒŒ ํ•ด์„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋„๊ตฌ๋“ค์€ ํ•œ๊ณ„๋ฅผ ๋ช…ํ™•ํžˆ ์ธ์ง€ํ•  ๋•Œ ๊ฐ€์žฅ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋“ค์„ ์ฃผ์š” ๊ด€๋ฆฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ ์‚ผ์œผ๋ ค๋Š” ๊ธฐ์—…๋“ค์€ ์ข…์ข… ์ž˜๋ชป๋œ ํ™•์‹ , ํŒŒํŽธํ™”๋œ ๋ณด๊ณ , ๋˜๋Š” ์ค‘๋ณต๋œ ์—…๋ฌด์— ์ง๋ฉดํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ ์ ˆํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋“ค์€ ์žก์Œ์„ ์ค„์ด๊ณ  ์ผ๊ด€์„ฑ์„ ๊ฐ•ํ™”ํ•˜์—ฌ, ๊ณ ์ฐจ์› ๋ถ„์„ ํ”Œ๋žซํผ์ด ๋”์šฑ ๊นจ๋—ํ•˜๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์‹ ํ˜ธ ํ‘œ๋ฉด์—์„œ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค.

  • ์ผ€์ดํ‹€๋ฆฐํŠธ
    ์ƒํ’ˆ ์„ค๋ช… Kotlin ์ „์šฉ ํฌ๋งทํ„ฐ ๋ฐ ๊ฒฝ๋Ÿ‰ ๊ตฌ์กฐ ๊ฒ€์‚ฌ๊ธฐ๋กœ, ์ผ๊ด€๋œ ์ฝ”๋“œ ์Šคํƒ€์ผ์„ ๊ฐ•์ œํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค.
    ์žฅ์ :
    • ๋Œ€๊ทœ๋ชจ Kotlin ๊ฐœ๋ฐœ์ž ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ „๋ฐ˜์— ๊ฑธ์ณ ์„œ์‹์„ ํ‘œ์ค€ํ™”ํ•ฉ๋‹ˆ๋‹ค.
    • ๋‚ฎ์€ ์‹คํ–‰ ๋น„์šฉ๊ณผ ์†์‰ฌ์šด CI ํ†ตํ•ฉ
    • ์ฝ”๋“œ ๊ฒ€ํ†  ์‹œ ์Šคํƒ€์ผ ๊ด€๋ จ ์˜ค๋ฅ˜๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค.
      ๋‹จ์  :
    • ์˜๋ฏธ๋ก ์  ๋ถ„์„์ด๋‚˜ ํ–‰๋™๋ก ์  ๋ถ„์„์€ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ์•„ํ‚คํ…์ฒ˜ ๋˜๋Š” ๋Ÿฐํƒ€์ž„ ์œ„ํ—˜์„ ๊ฐ์ง€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
    • ์„œ์‹ ๊ฐ•์ œ ์ ์šฉ ์™ธ์—๋Š” ๊ฐ€์น˜๊ฐ€ ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค.
  • IntelliJ IDEA Kotlin ๊ฒ€์‚ฌ
    ์ƒํ’ˆ ์„ค๋ช… Kotlin ์ปดํŒŒ์ผ๋Ÿฌ ์˜๋ฏธ๋ก  ๋ฐ JetBrains ๋ถ„์„ ๋ชจ๋ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” IDE ํ†ตํ•ฉ ๊ฒ€์‚ฌ ๊ธฐ๋Šฅ.
    ์žฅ์ :
    • Kotlin ์–ธ์–ด ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๊นŠ์ด ์žˆ๋Š” ์ดํ•ด
    • ๊ฐœ๋ฐœ ๊ณผ์ • ์ค‘ ์ฆ‰๊ฐ์ ์ธ ํ”ผ๋“œ๋ฐฑ
    • ๋„ ์•ˆ์ „์„ฑ ๋ฐ ์–ธ์–ด ๊ธฐ๋Šฅ ์˜ค์šฉ์— ๋Œ€ํ•œ ๊ฐ•๋ ฅํ•œ ํƒ์ง€
      ๋‹จ์  :
    • ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.
    • ํŒ€ ๊ฐ„ ํ‘œ์ค€ํ™”๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.
    • ํฌํŠธํด๋ฆฌ์˜ค ์ˆ˜์ค€์˜ ๊ฐ•์ œ ์ง‘ํ–‰ ๋˜๋Š” ์ƒ๊ด€๊ด€๊ณ„ ์—†์Œ
  • Kotlin์„ ์ง€์›ํ•˜๋Š” SpotBugs
    ์ƒํ’ˆ ์„ค๋ช… Kotlin ์ฝ”๋“œ์—์„œ ์ƒ์„ฑ๋œ JVM ์•„ํ‹ฐํŒฉํŠธ์— ์ ์šฉ๋˜๋Š” ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ˆ˜์ค€์˜ ์ •์  ๋ถ„์„ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
    ์žฅ์ :
    • ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ ์ปดํŒŒ์ผ๋œ ๋ฐ”์ดํŠธ์ฝ”๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
    • ํŠน์ • ๋Ÿฐํƒ€์ž„ ์ˆ˜์ค€ ๊ฒฐํ•จ ํŒจํ„ด์„ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ๋ถˆ์™„์ „ํ•˜๊ฑฐ๋‚˜ ์ƒ์„ฑ๋œ ๊ฒฝ์šฐ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.
      ๋‹จ์  :
    • Kotlin ํŠน์œ ์˜ ์˜๋ฏธ๋ก ์— ๋Œ€ํ•œ ์ดํ•ด ๋ถ€์กฑ
    • Kotlin ๊ด€์šฉ ์ฝ”๋“œ์—์„œ ์˜คํƒ๋ฅ ์ด ๋” ๋†’๊ฒŒ ๋‚˜ํƒ€๋‚จ
    • Kotlin ์šฐ์„  ๋””์ž์ธ ํŒจํ„ด๊ณผ์˜ ๋ถˆ์ผ์น˜
  • Kotlin์šฉ PMD
    ์ƒํ’ˆ ์„ค๋ช… Kotlin ๊ตฌ๋ฌธ์„ ์ง€์›ํ•˜๋„๋ก ํ™•์žฅ๋œ ๊ทœ์น™ ๊ธฐ๋ฐ˜ ์ •์  ๋ถ„์„ ์—”์ง„์ž…๋‹ˆ๋‹ค.
    ์žฅ์ :
    • ์ž๋ฐ” ์ค‘์‹ฌ ์กฐ์ง์„ ์œ„ํ•œ ์ต์ˆ™ํ•œ ๊ฑฐ๋ฒ„๋„Œ์Šค ๋ชจ๋ธ
    • ๊ฐ„๋‹จํ•œ ๊ทœ์น™ ์ •์˜ ๋ฐ CI ํ†ตํ•ฉ
    • Java์—์„œ Kotlin์œผ๋กœ์˜ ์ „ํ™˜ ํ™˜๊ฒฝ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
      ๋‹จ์  :
    • Kotlin ์–ธ์–ด์— ๋Œ€ํ•œ ๊ธฐ์ดˆ์ ์ธ ์ดํ•ด
    • ํ–‰๋™๋ณด๋‹ค๋Š” ๊ตฌ๋ฌธ ํŒจํ„ด์— ์ดˆ์ ์„ ๋งž์ถ˜๋‹ค
    • Kotlin ๊ด€์šฉ์  ์ฝ”๋“œ๋ฒ ์ด์Šค์—๋Š” ๊ด€๋ จ์„ฑ์ด ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค.
  • OWASP ์ข…์†์„ฑ ๊ฒ€์‚ฌ(JVM ์ปจํ…์ŠคํŠธ)
    ์ƒํ’ˆ ์„ค๋ช… Kotlin ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ํฌํ•จํ•˜๋Š” JVM ํ”„๋กœ์ ํŠธ์— ์ข…์†์„ฑ ์ทจ์•ฝ์  ์Šค์บ๋„ˆ๋ฅผ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
    ์žฅ์ :
    • ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์•Œ๋ ค์ง„ ์ทจ์•ฝ์ ์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.
    • JVM ์ƒํƒœ๊ณ„ ๋‚ด์—์„œ ์–ธ์–ด์— ๊ตฌ์• ๋ฐ›์ง€ ์•Š์Œ
    • ๊ทœ์ • ์ค€์ˆ˜ ๋ฐ ๊ฐ์‚ฌ ์š”๊ฑด์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
      ๋‹จ์  :
    • ์†Œ์Šค ์ฝ”๋“œ ์ˆ˜์ค€์˜ Kotlin ๋ถ„์„์€ ์ˆ˜ํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ์‚ฌ์šฉ์ž ์ •์˜ ์ฝ”๋“œ์˜ ๋™์ž‘์„ ํ‰๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    • ์ข…์†์„ฑ ์‚ฌ์šฉ๋Ÿ‰์ด๋‚˜ ์‹คํ–‰ ์˜ํ–ฅ์„ ๋ชจ๋ธ๋งํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ž๋ฐ”์™€ ์ฝ”ํ‹€๋ฆฐ์ด ํ˜ผํ•ฉ๋œ ์ปดํŒŒ์ผ ํ™˜๊ฒฝ์—์„œ๋„ ์‚ด์•„๋‚จ๋Š” ์ฝ”ํ‹€๋ฆฐ ์ฝ”๋“œ ํ’ˆ์งˆ ์‹ ํ˜ธ

Kotlin ์‹œ์Šคํ…œ์—์„œ ์ฝ”๋“œ ํ’ˆ์งˆ ์‹ ํ˜ธ๋Š” ๋‹จ์ผ ์–ธ์–ด ๋˜๋Š” ๋‹จ์ผ ์ปดํŒŒ์ผ ๋‹จ๊ณ„ ๊ด€์ ์—์„œ ๋„์ถœ๋  ๊ฒฝ์šฐ ์‹ ๋ขฐ์„ฑ์„ ์žƒ์Šต๋‹ˆ๋‹ค. ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ JVM ํ™˜๊ฒฝ์—์„œ Kotlin์€ Java์™€ ํ•จ๊ป˜ ์ปดํŒŒ์ผ๋˜๊ณ , ์–ด๋…ธํ…Œ์ด์…˜ ํ”„๋กœ์„ธ์„œ๋Š” ์ถ”๊ฐ€ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, ๋ฐ”์ดํŠธ์ฝ”๋“œ๋Š” ๋ฐฐํฌ ์ „์— ๋ณ€ํ™˜๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณ„์ธตํ™”๋œ ์ปดํŒŒ์ผ ํ™˜๊ฒฝ์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์€ ์ •์  ๋ถ„์„์€ ๋ถ€๋ถ„์ ์œผ๋กœ๋Š” ์˜ฌ๋ฐ”๋ฅด์ง€๋งŒ ์ „์ฒด์ ์œผ๋กœ๋Š” ์ž˜๋ชป๋œ ์‹ ํ˜ธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ๋ถ„์„์˜ ๋ถ€์žฌ๊ฐ€ ์•„๋‹ˆ๋ผ, ๋นŒ๋“œ ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋ถ„์„ ๊ฒฐ๊ณผ๊ฐ€ ๋ถˆ์•ˆ์ •ํ•˜๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ณ„์ ์œผ๋กœ๋Š” ์•ˆ์ „ํ•ด ๋ณด์ด๋Š” Kotlin ๊ตฌ๋ฌธ์ด๋ผ๋„ ๊ณต์œ  ์•„ํ‹ฐํŒฉํŠธ, ์…ฐ์ด๋”ฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋˜๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ ๋ณ€ํ˜•์œผ๋กœ ์ปดํŒŒ์ผ๋  ๋•Œ ๋ฏธ๋ฌ˜ํ•œ ์œ„ํ—˜์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๊ธ‰ ์ฝ”๋“œ ํ’ˆ์งˆ ์ง€ํ‘œ๋Š” Kotlin ์ฝ”๋“œ๊ฐ€ ์–ธ์–ด ๊ฒฝ๊ณ„, ๋ชจ๋“ˆ ๊ฒฝ๊ณ„ ๋ฐ ๋นŒ๋“œ ์‹œ๊ฐ„ ๋ณ€ํ™˜์„ ๊ฑฐ์นœ ํ›„์—๋„ ์˜๋ฏธ๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Kotlin๊ณผ Java์˜ ์ƒํ˜ธ ์šด์šฉ์„ฑ์€ ์ˆจ๊ฒจ์ง„ ํ’ˆ์งˆ ์ €ํ•˜์˜ ์›์ธ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kotlin์ด ๊ธฐ์—… ํ™˜๊ฒฝ์—์„œ ์ฑ„ํƒ๋˜๋Š” ์ฃผ์š” ์›๋™๋ ฅ ์ค‘ ํ•˜๋‚˜๋Š” Java์™€์˜ ์›ํ™œํ•œ ์ƒํ˜ธ ์šด์šฉ์„ฑ์„ ์•ฝ์†ํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋™์‹œ์— ์ด๋Ÿฌํ•œ ์ƒํ˜ธ ์šด์šฉ์„ฑ์€ ์ •์  ๋ถ„์„ ๋„๊ตฌ๊ฐ€ ์ •ํ™•ํ•˜๊ฒŒ ๋ชจ๋ธ๋งํ•˜๊ธฐ ์–ด๋ ค์šด ํ’ˆ์งˆ ์ €ํ•˜์˜ ์ง€์†์ ์ธ ์›์ธ์ด ๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. Kotlin ์ฝ”๋“œ๋Š” Kotlin์˜ null ์•ˆ์ „์„ฑ ๋ฐ ๋ถˆ๋ณ€์„ฑ ๊ฐ€์ •์„ ๊ณ ๋ คํ•˜์—ฌ ์„ค๊ณ„๋˜์ง€ ์•Š์€ Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜์กดํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ Kotlin ์†Œ์Šค ํŒŒ์ผ ๋‚ด์—์„œ๋Š” ๊ฒฌ๊ณ ํ•ด ๋ณด์ด๋Š” ์ฝ”๋“œ๋„ Java ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์ทจ์•ฝ์„ฑ์„ ๋ฌผ๋ ค๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kotlin ์†Œ์Šค ์ฝ”๋“œ ๋‚ด์—์„œ๋งŒ ์ž‘๋™ํ•˜๋Š” ์ •์  ๋ถ„์„ ๋„๊ตฌ๋Š” ์ด๋Ÿฌํ•œ ์ทจ์•ฝ์ ์„ ๊ฐ„๊ณผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€๋ฐ, ๊ทธ ์ด์œ ๋Š” ์œ„ํ—˜์ด Kotlin ๊ตฌ๋ฌธ ์ž์ฒด์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ƒํ˜ธ ์šด์šฉ์„ฑ ๊ณ„์ธต์—์„œ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. Kotlin์˜ ํƒ€์ž… ์‹œ์Šคํ…œ์ด ํ”Œ๋žซํผ ํƒ€์ž…๊ณผ ์ƒํ˜ธ ์ž‘์šฉํ•  ๋•Œ ๋ณด์žฅ์„ ์™„ํ™”ํ•˜๋Š” ๋ถ€๋ถ„์ด ๋ฐ”๋กœ ๊ทธ ์ทจ์•ฝ์ ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํ˜ธ ์ž‘์šฉ์€ ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ž˜ ์ •๋ˆ๋œ Kotlin ์ฝ”๋“œ์— ๋„ ํ—ˆ์šฉ, ๊ฒ€์‚ฌ๋˜์ง€ ์•Š์€ ํ˜•๋ณ€ํ™˜, ๊ฐ€๋ณ€ ์ƒํƒœ ๋“ฑ์„ ์กฐ์šฉํžˆ ๋‹ค์‹œ ๋„์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์ด๋Ÿฌํ•œ ํƒ€ํ˜‘์ ๋“ค์ด ๋ˆ„์ ๋˜์–ด ์†Œ์Šค ์ฝ”๋“œ ์ˆ˜์ค€์—์„œ๋Š” ์•ˆ์ •์ ์œผ๋กœ ๋ณด์ด๋Š” ํ’ˆ์งˆ ์ง€ํ‘œ๋ฅผ ์™œ๊ณกํ•ฉ๋‹ˆ๋‹ค.

Java์™€ Kotlin์ด ํ˜ผํ•ฉ๋œ ์‹œ์Šคํ…œ์—์„œ๋Š” ์ฝ”๋“œ ํ’ˆ์งˆ ์‹ ํ˜ธ๋ฅผ ๋‚ด๋ถ€ ์ผ๊ด€์„ฑ๋ณด๋‹ค๋Š” ๊ฒฝ๊ณ„ ๊ฐ„ ์ƒํ˜ธ ์ž‘์šฉ์ด๋ผ๋Š” ๊ด€์ ์—์„œ ํ•ด์„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ณด๊ณ ๋œ ๋ณต์žก๋„๊ฐ€ ๋‚ฎ์€ Kotlin ๋ชจ๋“ˆ์ด๋ผ๋„ ํƒ€์ž…์ด ๋А์Šจํ•œ Java API์™€ ํƒ€์ž…์ด ์—„๊ฒฉํ•œ Kotlin ์‚ฌ์šฉ์ž ์‚ฌ์ด์—์„œ ์œ„ํ—˜์„ฑ์ด ๋†’์€ ์–ด๋Œ‘ํ„ฐ ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆœํ™˜ ๋ณต์žก๋„๋‚˜ ๊ทœ์น™ ์œ„๋ฐ˜ ํšŸ์ˆ˜์™€ ๊ฐ™์€ ๊ธฐ์กด ์ง€ํ‘œ๋Š” ์ด๋Ÿฌํ•œ ๊ฒฝ๊ณ„ ๊ธฐ๋ฐ˜ ์œ„ํ—˜์„ ์ œ๋Œ€๋กœ ํฌ์ฐฉํ•˜์ง€ ๋ชปํ•˜์—ฌ ํŒ€์ด ์ž˜๋ชป๋œ ๋ฆฌํŒฉํ† ๋ง ๋Œ€์ƒ์„ ์šฐ์„ ์‹œํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์—ญ๋™์„ฑ์€ ๋ณด๋‹ค ๊ด‘๋ฒ”์œ„ํ•œ ๊ด€์ฐฐ ๊ฒฐ๊ณผ์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. ํ˜ผํ•ฉ ์–ธ์–ด ํ˜„๋Œ€ํ™”Kotlin์˜ ๊ฒฝ์šฐ, ํ’ˆ์งˆ ์ €ํ•˜๋Š” ๊ฐœ๋ณ„ ๊ตฌ์„ฑ ์š”์†Œ ๋‚ด๋ถ€๋ณด๋‹ค๋Š” ํ†ตํ•ฉ ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ํšจ๊ณผ์ ์ธ Kotlin ๋ถ„์„์€ ์ด๋Ÿฌํ•œ ํ†ตํ•ฉ ๊ณผ์ •์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋“œ๋Ÿฌ๋‚ด์–ด ์ƒํ˜ธ ์šด์šฉ์„ฑ์ด ์–ธ์–ด ์ˆ˜์ค€์˜ ๋ณด์žฅ์„ ์ €ํ•ดํ•˜๋Š” ์ง€์ ์„ ๊ฐ•์กฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐ€์‹œ์„ฑ์ด ์—†๋‹ค๋ฉด ๊ธฐ์—…์€ ๊ตฌ๋ฌธ์  ๊น”๋”ํ•จ์„ ๊ตฌ์กฐ์  ์•ˆ์ „์„ฑ์œผ๋กœ ์˜ค์ธํ•  ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ปดํŒŒ์ผ ์˜ค๋ฅ˜ ๋ฐ ์†Œ์Šค ์ˆ˜์ค€ ์ธก์ •๊ฐ’์˜ ์™œ๊ณก

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ Kotlin ์‹œ์Šคํ…œ์€ ์›์‹œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐฐํฌํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋“œ๋ญ…๋‹ˆ๋‹ค. ๋Œ€์‹  ์ฝ”๋“œ ์ƒ์„ฑ, ๋ฐ”์ดํŠธ์ฝ”๋“œ ์œ„๋น™, ํŒจํ‚ค์ง• ์ตœ์ ํ™” ๋“ฑ์„ ํฌํ•จํ•˜๋Š” ๋‹ค๋‹จ๊ณ„ ์ปดํŒŒ์ผ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ฑฐ์ณ ์ƒ์„ฑ๋œ ๊ฒฐ๊ณผ๋ฌผ์„ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋‹จ๊ณ„๋Š” ์†Œ์Šค ์ฝ”๋“œ ์ˆ˜์ค€์—์„œ ์ž‘๋™ํ•˜๋Š” ์ •์  ๋ถ„์„ ๋„๊ตฌ๋กœ๋Š” ๊ด€์ฐฐํ•  ์ˆ˜ ์—†๋Š” ๋ฐฉ์‹์œผ๋กœ ์ œ์–ด ํ๋ฆ„, ๋ฐ์ดํ„ฐ ํ๋ฆ„, ์ข…์†์„ฑ ๊ด€๊ณ„๋ฅผ ํฌ๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์†Œ์Šค ์ฝ”๋“œ ๊ฒ€์‚ฌ๋งŒ์œผ๋กœ๋Š” ํŒŒ์•…ํ•  ์ˆ˜ ์—†๋Š” ํ’ˆ์งˆ ์‹ ํ˜ธ๊ฐ€ ๋ฐฐํฌ ๊ฐ€๋Šฅํ•œ ๊ฒฐ๊ณผ๋ฌผ๋กœ ๋ณ€ํ™˜๋˜๋Š” ๊ณผ์ •์—์„œ ์œ ์ง€๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”ํžˆ ๋ฐœ์ƒํ•˜๋Š” ์™œ๊ณก ์ค‘ ํ•˜๋‚˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜ ์ฒ˜๋ฆฌ์™€ ์ฝ”๋“œ ์ƒ์„ฑ ๊ณผ์ •์—์„œ ๋น„๋กฏ๋ฉ๋‹ˆ๋‹ค. Kotlin ํ”„๋กœ์ ํŠธ๋Š” ๋นŒ๋“œ ์‹œ์ ์— ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜, ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•˜๊ฑฐ๋‚˜, ๊ตฌ์„ฑ ๋กœ์ง์„ ํ•ฉ์„ฑํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์— ์˜์กดํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ •์  ๋ถ„์„ ๋„๊ตฌ๋Š” ์ด๋Ÿฌํ•œ ์ƒ์„ฑ๋œ ์š”์†Œ๋ฅผ ๋ฌด์‹œํ•˜๊ฑฐ๋‚˜ ๋ถˆํˆฌ๋ช…ํ•œ ๊ฒƒ์œผ๋กœ ์ทจ๊ธ‰ํ•˜์—ฌ ์‹คํ–‰ ๋™์ž‘์— ๋Œ€ํ•œ ๋ถˆ์™„์ „ํ•œ ๋ชจ๋ธ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ์ œ์™ธํ•œ ํ’ˆ์งˆ ์ง€ํ‘œ๋Š” ๋ณต์žก์„ฑ์„ ๊ณผ์†Œํ‰๊ฐ€ํ•˜๊ณ  ํ…Œ์ŠคํŠธ ์šฉ์ด์„ฑ์„ ๊ณผ๋Œ€ํ‰๊ฐ€ํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์™œ๊ณก ์›์ธ์€ ์•„ํ‹ฐํŒฉํŠธ ๊ตฌ์„ฑ์ž…๋‹ˆ๋‹ค. Kotlin ๋ชจ๋“ˆ์€ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค ๋˜๋Š” Android ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ํŒจํ‚ค์ง•๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ์ฝ”๋“œ๊ฐ€ ์žฌ๋ฐฐ์น˜๋˜๊ฑฐ๋‚˜, ์…ฐ์ด๋”ฉ๋˜๊ฑฐ๋‚˜, ๋‹ค๋ฅธ ๊ตฌ์„ฑ ์š”์†Œ์™€ ๋ณ‘ํ•ฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์†Œ์Šค ์ˆ˜์ค€ ๋ถ„์„์œผ๋กœ๋Š” ์ด๋Ÿฌํ•œ ๋ณ€ํ™˜์ด ๊ฒฐํ•ฉ๋„๋‚˜ ์‹คํ–‰ ์ˆœ์„œ์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น ์ง€ ์ •ํ™•ํ•˜๊ฒŒ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ณ„์ ์œผ๋กœ๋Š” ๋А์Šจํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๋ชจ๋“ˆ๋„ ์—ฌ๋Ÿฌ ์•„ํ‹ฐํŒฉํŠธ์— ํฌํ•จ๋˜๋ฉด ํ•ต์‹ฌ ์ข…์†์„ฑ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์™œ๊ณก์€ ์•ž์„œ ๋…ผ์˜๋œ ๋ฌธ์ œ์ ๋“ค์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ ๋ณ€๋™์„ฑ ์ง€ํ‘œ๋นŒ๋“œ ์ปจํ…์ŠคํŠธ์˜ ๋ณ€ํ™”๋Š” ์ฝ”๋“œ ์œ ์ง€ ๊ด€๋ฆฌ์˜ ์šด์˜ ๋น„์šฉ์„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ์•„ํ‹ฐํŒฉํŠธ ์ˆ˜์ค€์˜ ๋™์ž‘์„ ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š” Kotlin ํ’ˆ์งˆ ์‹ ํ˜ธ๋Š” ํ˜„๋Œ€ํ™” ๋…ธ๋ ฅ์„ ์ž˜๋ชป๋œ ์˜์—ญ์œผ๋กœ ์ด๋Œ ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์—…์€ ์„œ๋ฅ˜์ƒ์œผ๋กœ๋Š” ๋ณต์žกํ•ด ๋ณด์ด๋Š” ์ฝ”๋“œ์˜ ๋ฆฌํŒฉํ† ๋ง์— ํˆฌ์žํ•˜๋ฉด์„œ ์žฌ์‚ฌ์šฉ์„ ํ†ตํ•ด ์œ„ํ—˜์„ ์ฆํญ์‹œํ‚ค๋Š” ๋” ๊ฐ„๋‹จํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๊ฐ„๊ณผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kotlin ์ •์  ๋ถ„์„์ด ์‹ค์งˆ์ ์ธ ํšจ๊ณผ๋ฅผ ์œ ์ง€ํ•˜๋ ค๋ฉด ์ปดํŒŒ์ผ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์ง์ ‘ ๋ชจ๋ธ๋งํ•˜๊ฑฐ๋‚˜ ์†Œ์Šค ์ฝ”๋“œ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ์•„ํ‹ฐํŒฉํŠธ ์ˆ˜์ค€์˜ ๊ฒฐ๊ณผ์™€ ์—ฐ๊ด€์‹œ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์—ฐ๊ด€ ๊ด€๊ณ„๊ฐ€ ์—†์œผ๋ฉด ์‹œ์Šคํ…œ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๊ณ  ๋นŒ๋“œ ํŒŒ์ดํ”„๋ผ์ธ์ด ๋”์šฑ ์ •๊ตํ•ด์ง์— ๋”ฐ๋ผ ํ’ˆ์งˆ ์‹ ํ˜ธ์˜ ์˜ˆ์ธก๋ ฅ์ด ๋–จ์–ด์ง‘๋‹ˆ๋‹ค.

์‹œ๊ฐ„ ๊ฒฝ๊ณผ์— ๋”ฐ๋ฅธ ์šด์˜ ์˜ํ–ฅ๊ณผ ์ƒ๊ด€๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ํ’ˆ์งˆ ์‹ ํ˜ธ

Kotlin ์ •์  ๋ถ„์„์ด ๊ธฐ์—…์˜ ์˜์‚ฌ๊ฒฐ์ •์„ ์ง€์›ํ•˜๋ ค๋ฉด ํ’ˆ์งˆ ์‹ ํ˜ธ๊ฐ€ ๋ฏธ์  ์„ ํ˜ธ๋„๊ฐ€ ์•„๋‹Œ ์šด์˜ ๊ฒฐ๊ณผ์™€ ์ƒ๊ด€๊ด€๊ณ„๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์†Œํ•œ ์Šคํƒ€์ผ ๋ณ€๊ฒฝ์ด๋‚˜ ๋„๊ตฌ ๊ตฌ์„ฑ ์—…๋ฐ์ดํŠธ์— ๋”ฐ๋ผ ๋ณ€๋™ํ•˜๋Š” ์‹ ํ˜ธ๋Š” ์žฅ๊ธฐ์ ์ธ ๊ณ„ํš ์ˆ˜๋ฆฝ์— ๋„์›€์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ์—…์€ ์ปดํŒŒ์ผ ์ฃผ๊ธฐ ์ „๋ฐ˜์— ๊ฑธ์ณ ์•ˆ์ •์ ์ด๋ฉฐ Kotlin ์ฝ”๋“œ๊ฐ€ ์žฅ์•  ๋ฐœ์ƒ, ์œ ์ง€ ๊ด€๋ฆฌ ๋…ธ๋ ฅ ๋ฐ ๋ณ€๊ฒฝ ์œ„ํ—˜์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ๋ฐ˜์˜ํ•˜๋Š” ์ง€ํ‘œ๋ฅผ ํ•„์š”๋กœ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์‹ ํ˜ธ๋Š” ๊ทœ์น™ ์œ„๋ฐ˜๋ณด๋‹ค๋Š” ๊ตฌ์กฐ์  ํŠน์„ฑ์—์„œ ๋น„๋กฏ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํŠน์ • Kotlin ๋ชจ๋“ˆ์— ๋Œ€ํ•œ ์˜์กด์„ฑ ์ง‘์ค‘, ๋ณ€๊ฒฝ ์„ธํŠธ์— ํŠน์ • ํด๋ž˜์Šค๊ฐ€ ๋‚˜ํƒ€๋‚˜๋Š” ๋นˆ๋„, Kotlin ์„œ๋น„์Šค์—์„œ ์‹œ์ž‘๋˜๋Š” ํ˜ธ์ถœ ์ฒด์ธ์˜ ๊นŠ์ด ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŠน์„ฑ์€ ์ฝ”๋“œ๊ฐ€ ์žฌํฌ๋งท๋˜๊ฑฐ๋‚˜ ๋ถ€๋ถ„์ ์œผ๋กœ ๋ฆฌํŒฉํ† ๋ง๋˜๋”๋ผ๋„ ์œ ์ง€๋˜๋ฏ€๋กœ ์‹œ์Šคํ…œ์  ์œ„ํ—˜์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋”์šฑ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ง€ํ‘œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์ด๋Ÿฌํ•œ ์‹ ํ˜ธ์˜ ํŒจํ„ด์€ ์šฐ์„ ์ˆœ์œ„ ๊ฒฐ์ •์— ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ํ–ฅ๋ ฅ์ด ํฐ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ์ง€์†์ ์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋Š” Kotlin ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์•„ํ‚คํ…์ฒ˜ ๊ฒฉ๋ฆฌ ๋˜๋Š” ์‹ฌ์ธต์ ์ธ ํ…Œ์ŠคํŠธ ํˆฌ์ž๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ, ์•ˆ์ •์ ์ธ ์˜์กด์„ฑ ํ”„๋กœํ•„์„ ๊ฐ€์ง„ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ์œ„ํ—˜ ๋ถ€๋‹ด์ด ๋‚ฎ์€ ์ ์ง„์  ์ง„ํ™”๋ฅผ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ด€์ ์€ ๋‹ค์Œ์—์„œ ์ œ์‹œ๋œ ํ†ต์ฐฐ๋ ฅ๊ณผ ์ผ๋งฅ์ƒํ†ตํ•ฉ๋‹ˆ๋‹ค. MTTR ๋ถ„์‚ฐ ๊ฐ์†Œ์™„๋ฒฝํ•จ์ด ์•„๋‹Œ ์˜ˆ์ธก ๊ฐ€๋Šฅ์„ฑ์ด ์šด์˜ ํšŒ๋ณต๋ ฅ์„ ์ขŒ์šฐํ•˜๋Š” ๊ณณ.

๊ทœ์น™ ๊ฐœ์ˆ˜๋‚˜ ํ‘œ๋ฉด์ ์ธ ์ง€ํ‘œ์—๋งŒ ์ดˆ์ ์„ ๋งž์ถ”๋Š” ์ •์  ๋ถ„์„ ๋„๊ตฌ๋Š” ์ด๋Ÿฌํ•œ ์žฅ๊ธฐ์ ์ธ ๊ด€์ ์„ ์ œ๋Œ€๋กœ ์ง€์›ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋ถ„์„ ๊ฒฐ๊ณผ๊ฐ€ ๋งค๋ฒˆ ์ดˆ๊ธฐํ™”๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์—… ์ดํ•ด๊ด€๊ณ„์ž์—๊ฒŒ ์ค‘์š”ํ•œ ์ถ”์„ธ๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ฝ”ํ‹€๋ฆฐ ํ’ˆ์งˆ ๋ถ„์„์€ ์ถ”์ , ๋น„๊ต, ๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ ๊ฒฐ๊ณผ์™€์˜ ์ƒ๊ด€๊ด€๊ณ„๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋Š” ์‹ ํ˜ธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋น„๋กœ์†Œ ์ „๋žต์  ๊ฐ€์น˜๋ฅผ ์ง€๋‹™๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋งฅ๋ฝ์—์„œ ํ’ˆ์งˆ ์‹ ํ˜ธ์˜ ์ƒ์กด๋ ฅ์€ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ฅธ ์œ ์šฉ์„ฑ์œผ๋กœ ์ธก์ •๋ฉ๋‹ˆ๋‹ค. ํ˜ผํ•ฉ ์–ธ์–ด ์ปดํŒŒ์ผ ๋ฐ ์ง„ํ™”ํ•˜๋Š” ๋นŒ๋“œ ํŒŒ์ดํ”„๋ผ์ธ ์ „๋ฐ˜์— ๊ฑธ์ณ ์ง€์†๋˜๋Š” ์‹ ํ˜ธ๋Š” Kotlin์ด ๋ณต์žกํ•œ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ํ™•์žฅ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค.

Gradle ๋ฐ CI ํŒŒ์ดํ”„๋ผ์ธ์—์„œ Kotlin ์ •์  ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ๋ณ€ํ˜• ํญ๋ฐœ ํ˜„์ƒ ๋ฐœ์ƒ ์‹œ ๋Œ€์ฒ˜ ๋ฐฉ๋ฒ•

Kotlin ๋ถ„์„์€ ๊ฐœ๋ณ„ ๋ชจ๋“ˆ์— ๋Œ€ํ•ด ์‹คํ–‰๋  ๋•Œ๋ณด๋‹ค ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๋นŒ๋“œ ํŒŒ์ดํ”„๋ผ์ธ์— ํ†ตํ•ฉ๋  ๋•Œ ํ›จ์”ฌ ๋” ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค. JVM ๋ฐ Android ํ™˜๊ฒฝ์—์„œ Gradle์€ ๋‹จ์ˆœํ•œ ๋นŒ๋“œ ๋„๊ตฌ๊ฐ€ ์•„๋‹ˆ๋ผ ๋™์ผํ•œ ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ ์—ฌ๋Ÿฌ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๊ณ„์ธต์ž…๋‹ˆ๋‹ค. ๋ณ€ํ˜•, ํ”Œ๋ ˆ์ด๋ฒ„, ํ”„๋กœํŒŒ์ผ ๋ฐ ํ™˜๊ฒฝ๋ณ„ ๊ตฌ์„ฑ์œผ๋กœ ์ธํ•ด ์ •์  ๋ถ„์„์ด ๊ณ ๋ คํ•ด์•ผ ํ•˜๋Š” ์‹คํ–‰ ์ปจํ…์ŠคํŠธ์˜ ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ํ•œ ๋ณ€ํ˜•์—์„œ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋™์ž‘์„ ๋ณด์ด๋Š” Kotlin ์ฝ”๋“œ๊ฐ€ ์กฐ๊ฑด๋ถ€ ์ปดํŒŒ์ผ ๊ฒฝ๋กœ ๋ฐ ์ข…์†์„ฑ ํ•ด๊ฒฐ ๋ฐฉ์‹์˜ ์ฐจ์ด๋กœ ์ธํ•ด ๋‹ค๋ฅธ ๋ณ€ํ˜•์—์„œ๋Š” ์œ„ํ—˜์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ณ€ํ˜• ์ฝ”๋“œ์˜ ํญ๋ฐœ์ ์ธ ์ฆ๊ฐ€๋Š” ๋ถ„์„ ๊นŠ์ด์™€ ํŒŒ์ดํ”„๋ผ์ธ ์•ˆ์ •์„ฑ ์‚ฌ์ด์— ๊ทผ๋ณธ์ ์ธ ๊ธด์žฅ ๊ด€๊ณ„๋ฅผ ๋งŒ๋“ค์–ด๋ƒ…๋‹ˆ๋‹ค. ๊ธฐ์—…๋“ค์€ ์ •์  ๋ถ„์„์ด ๋นŒ๋“œ ์‹œ๊ฐ„์„ ๋Š˜๋ฆฌ๊ฑฐ๋‚˜ ๋น„๊ฒฐ์ •์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์‹ ํ˜ธ๋ฅผ ์ œ๊ณตํ•ด ์ค„ ๊ฒƒ์„ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. Kotlin ๋ถ„์„์ด Gradle์˜ ์‹คํ–‰ ๋ชจ๋ธ์„ ๊ณ ๋ คํ•˜์—ฌ ์„ค๊ณ„๋˜์ง€ ์•Š์œผ๋ฉด, ๋ณ€ํ˜• ์ฝ”๋“œ๋ฅผ ๋ฌด์‹œํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์ง€๋‚˜์น˜๊ฒŒ ๋‹จ์ˆœํ™”ํ•˜๊ฑฐ๋‚˜ ์ค‘๋ณต๋˜๊ณ  ์ƒ์ถฉ๋˜๋Š” ๊ฒฐ๊ณผ๋กœ ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ณผ๋ถ€ํ•˜ ์ƒํƒœ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํšจ๊ณผ์ ์ธ ๋ถ„์„์€ Kotlin ์ฝ”๋“œ๊ฐ€ ์‹ค์ œ๋กœ ๋นŒ๋“œ, ํŒจํ‚ค์ง• ๋ฐ ์—ฌ๋Ÿฌ ํ™˜๊ฒฝ์— ๋ฐฐํฌ๋˜๋Š” ๋ฐฉ์‹๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Gradle ๋นŒ๋“œ ๊ทธ๋ž˜ํ”„๊ฐ€ Kotlin ๋ถ„์„ ์ •ํ™•๋„์— ๋ฏธ์น˜๋Š” ์ œ์•ฝ ์กฐ๊ฑด

Gradle ๋นŒ๋“œ ๊ทธ๋ž˜ํ”„๋Š” Kotlin ์ปดํŒŒ์ผ ๋‹จ์œ„์˜ ์ˆœ์„œ, ๋ฒ”์œ„ ๋ฐ ๊ตฌ์„ฑ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์‹œ์Šคํ…œ์—์„œ ์ด๋Ÿฌํ•œ ๊ทธ๋ž˜ํ”„๋Š” ์„ ํ˜•์ ์ธ ๊ฒฝ์šฐ๊ฐ€ ๋“œ๋ญ…๋‹ˆ๋‹ค. ์กฐ๊ฑด๋ถ€ ์ž‘์—… ์‹คํ–‰, ๋™์  ์ข…์†์„ฑ ํ•ด๊ฒฐ ๋ฐ ํ™˜๊ฒฝ๋ณ„ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋™์ž‘ ๋“ฑ์ด ํฌํ•จ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‹จ์ผ ์ปดํŒŒ์ผ ๊ฒฝ๋กœ๋ฅผ ๊ฐ€์ •ํ•˜๋Š” ์ •์  ๋ถ„์„ ๋„๊ตฌ๋Š” ๋‹ค์–‘ํ•œ ์กฐ๊ฑด์—์„œ Kotlin ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์–ด์…ˆ๋ธ”๋˜๋Š”์ง€ ์ œ๋Œ€๋กœ ํฌ์ฐฉํ•˜์ง€ ๋ชปํ•˜์—ฌ ๋ถˆ์™„์ „ํ•˜๊ฑฐ๋‚˜ ์˜คํ•ด์˜ ์†Œ์ง€๊ฐ€ ์žˆ๋Š” ๊ฒฐ๋ก ์„ ๋„์ถœํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

ํ”ํžˆ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ ์ค‘ ํ•˜๋‚˜๋Š” ๋นŒ๋“œ ๋ฒ„์ „๋ณ„ ์ข…์†์„ฑ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. Kotlin ๋ชจ๋“ˆ์€ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ, ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ ๋˜๋Š” ์ง€์—ญ๋ณ„ ๋ฐฐํฌ ํ™˜๊ฒฝ๊ณผ ๊ฐ™์€ ๋นŒ๋“œ ํ”„๋กœํ•„์— ๋”ฐ๋ผ ์„œ๋กœ ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜์—ฌ ์ปดํŒŒ์ผ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ผ ์ข…์†์„ฑ ์ง‘ํ•ฉ๋งŒ์„ ๊ธฐ์ค€์œผ๋กœ Kotlin ์ฝ”๋“œ๋ฅผ ํ‰๊ฐ€ํ•˜๋Š” ์ •์  ๋ถ„์„์€ ๋ชจ๋“  ๋นŒ๋“œ ๋ฒ„์ „์—์„œ ๋™์ž‘์„ ์ •ํ™•ํ•˜๊ฒŒ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ•œ๊ณ„๋Š” ์ œ์•ฝ ์กฐ๊ฑด์ด ์ ์  ๋” ์—„๊ฒฉํ•ด์ง€๋Š” ํ™˜๊ฒฝ์„ ํ†ตํ•ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐฐํฌํ•  ๋•Œ ํŠนํžˆ ์ค‘์š”ํ•ด์ง‘๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ๊ณผ์ œ๋Š” ์ž‘์—… ์ˆ˜์ค€์˜ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ์ž…๋‹ˆ๋‹ค. Gradle์€ ๋นŒ๋“œ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋™์‹œ์— ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŒŒ์ดํ”„๋ผ์ธ์— ํ†ตํ•ฉ๋œ ์ •์  ๋ถ„์„์€ ๊ฒฝ์Ÿ ์กฐ๊ฑด์ด๋‚˜ ์ผ๊ด€์„ฑ ์—†๋Š” ์ƒํƒœ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋Ÿฌํ•œ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋™์‹œ ์‹คํ–‰์„ ์œ„ํ•ด ์„ค๊ณ„๋˜์ง€ ์•Š์€ ๋„๊ตฌ๋Š” ์žฌํ˜„ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ถ„์„ ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ์‹ ๋ขฐ๋„๋ฅผ ๋–จ์–ด๋œจ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ถˆ์•ˆ์ •์„ฑ์€ ๊ฐ์‚ฌ ๊ฐ€๋Šฅ์„ฑ๊ณผ ๋ฐ˜๋ณต์„ฑ์— ๋Œ€ํ•œ ๊ธฐ์—… ์š”๊ตฌ ์‚ฌํ•ญ๊ณผ ์ง์ ‘์ ์œผ๋กœ ์ƒ์ถฉ๋ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ณผ์ œ๋“ค์€ ์•ž์„œ ๋…ผ์˜๋œ ๋” ๊ด‘๋ฒ”์œ„ํ•œ ๋ฌธ์ œ๋“ค์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. CI ํŒŒ์ดํ”„๋ผ์ธ ๋ถ„์„ ๊ณผ์ œ๋นŒ๋“œ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์˜ ๋ณต์žก์„ฑ์œผ๋กœ ์ธํ•ด ๋‹จ์ˆœํ•œ ๋ถ„์„ ํ†ตํ•ฉ์˜ ํšจ๊ณผ๊ฐ€ ์ œํ•œ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Gradle ๋นŒ๋“œ ๊ทธ๋ž˜ํ”„์˜ ๊ตฌ์กฐ๋ฅผ ๋ฌด์‹œํ•˜๋Š” Kotlin ์ •์  ๋ถ„์„์€ ์ฝ”๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ๋ฐฐํฌ๋˜๋Š” ์‹ค์ œ ๋ฐฉ์‹๊ณผ ๋™๋–จ์–ด์งˆ ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ •ํ™•ํ•œ ๋ถ„์„์„ ์œ„ํ•ด์„œ๋Š” ์ด๋Ÿฌํ•œ ๊ทธ๋ž˜ํ”„๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋ชจ๋ธ๋งํ•˜๊ฑฐ๋‚˜ ๋ชจ๋“  ๋ณ€ํ˜•์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฐ๋ก ์œผ๋กœ โ€‹โ€‹๋ถ„์„ ๋ฒ”์œ„๋ฅผ ์ œํ•œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Android ๋ณ€ํ˜• ๋ฐ ๋ฒ„์ „๋ณ„ Kotlin ๋™์ž‘

์•ˆ๋“œ๋กœ์ด๋“œ ํฌํŠธํด๋ฆฌ์˜ค๋Š” ์ œํ’ˆ ๋ณ€ํ˜•, ๋นŒ๋“œ ์œ ํ˜•, ๋ฆฌ์†Œ์Šค ์˜ค๋ฒ„๋ ˆ์ด ๋“ฑ์„ ๋„์ž…ํ•˜์—ฌ ๋ณ€ํ˜• ํญ์ฆ ๋ฌธ์ œ๋ฅผ ๋”์šฑ ์•…ํ™”์‹œํ‚ค๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ์š”์†Œ๋“ค์€ Kotlin ์‹คํ–‰ ๊ฒฝ๋กœ์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. ๋‹จ์ผ Kotlin ํด๋ž˜์Šค๋Š” ํ™œ์„ฑํ™”๋œ ๋ณ€ํ˜•์— ๋”ฐ๋ผ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฆฌ์†Œ์Šค, ๊ถŒํ•œ ๋˜๋Š” ํ”Œ๋žซํผ API์™€ ์ƒํ˜ธ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ฐจ์ด์ ์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์€ ์ •์  ๋ถ„์„์€ ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ์ „ํ˜€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๋ฅผ ํ”Œ๋ž˜๊ทธํ•˜๊ฑฐ๋‚˜ ํŠน์ • ๊ตฌ์„ฑ์—์„œ๋งŒ ๋‚˜ํƒ€๋‚˜๋Š” ๋ฌธ์ œ๋ฅผ ๋†“์น˜๋Š” ๋“ฑ ์œ„ํ—˜์„ ์ž˜๋ชป ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kotlin์˜ ๋ฒ„์ „๋ณ„ ๋™์ž‘์€ ์ข…์ข… ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ, ์Šค๋ ˆ๋”ฉ ๋ฐ ๋ฆฌ์†Œ์Šค ์ ‘๊ทผ์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค. Kotlin ์ถ”์ƒํ™”๋Š” ๊ท ์ผํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•˜๋ฉด์„œ ๋ฒ„์ „๋ณ„ ๊ตฌํ˜„์„ ์œ„์ž„ํ•จ์œผ๋กœ์จ ์ด๋Ÿฌํ•œ ์ฐจ์ด์ ์„ ์ˆจ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์†Œ์Šค ์ฝ”๋“œ ์ˆ˜์ค€์—์„œ ์ž‘๋™ํ•˜๋Š” ์ •์  ๋ถ„์„ ๋„๊ตฌ๋Š” ํŠน์ • ์‹คํ–‰ ๊ฒฝ๋กœ๊ฐ€ ํŠน์ • ๋นŒ๋“œ ์กฐ๊ฑด์—์„œ๋งŒ ๋„๋‹ฌ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์‚ฌ์‹ค์„ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ํ’ˆ์งˆ ์‹ ํ˜ธ๊ฐ€ ํŒŒํŽธํ™”๋˜์–ด ๋ฒ„์ „ ๊ฐ„์— ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ํŒŒํŽธํ™”๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ฑฐ๋ฒ„๋„Œ์Šค๋ฅผ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋ฆด๋ฆฌ์Šค ์Šน์ธ์„ ๋‹ด๋‹นํ•˜๋Š” ํŒ€์€ ์–ด๋–ค ๋ถ„์„ ๊ฒฐ๊ณผ๊ฐ€ ์–ด๋–ค ์•„ํ‹ฐํŒฉํŠธ์— ์ ์šฉ๋˜๋Š”์ง€ ์ •ํ™•ํžˆ ํŒŒ์•…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ถ„์„ ๊ฒฐ๊ณผ๊ฐ€ ๋นŒ๋“œ ๋ณ€ํ˜•๊ณผ ๋ช…ํ™•ํ•˜๊ฒŒ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด ์˜์‚ฌ ๊ฒฐ์ •๊ถŒ์ž๋Š” ๋ณด์ˆ˜์ ์ธ ๊ฐ€์ •์„ ์„ธ์šฐ๊ฒŒ ๋˜์–ด ๋ฆด๋ฆฌ์Šค๊ฐ€ ์ง€์—ฐ๋˜๊ฑฐ๋‚˜ ์ˆ˜์ • ์ž‘์—…์— ๊ณผ๋„ํ•œ ํˆฌ์ž๋ฅผ ํ•˜๊ฒŒ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ถˆ์ผ์น˜๋กœ ์ธํ•œ ๋น„์šฉ์€ ์•ˆ๋“œ๋กœ์ด๋“œ ํฌํŠธํด๋ฆฌ์˜ค ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๊ณ  ๋ณ€ํ˜• ๋งคํŠธ๋ฆญ์Šค๊ฐ€ ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ๋”์šฑ ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์šฐ๋ ค์™€ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ ๋นŒ๋“œ ๋ณต์žก์„ฑ์กฐ๊ฑด๋ถ€ ์‹คํ–‰ ๊ฒฝ๋กœ๊ฐ€ ์ •์  ์ถ”๋ก ์— ์–ด๋ ค์›€์„ ์ฃผ๋Š” ์ƒํ™ฉ์—์„œ, Kotlin Android ๋ถ„์„ ๋„๊ตฌ๊ฐ€ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋ ค๋ฉด ๋ณ€ํ˜•๋ณ„๋กœ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ฑฐ๋‚˜ ๋ถ„์„ ๋ฒ”์œ„์˜ ํ•œ๊ณ„๋ฅผ ๋ช…ํ™•ํžˆ ์ œ์‹œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ช…ํ™•์„ฑ์ด ์—†๋‹ค๋ฉด ๊ธฐ์—…์€ ๋ณ€ํ˜•๋ณ„ ๋ฌธ์ œ๋ฅผ ์‹œ์Šคํ…œ์  ๋ฌธ์ œ์™€ ํ˜ผ๋™ํ•˜์—ฌ ์šฐ์„ ์ˆœ์œ„ ์„ค์ • ๋ฐ ์œ„ํ—˜ ํ‰๊ฐ€๋ฅผ ์™œ๊ณกํ•  ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

CI ํ†ตํ•ฉ ์‹œ ์‹ฌ์ธต๋„์™€ ์ฒ˜๋ฆฌ๋Ÿ‰ ๊ฐ„์˜ ์ ˆ์ถฉ์ 

Kotlin ์ •์  ๋ถ„์„์„ CI ํŒŒ์ดํ”„๋ผ์ธ์— ํ†ตํ•ฉํ•˜๋ฉด ๋ถ„์„ ๊นŠ์ด์™€ ํŒŒ์ดํ”„๋ผ์ธ ์ฒ˜๋ฆฌ๋Ÿ‰ ์‚ฌ์ด์— ์ ˆ์ถฉ์ ์ด ์ƒ๊น๋‹ˆ๋‹ค. ๊ธฐ์—…์€ CI ์‹œ์Šคํ…œ์ด ๋น ๋ฅธ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜๋ฉด์„œ ํ’ˆ์งˆ ๊ฒ€์ฆ์„ ์‹œํ–‰ํ•˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆ ๊ฐ„ ๋˜๋Š” ๋ณ€ํ˜• ๊ฐ„ ๋™์ž‘์„ ๋ชจ๋ธ๋งํ•˜๋ ค๋Š” ์‹ฌ์ธต ๋ถ„์„์€ ์‹คํ–‰ ์‹œ๊ฐ„์„ ํฌ๊ฒŒ ์ฆ๊ฐ€์‹œ์ผœ ํŒŒ์ดํ”„๋ผ์ธ ํ™•์žฅ์„ฑ์„ ์ €ํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ, ์–•์€ ๋ถ„์„์€ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ์œ ์ง€ํ•˜์ง€๋งŒ ์‹ฌ์ธต์ ์ธ ํ†ต์ฐฐ๋ ฅ์„ ํฌ์ƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ ˆ์ถฉ์ ์€ ์ปดํŒŒ์ผ ๋น„์šฉ๊ณผ ๋นŒ๋“œ ๊ทธ๋ž˜ํ”„์˜ ๋ณต์žก์„ฑ ๋•Œ๋ฌธ์— ํŠนํžˆ Kotlin ํ™˜๊ฒฝ์—์„œ ๋‘๋“œ๋Ÿฌ์ง‘๋‹ˆ๋‹ค. Kotlin ์ปดํŒŒ์ผ์€ ์ผ๋ฐ˜์ ์œผ๋กœ Java ์ปดํŒŒ์ผ๋ณด๋‹ค ๋ฆฌ์†Œ์Šค ์†Œ๋ชจ๊ฐ€ ๋งŽ์œผ๋ฉฐ, ๋ถ„์„ ๋‹จ๊ณ„๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ณ‘๋ชฉ ํ˜„์ƒ์ด ๋”์šฑ ์‹ฌํ™”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ชจ๋“  ์ปค๋ฐ‹์—์„œ ํŠธ๋ฆฌ๊ฑฐ๋˜๋Š” CI ํŒŒ์ดํ”„๋ผ์ธ์€ ๋ถ„์„ ์‹คํ–‰ ๋นˆ๋„์™€ ๋ฒ”์œ„๋ฅผ ๊ท ํ˜• ์žˆ๊ฒŒ ์กฐ์ ˆํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ์กฐ์ง์—์„œ๋Š” ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋Œ€ํ•ด ๊ฐ„๋‹จํ•œ ๊ฒ€์‚ฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ์‹ฌ์ธต ๋ถ„์„์€ ์˜ˆ์•ฝ๋œ ๋‹จ๊ณ„๋‚˜ ํŠน์ • ๋‹จ๊ณ„์—๋งŒ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ๊ณผ์ œ๋Š” ์ด๋Ÿฌํ•œ ๋‹จ๊ณ„๋ณ„ ์ ‘๊ทผ ๋ฐฉ์‹์— ์‚ฌ๊ฐ์ง€๋Œ€๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹ฌ์ธต ๋ถ„์„์ด ๋„ˆ๋ฌด ๋“œ๋ฌผ๊ฒŒ ์‹คํ–‰๋˜๋ฉด ์‹œ์Šคํ…œ์  ์œ„ํ—˜์ด ์ ๊ฒ€ ์‹œ์  ์‚ฌ์ด์— ๊ฐ์ง€๋˜์ง€ ์•Š๊ณ  ๋ˆ„์ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •์  ๋ถ„์„ ๊ฒฐ๊ณผ๋Š” ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋ˆ„์ ๋˜๋„๋ก ์„ค๊ณ„๋˜์–ด์•ผ ํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๊ธฐ์—…์€ ๊ฐœ๋ณ„ ์‹คํ–‰ ๋ฒ”์œ„๊ฐ€ ์ข๋”๋ผ๋„ ์ถ”์„ธ๋ฅผ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์€ ๋‹ค์Œ์—์„œ ์„ค๋ช…ํ•˜๋Š” ๊ด€ํ–‰๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. ์„ฑ๋Šฅ ํšŒ๊ท€ ํŒŒ์ดํ”„๋ผ์ธ์—ฌ๊ธฐ์„œ ์„ ํƒ์  ์‹ฌ์ธต ๋ถ„์„์„ ํ†ตํ•ด ํ†ต์ฐฐ๋ ฅ์„ ํฌ๊ธฐํ•˜์ง€ ์•Š๊ณ ๋„ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ถ๊ทน์ ์œผ๋กœ CI ํŒŒ์ดํ”„๋ผ์ธ์—์„œ Kotlin ์ •์  ๋ถ„์„์€ ์ด์ง„ ๊ฒŒ์ดํŠธ๊ฐ€ ์•„๋‹Œ ์—ฐ์†์ ์ธ ์‹ ํ˜ธ๋กœ ์ทจ๊ธ‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Gradle ๋ฐ CI ํ™˜๊ฒฝ์— ๋งž์ถฐ ๋ถ„์„ ํ†ตํ•ฉ์„ ์„ค๊ณ„ํ•˜๋Š” ๊ธฐ์—…์€ ๋ฐฐํฌ ์•ˆ์ •์„ฑ์„ ์ €ํ•ดํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ๋” ํฐ ๊ฐ€์น˜๋ฅผ ์ฐฝ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด, ์ ์‘ ์—†์ด ๋ถ„์„ ๋ชจ๋ธ์„ ํŒŒ์ดํ”„๋ผ์ธ์— ์–ต์ง€๋กœ ์ ์šฉํ•˜๋Š” ๊ธฐ์—…์€ ์ง€์† ๊ฐ€๋Šฅํ•œ ๊ท ํ˜•์„ ์ด๋ฃจ๊ธฐ๋ณด๋‹ค๋Š” ์†๋„์™€ ์•ˆ์ „์„ฑ ์‚ฌ์ด์—์„œ ์„ ํƒ์„ ๊ฐ•์š”๋ฐ›๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

Kotlin SAST ๋ฐ JVM, Android, ๋น„๊ณต๊ฐœ ์ €์žฅ์†Œ ์ „๋ฐ˜์— ๊ฑธ์นœ ์˜์กด์„ฑ ์œ„ํ—˜ ๋ถ„์„

Kotlin ์‹œ์Šคํ…œ์˜ ๋ณด์•ˆ ๋ถ„์„์€ ๋นŒ๋“œ ๊ตฌ์กฐ ๋ฐ ์ข…์†์„ฑ ํ† ํด๋กœ์ง€์™€ ๋ถ„๋ฆฌ๋œ ๋…๋ฆฝ์ ์ธ ํ™œ๋™์œผ๋กœ ์ทจ๊ธ‰๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ JVM ๋ฐ Android ํ™˜๊ฒฝ์—์„œ Kotlin ์ฝ”๋“œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ๋‚ด๋ถ€ ๊ณต์œ  ๊ตฌ์„ฑ ์š”์†Œ ๋ฐ ์ƒ์„ฑ๋œ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํŒ€์ด ์ง์ ‘์ ์œผ๋กœ ์ธ์ง€ํ•˜์ง€ ๋ชปํ•˜๋Š” ์œ„ํ—˜์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ •์  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ณด์•ˆ ํ…Œ์ŠคํŠธ๋Š” Kotlin์„ ๋‹จ์ˆœํžˆ ์ž‘์„ฑ๋œ ์†Œ์Šค ์ฝ”๋“œ๋กœ๋งŒ ๊ณ ๋ คํ•ด์„œ๋Š” ์•ˆ ๋˜๋ฉฐ, ์ทจ์•ฝ์ ์ด ์ข…์†์„ฑ ๋ฐ ๊ตฌ์„ฑ์„ ํ†ตํ•ด ์ „ํŒŒ๋˜๋Š” ํ†ตํ•ฉ ํ‘œ๋ฉด์œผ๋กœ๋„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Kotlin ์•„ํ‹ฐํŒฉํŠธ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋ผ์ด๋น— ์ €์žฅ์†Œ์™€ ๋‚ด๋ถ€ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์— ๋ถ„์‚ฐ๋  ๊ฒฝ์šฐ ๋ณต์žก์„ฑ์ด ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋ณด์•ˆ ์ƒํƒœ๋Š” Kotlin ์ฝ”๋“œ ์ž‘์„ฑ ๋ฐฉ์‹๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ข…์†์„ฑ ์„ ํƒ, ๋ฒ„์ „ ๊ด€๋ฆฌ ๋ฐ ์‚ฌ์šฉ ๋ฐฉ์‹์— ๋”ฐ๋ผ์„œ๋„ ํฌ๊ฒŒ ์ขŒ์šฐ๋ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ์ €์žฅ์†Œ ๋‚ด์˜ ๋ณด์•ˆ ์ทจ์•ฝ์ ๋งŒ์„ ๋ถ„์„ํ•˜๋Š” ์ •์  ๋ถ„์„์€ ์ทจ์•ฝํ•œ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์„œ๋น„์Šค ๋ฐ ๋ฐฐํฌ ๋‹จ์œ„ ์ „๋ฐ˜์— ์–ด๋–ป๊ฒŒ ํ™•์‚ฐ๋˜๋Š”์ง€ ํŒŒ์•…ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ํšจ๊ณผ์ ์ธ Kotlin SAST๋Š” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ๊ทœ๋ชจ์—์„œ ๊ทธ ์œ ํšจ์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋Ÿฌํ•œ ๊ฒฝ๊ณ„๋ฅผ ๋„˜๋‚˜๋“ค๋ฉฐ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ณด์•ˆ์— ๋ฏผ๊ฐํ•œ ์‹คํ–‰ ๊ฒฝ๋กœ์—์„œ์˜ Kotlin ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๋ถ„์„

Kotlin ์‹œ์Šคํ…œ์˜ ๋ณด์•ˆ ์ทจ์•ฝ์ ์€ API์˜ ๋ช…์‹œ์ ์ธ ์˜ค์šฉ๋ณด๋‹ค๋Š” ๋ฐ์ดํ„ฐ ํ๋ฆ„์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. Kotlin์˜ ํ‘œํ˜„๋ ฅ์ด ํ’๋ถ€ํ•œ ๊ตฌ๋ฌธ์€ ์ž…๋ ฅ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ, ๋ณ€ํ™˜ ๋ฐ ์ „๋‹ฌ์„ ๊ฐ„๊ฒฐํ•œ ๊ตฌ์กฐ๋กœ ์••์ถ•ํ•˜์—ฌ ์ˆ˜๋™ ๊ฒ€์‚ฌ๋ฅผ ํ†ตํ•ด ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ณด์•ˆ ๋ถ„์„์„ ์ง€์›ํ•˜๋Š” ์ •์  ๋ถ„์„ ๋„๊ตฌ๋Š” ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ์ถœ์ฒ˜์—์„œ ๋ฐœ์ƒํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ Kotlin ์ฝ”๋“œ๋ฅผ ๊ฑฐ์ณ ๋ฏผ๊ฐํ•œ ๋ถ€๋ถ„์œผ๋กœ ์–ด๋–ป๊ฒŒ ํ๋ฅด๋Š”์ง€ ์ถ”์ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ์—์„œ ์ด๋Ÿฌํ•œ ์‹คํ–‰ ๊ฒฝ๋กœ๋Š” ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ๊ณผ ์„œ๋น„์Šค์— ๊ฑธ์ณ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. Kotlin API ์—”๋“œํฌ์ธํŠธ๋Š” ์ž…๋ ฅ์„ ๋กœ์ปฌ์—์„œ ๊ฒ€์ฆํ•˜๊ณ , ๊ณต์œ  ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฑฐ์ณ ์ตœ์ข…์ ์œผ๋กœ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ํ•˜์œ„ ์‹œ์Šคํ…œ์œผ๋กœ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ผ ๋ชจ๋“ˆ ๋‚ด์—์„œ๋งŒ ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ํ‰๊ฐ€ํ•˜๋Š” ์ •์  ๋ถ„์„์€ ๋ชจ๋“ˆ ๊ฒฝ๊ณ„๋ฅผ ๋„˜๋‚˜๋“ค๋ฉฐ ๋ฐœ์ƒํ•˜๋Š” ๋ณ€ํ™˜์„ ๋†“์น  ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ•œ๊ณ„๋Š” ํŠนํžˆ Kotlin ์ฝ”๋“œ๊ฐ€ ๋™์ผํ•œ ์•ˆ์ „์„ฑ ๋ณด์žฅ์„ ์ ์šฉํ•˜์ง€ ์•Š๋Š” ๋ ˆ๊ฑฐ์‹œ Java ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์ •ํ™•ํ•œ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๋ถ„์„์„ ์œ„ํ•ด์„œ๋Š” ๊ณ ์ฐจ ํ•จ์ˆ˜, ๋žŒ๋‹ค, ์ธ๋ผ์ธ ํ•จ์ˆ˜์™€ ๊ฐ™์€ Kotlin ํŠน์œ ์˜ ๊ตฌ๋ฌธ๋„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ตฌ๋ฌธ๋“ค์€ ํ‘œ๋ฉด์ ์œผ๋กœ๋งŒ ๋ณด๋ฉด ์‹ค์ œ ์‹คํ–‰ ๊ฒฝ๋กœ๋ฅผ ๋ชจํ˜ธํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณด์•ˆ์— ์ดˆ์ ์„ ๋งž์ถ˜ ์ •์  ๋ถ„์„์€ ์ด๋Ÿฌํ•œ ์ถ”์ƒํ™”๋ฅผ ํ•ด์†Œํ•˜์—ฌ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณ€ํ™˜๋˜๊ฑฐ๋‚˜ ์˜๋„๋œ ์ œ์•ฝ ์กฐ๊ฑด์„ ๋ฒ—์–ด๋‚˜๋Š” ์ง€์ ์„ ์‹๋ณ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ•ด์†Œ๊ฐ€ ์—†์œผ๋ฉด ์ค‘์š”ํ•œ ์ทจ์•ฝ์ ์„ ๋†“์น˜๊ฑฐ๋‚˜ ๊ณผ๋„ํ•œ ์˜คํƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ณผ์ œ๋“ค์€ ๋ณด๋‹ค ๊ด‘๋ฒ”์œ„ํ•œ ๋…ผ์˜์™€ ๋งฅ๋ฝ์„ ๊ฐ™์ดํ•ฉ๋‹ˆ๋‹ค. ์˜ค์—ผ ํ๋ฆ„ ๋ถ„์„ํŠนํžˆ, ์œ„ํ—˜์„ ํ‰๊ฐ€ํ•˜๋Š” ๋ฐ ์žˆ์–ด ์ „ํŒŒ ๋ฐฉ์‹์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ํ•„์ˆ˜์ ์ธ ๊ฒฝ์šฐ, ๊ธฐ์—… ํ™˜๊ฒฝ์˜ ๋ณต์žก์„ฑ์„ ๊ฒฌ๋ŽŒ๋‚ด๋Š” Kotlin SAST๋Š” ๋ฐ์ดํ„ฐ ํ๋ฆ„์„ ์ตœ์šฐ์„  ๊ณผ์ œ๋กœ ๋‹ค๋ฃจ๊ณ  ๊ตฌ๋ฌธ ํŒจํ„ด์—๋งŒ ์˜์กดํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์‹ค์ œ ์‹คํ–‰ ๊ฒฝ๋กœ์™€ ์—ฐ๊ด€์‹œํ‚ต๋‹ˆ๋‹ค.

๊ณต์œ  ์ฝ”ํ‹€๋ฆฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์˜์กด์„ฑ ์œ„ํ—˜ ์ฆํญ

Kotlin ํ™˜๊ฒฝ์—์„œ ์˜์กด์„ฑ ์œ„ํ—˜์€ ๋‹จ์ผ ๋นŒ๋“œ ํŒŒ์ผ์— ์„ ์–ธ๋œ ์ง์ ‘์ ์ธ ์˜์กด์„ฑ์—๋งŒ ๊ตญํ•œ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋“œ๋ญ…๋‹ˆ๋‹ค. ๊ธฐ์—…๋“ค์€ ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์™€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ณต์œ  Kotlin ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜์กดํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ ํ•˜๋‚˜์— ์ทจ์•ฝ์ ์ด ๋ฐœ์ƒํ•˜๋ฉด ๋น ๋ฅด๊ฒŒ ํ™•์‚ฐ๋˜์–ด ํฌํŠธํด๋ฆฌ์˜ค ์ „์ฒด์˜ ์œ„ํ—˜์„ ์ฆํญ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜์กด์„ฑ ์‚ฌ์šฉ ํŒจํ„ด์„ ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š” ์ •์  ๋ถ„์„์œผ๋กœ๋Š” ์ด๋Ÿฌํ•œ ์ทจ์•ฝ์ ์˜ ํŒŒ๊ธ‰ ํšจ๊ณผ๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ํ‰๊ฐ€ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

JVM ์ƒํƒœ๊ณ„์—์„œ Kotlin ์•„ํ‹ฐํŒฉํŠธ๋Š” Java ์ข…์†์„ฑ, ์ „์ด์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ํ”Œ๋žซํผ ๊ตฌ์„ฑ ์š”์†Œ์™€ ํ•จ๊ป˜ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๋ฒ„์ „ ์ถฉ๋Œ, ์…ฐ์ด๋”ฉ๋œ ์ข…์†์„ฑ ๋ฐ ์ผ๊ด€์„ฑ ์—†๋Š” ์—…๋ฐ์ดํŠธ ์ฃผ๊ธฐ๋Š” ์ƒํ™ฉ์„ ๋”์šฑ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์„ ์–ธ๋œ ์ข…์†์„ฑ์—๋งŒ ์ดˆ์ ์„ ๋งž์ถ”๋Š” ์ •์  ๋ถ„์„ ๋„๊ตฌ๋Š” Kotlin ์ฝ”๋“œ๊ฐ€ ๋Ÿฐํƒ€์ž„์— ์ด๋Ÿฌํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ๊ฐ„๊ณผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ทจ์•ฝํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ „์ด์ ์œผ๋กœ ํฌํ•จ๋˜์ง€๋งŒ ํŠน์ • ์กฐ๊ฑด์—์„œ๋งŒ ํ˜ธ์ถœ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์œ„ํ—˜ ํ”„๋กœํ•„์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์—… ๋ณด์•ˆ ํŒ€์€ ์ทจ์•ฝํ•œ ์ข…์†์„ฑ์ด ์‹ค์ œ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ณณ๊ณผ ๋‹จ์ˆœํžˆ ์กด์žฌํ•˜๋Š” ๊ณณ์„ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ฐ ๋Œ€ํ•œ ๊ฐ€์‹œ์„ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ตฌ๋ถ„์€ ์šฐ์„ ์ˆœ์œ„ ์„ค์ • ๋ฐ ๋ณต๊ตฌ ๊ณ„ํš ์ˆ˜๋ฆฝ์— ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ข…์†์„ฑ ์„ ์–ธ๊ณผ ํ˜ธ์ถœ ๊ทธ๋ž˜ํ”„, ์‚ฌ์šฉ ํŒจํ„ด์„ ์—ฐ๊ด€์‹œํ‚ค๋Š” ์ •์  ๋ถ„์„์€ ๋ชจ๋“  ์ข…์†์„ฑ์„ ๋™์ผํ•˜๊ฒŒ ์ทจ๊ธ‰ํ•˜๋Š” ์Šค์บ๋„ˆ๋ณด๋‹ค ํ›จ์”ฌ ๋” ์‹ค์งˆ์ ์ธ ํ†ต์ฐฐ๋ ฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์—ฐ๊ด€ ๊ด€๊ณ„๊ฐ€ ์—†๋‹ค๋ฉด, ํŒ€์€ ์œ„ํ—˜๋„๊ฐ€ ๋†’์€ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๊ฐ„๊ณผํ•œ ์ฑ„ ์˜ํ–ฅ๋ ฅ์ด ๋‚ฎ์€ ๋ฌธ์ œ ํ•ด๊ฒฐ์— ๋…ธ๋ ฅ์„ ๋‚ญ๋น„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ณ ๋ ค ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์šฐ๋ ค๋ฅผ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์˜์กด์„ฑ ํ˜ผ๋ž€ ๊ณต๊ฒฉKotlin SAST๋Š” ์˜์กด์„ฑ ๊ด€๋ฆฌ ๋ฐฉ์‹์ด ๋ณด์•ˆ ์ƒํƒœ์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๋ถ„์•ผ์ž…๋‹ˆ๋‹ค. ์˜์กด์„ฑ ์‚ฌ์šฉ ๋ถ„์„์„ ํ†ตํ•ฉํ•œ Kotlin SAST๋Š” ๊ธฐ์—…์ด ์ด๋ก ์ ์ธ ๋…ธ์ถœ๊ณผ ์šด์˜์ƒ์˜ ์œ„ํ—˜์„ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋ณด๋‹ค ์ •ํ™•ํ•œ ๋ณด์•ˆ ์กฐ์น˜๋ฅผ ์ทจํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

Kotlin ๊ณต๊ธ‰๋ง์—์„œ ๋น„๊ณต๊ฐœ ์ €์žฅ์†Œ ๋ฐ ์‹ ๋ขฐ ๊ฒฝ๊ณ„

๋งŽ์€ ๊ธฐ์—…์šฉ Kotlin ํ™˜๊ฒฝ์—์„œ๋Š” ๋‚ด๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐฐํฌ ๋ฐ ์ข…์†์„ฑ ๊ด€๋ฆฌ์— ํ”„๋ผ์ด๋น— ์ €์žฅ์†Œ๋ฅผ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ €์žฅ์†Œ๋Š” ์กฐ์ง ๋‚ด ์ฝ”๋“œ์™€ ์ข…์†์„ฑ์˜ ํ๋ฆ„์„ ๊ฒฐ์ •ํ•˜๋Š” ์‹ ๋ขฐ ๊ฒฝ๊ณ„๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ •์  ๋ถ„์„์€ ์˜๋ฏธ ์žˆ๋Š” ๋ณด์•ˆ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด ์ด๋Ÿฌํ•œ ๊ฒฝ๊ณ„๋ฅผ ์กด์ค‘ํ•˜๊ณ  ๋ฉด๋ฐ€ํžˆ ๊ฒ€ํ† ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ ๊ณต๊ฐœ๋œ ์ข…์†์„ฑ๋งŒ ์Šค์บ”ํ•˜๋Š” ๊ฒƒ์œผ๋กœ๋Š” ๋‚ด๋ถ€ ๋ฐฐํฌ ๋ฐฉ์‹์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์œ„ํ—˜์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋น„๊ณต๊ฐœ ์ €์žฅ์†Œ์—๋Š” ๋™์ผํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์—ฌ๋Ÿฌ ๋ฒ„์ „, ์‹คํ—˜์ ์ธ ๋นŒ๋“œ, ๊ทธ๋ฆฌ๊ณ  ๊ฒ€์ฆ ์ˆ˜์ค€์ด ๋‹ค์–‘ํ•œ ์•„ํ‹ฐํŒฉํŠธ๊ฐ€ ํฌํ•จ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. Kotlin ํ”„๋กœ์ ํŠธ๋Š” ๋นŒ๋“œ ๊ตฌ์„ฑ, ํ™˜๊ฒฝ ๋˜๋Š” ํŒ€ ์„ ํ˜ธ๋„์— ๋”ฐ๋ผ ์ด๋Ÿฌํ•œ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐ€๋ณ€์„ฑ์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์€ ์ •์  ๋ถ„์„์€ ๋ฐฐํฌ๋œ ์‹œ์Šคํ…œ์˜ ๋ณด์•ˆ ์ƒํƒœ๋ฅผ ์ž˜๋ชป ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•œ ํ™˜๊ฒฝ์—์„œ ์•ˆ์ „ํ•œ ๋ฒ„์ „์˜ ์ข…์†์„ฑ์ด ๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ๋„ ๋™์ผํ•œ ๋ฒ„์ „์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค๋Š” ๋ณด์žฅ์€ ์—†์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋ณด์•ˆ ๋ถ„์„์€ ์•„ํ‹ฐํŒฉํŠธ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๋ฐ ์ €์žฅ์†Œ ์‚ฌ์šฉ ํŒจํ„ด๊ณผ ํ†ตํ•ฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค Kotlin ํ”„๋กœ์ ํŠธ๊ฐ€ ์–ด๋–ค ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์–ด๋–ค ์กฐ๊ฑด์—์„œ ์‚ฌ์šฉํ•˜๋Š”์ง€ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์€ ์ทจ์•ฝ์  ํ‰๊ฐ€์— ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์€ ๊ฐ์‚ฌ ๊ฐ€๋Šฅ์„ฑ๊ณผ ์ถ”์ ์„ฑ์ด ์˜๋ฌดํ™”๋œ ๊ทœ์ œ ํ™˜๊ฒฝ์—์„œ ๋”์šฑ ์ค‘์š”ํ•ด์ง‘๋‹ˆ๋‹ค. ์ •์  ๋ถ„์„ ๊ฒฐ๊ณผ๋Š” ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ ๊ฒ€์ฆ ๊ฐ€๋Šฅํ•˜๊ณ  ์žฌํ˜„ ๊ฐ€๋Šฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ณผ์ œ๋“ค์€ ๋‹ค์Œ์—์„œ ๋‹ค๋ฃฌ ์ฃผ์ œ๋“ค๊ณผ ์ผ๊ด€์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ์„ฑ ๋ถ„์„๊ณต๊ธ‰๋ง ๊ฐ€์‹œ์„ฑ์ด ๋ณด์•ˆ ๊ฑฐ๋ฒ„๋„Œ์Šค์˜ ๊ธฐ๋ฐ˜์ด ๋˜๋Š” ํ™˜๊ฒฝ์—์„œ, ํ”„๋ผ์ด๋น— ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ๋™์  ํŠน์„ฑ์„ ๊ณ ๋ คํ•œ Kotlin SAST๋Š” ๊ธฐ์—…์ด ๊ท ์ผํ•œ ์ข…์†์„ฑ ๋™์ž‘์„ ๊ฐ€์ •ํ•˜๋Š” ๋Œ€์‹  ์‹ ๋ขฐ ๊ฒฝ๊ณ„๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ถ”๋ก ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์ข…ํ•ฉ์ ์œผ๋กœ ๋ณผ ๋•Œ, ์ฝ”ํ‹€๋ฆฐ ๋ณด์•ˆ ๋ถ„์„์€ ์ €์žฅ์†Œ ๋กœ์ปฌ ์Šค์บ”์„ ๋„˜์–ด ๋ฐ์ดํ„ฐ ํ๋ฆ„, ์˜์กด์„ฑ ์‚ฌ์šฉ, ๊ณต๊ธ‰๋ง ๊ตฌ์กฐ๊นŒ์ง€ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์•ผ๋งŒ ์ •์  ๋ถ„์„์„ ํ†ตํ•ด ๊ธฐ์—… ๊ทœ๋ชจ์˜ JVM ๋ฐ ์•ˆ๋“œ๋กœ์ด๋“œ ํฌํŠธํด๋ฆฌ์˜ค ์ „๋ฐ˜์— ๊ฑธ์ณ ์ •๋ณด์— ๊ธฐ๋ฐ˜ํ•œ ์œ„ํ—˜ ๊ด€๋ฆฌ๋ฅผ ์ง€์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kotlin ๋ชจ๋“ˆ, ์„œ๋น„์Šค ๋ฐ API ์ „๋ฐ˜์— ๊ฑธ์นœ ๋ณ€๊ฒฝ ์•ˆ์ „์„ฑ์„ ์œ„ํ•œ ์˜ํ–ฅ ๋ถ„์„

Kotlin์ด ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ JVM ๋ฐ Android ์‹œ์Šคํ…œ ์ „๋ฐ˜์— ๊ฑธ์ณ ๋„์ž…๋จ์— ๋”ฐ๋ผ ์ฃผ์š” ์œ„ํ—˜์€ ๋กœ์ปฌ ๊ฒฐํ•จ์—์„œ ์˜๋„์น˜ ์•Š์€ ๋ณ€๊ฒฝ ์ „ํŒŒ๋กœ ์˜ฎ๊ฒจ๊ฐ€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Kotlin ์ฝ”๋“œ๋Š” ์ข…์ข… ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์„œ๋น„์Šค ๊ณ„์•ฝ ๋ฐ ์žฅ๊ธฐ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” API์— ์ด๋ฏธ ์˜์กดํ•˜๋Š” ์‹œ์Šคํ…œ์— ๋„์ž…๋ฉ๋‹ˆ๋‹ค. Kotlin ๋ชจ๋“ˆ์˜ ๋‹จ์ผ ์ˆ˜์ •์€ ์—ฌ๋Ÿฌ ํ•˜์œ„ ์‹œ์Šคํ…œ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋•Œ๋กœ๋Š” ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํŒ€์ด ๊ทธ ์˜ํ–ฅ์„ ์ฆ‰์‹œ ํŒŒ์•…ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ํ–ฅ ๋ถ„์„์„ ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š” ์ •์  ๋ถ„์„์€ ๋Œ€๊ทœ๋ชจ ํ™˜๊ฒฝ์—์„œ ์•ˆ์ „ํ•œ ๋ฐœ์ „์„ ์ง€์›ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

์˜ํ–ฅ ๋ถ„์„์€ ์ฝ”๋“œ์˜ ์ •ํ™•์„ฑ๋ณด๋‹ค๋Š” ๋ณ€๊ฒฝ ์•ˆ์ „์„ฑ์„ ์ค‘์‹ฌ์œผ๋กœ ์ •์  ๋ถ„์„์„ ์žฌ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ํ•ต์‹ฌ์€ ์ฝ”ํ‹€๋ฆฐ ์ฝ”๋“œ๊ฐ€ ๊ฐœ๋ณ„์ ์œผ๋กœ ์œ ํšจํ•œ์ง€ ์—ฌ๋ถ€๊ฐ€ ์•„๋‹ˆ๋ผ, ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์‹œ์Šคํ…œ ์ „์ฒด์˜ ์‹คํ–‰ ๊ฒฝ๋กœ, ์ข…์†์„ฑ ๋ฐ ํ†ตํ•ฉ ๋™์ž‘์— ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€์ž…๋‹ˆ๋‹ค. ์ˆ˜์‹ญ, ์ˆ˜๋ฐฑ ๊ฐœ์˜ ์ฝ”ํ‹€๋ฆฐ ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค๋ฅผ ์šด์˜ํ•˜๋Š” ๊ธฐ์—…์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๊ด€์ ์ด ๋ฆด๋ฆฌ์Šค๋ฅผ ์กฐ์ •ํ•˜๊ณ  ์—ฐ์‡„์ ์ธ ์žฅ์• ๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

Kotlin ์‹œ์Šคํ…œ์—์„œ ๋ชจ๋“ˆ ๊ฐ„ ์˜์กด์„ฑ ์ „ํŒŒ

Kotlin ์‹œ์Šคํ…œ์€ ์ข…์ข… ๊ธฐ๋Šฅ์„ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์„œ๋น„์Šค๋กœ ๋ถ„ํ•ดํ•˜๋Š” ๋ชจ๋“ˆํ˜• ์•„ํ‚คํ…์ฒ˜์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ชจ๋“ˆ์„ฑ์€ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด์ง€๋งŒ, ์˜์กด์„ฑ ์ „ํŒŒ์˜ ๋ณต์žก์„ฑ๋„ ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค. Kotlin ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์šด์˜ ํ™˜๊ฒฝ๊ณผ ๊ธฐ๋Œ€์น˜๋ฅผ ๊ฐ€์ง„ ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์—์„œ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์˜ํ–ฅ ๋ถ„์„์€ ์„ ํ˜•์ ์ธ ๊ด€๊ณ„๋ฅผ ๊ฐ€์ •ํ•˜๋Š” ๋Œ€์‹ , ๋ชจ๋“ˆ ๊ทธ๋ž˜ํ”„๋ฅผ ํ†ตํ•ด ์˜์กด์„ฑ์ด ์–ด๋–ป๊ฒŒ ์ „ํŒŒ๋˜๋Š”์ง€ ์ถ”์ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ณ„ ๋ชจ๋“ˆ์— ์ดˆ์ ์„ ๋งž์ถ˜ ์ •์  ๋ถ„์„ ๋„๊ตฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํ•˜์œ„ ๋ชจ๋“ˆ์˜ ์‚ฌ์šฉ ๋งฅ๋ฝ์„ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์ด์™€ ๋Œ€์กฐ์ ์œผ๋กœ, ์˜ํ–ฅ ์ค‘์‹ฌ ๋ถ„์„์€ Kotlin ์‹ฌ๋ณผ์ด ์ฐธ์กฐ๋˜๋Š” ์œ„์น˜์™€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ด๋Ÿฌํ•œ ๊ด€๊ณ„๋ฅผ ์–ด๋–ป๊ฒŒ ๋ณ€ํ™”์‹œํ‚ค๋Š”์ง€ ๋ณด์—ฌ์ฃผ๋Š” ์˜์กด์„ฑ ๊ทธ๋ž˜ํ”„๋ฅผ ์žฌ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์žฌ๊ตฌ์„ฑ์€ Kotlin ๋ชจ๋“ˆ์ด ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค, ๋ด‰์ธ๋œ ๊ณ„์ธต ๊ตฌ์กฐ ๋˜๋Š” ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์žฌ์‚ฌ์šฉ๋˜๋Š” ํ™•์žฅ ํ•จ์ˆ˜๋ฅผ ๋…ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ ํŠนํžˆ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์†Œํ•œ ์‹œ๊ทธ๋‹ˆ์ฒ˜ ๋ณ€๊ฒฝ์ด๋ผ๋„ ์†Œ์Šค ์ฝ”๋“œ ์ˆ˜์ค€์—์„œ๋Š” ์ฆ‰์‹œ ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š๋Š” ๊ด‘๋ฒ”์œ„ํ•œ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ์—์„œ๋Š” ๋นŒ๋“œ ํƒ€์ž„ ๊ตฌ์„ฑ์œผ๋กœ ์ธํ•ด ์˜์กด์„ฑ ์ „ํŒŒ๊ฐ€ ๋”์šฑ ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค. Kotlin ๋ชจ๋“ˆ์€ ๊ณต์œ  ์•„ํ‹ฐํŒฉํŠธ๋กœ ํŒจํ‚ค์ง•๋˜๊ฑฐ๋‚˜, ๋” ํฐ ๋ฐ”์ด๋„ˆ๋ฆฌ์— ํฌํ•จ๋˜๊ฑฐ๋‚˜, ๋ณตํ•ฉ ์„œ๋น„์Šค์˜ ์ผ๋ถ€๋กœ ๋ฐฐํฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์˜ํ–ฅ ๋ถ„์„์—์„œ๋Š” ์†Œ์Šค ์ฝ”๋“œ ์ˆ˜์ค€์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ๊ณผ ์•„ํ‹ฐํŒฉํŠธ ์ˆ˜์ค€์˜ ์‚ฌ์šฉ๋Ÿ‰์„ ์—ฐ๊ด€์‹œ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์—ฐ๊ด€ ๊ด€๊ณ„๊ฐ€ ์—†์œผ๋ฉด ํŒ€์€ ๋ณ€๊ฒฝ ๋ฒ”์œ„๋ฅผ ๊ณผ์†Œํ‰๊ฐ€ํ•˜๊ณ  ์ข…์† ์‹œ์Šคํ…œ์„ ๋ถˆ์•ˆ์ •ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์ˆ˜์ • ์‚ฌํ•ญ์„ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ณผ์ œ๋“ค์€ ๋…ผ์˜๋œ ๋ฌธ์ œ๋“ค๊ณผ ์ผ๋งฅ์ƒํ†ตํ•ฉ๋‹ˆ๋‹ค. ์˜์กด์„ฑ ๋งคํ•‘ ์ „๋žตKotlin ํ™˜๊ฒฝ์—์„œ๋Š” ์ „์ด์  ๊ด€๊ณ„๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์œ„ํ—˜ ๊ด€๋ฆฌ์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค. ํšจ๊ณผ์ ์ธ Kotlin ์˜ํ–ฅ ๋ถ„์„์€ ์ง์ ‘์ ์ธ ์ข…์†์„ฑ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ชจ๋“ˆ๊ณผ ์•„ํ‹ฐํŒฉํŠธ ์ „๋ฐ˜์— ๊ฑธ์นœ ์ „์ฒด ์ „ํŒŒ ์ฒด์ธ์„ ํŒŒ์•…ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฐ€์‹œ์„ฑ์„ ํ†ตํ•ด ๊ธฐ์—…์€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋”์šฑ ์‹ ์ค‘ํ•˜๊ฒŒ ๊ณ„ํšํ•˜๊ณ , ๋ฐฐํฌ ์ˆœ์„œ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์กฐ์ •ํ•˜๋ฉฐ, ํ…Œ์ŠคํŠธ ๋…ธ๋ ฅ์ด ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ณณ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Kotlin ์„œ๋น„์Šค์˜ API ์ง„ํ™” ๋ฐ ๊ณ„์•ฝ ์•ˆ์ •์„ฑ

Kotlin์€ ํŠนํžˆ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์—์„œ ์„œ๋น„์Šค API์™€ ๊ณต์œ  ๊ณ„์•ฝ์„ ์ •์˜ํ•˜๋Š” ๋ฐ ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค, ๋ด‰์ธ๋œ ์ธํ„ฐํŽ˜์ด์Šค, ํ‘œํ˜„๋ ฅ์ด ํ’๋ถ€ํ•œ ํƒ€์ž… ์‹œ์Šคํ…œ ๋•๋ถ„์— Kotlin์€ ๋„๋ฉ”์ธ ๊ฒฝ๊ณ„๋ฅผ ๋ชจ๋ธ๋งํ•˜๋Š” ๋ฐ ๋งค๋ ฅ์ ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋“ค์€ API๊ฐ€ ์ง„ํ™”ํ•จ์— ๋”ฐ๋ผ ๋ฏธ๋ฌ˜ํ•œ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์˜ํ–ฅ ๋ถ„์„์—์„œ๋Š” Kotlin API ๋ณ€๊ฒฝ์ด ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์‚ฌ์šฉ์ž์—๊ฒŒ ์–ด๋–ค ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€ ํ‰๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ”ํžˆ ๋ฐœ์ƒํ•˜๋Š” ์œ„ํ—˜ ์ค‘ ํ•˜๋‚˜๋Š” ์†Œ์Šค ์ฝ”๋“œ ์ˆ˜์ค€์—์„œ๋Š” ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์ด ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์ง๋ ฌํ™” ๋™์ž‘์ด๋‚˜ ๋Ÿฐํƒ€์ž„ ๊ธฐ๋Œ€์น˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ˆ˜์ • ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Kotlin ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด JSON ํ‘œํ˜„ ๋ฐฉ์‹, ๊ธฐ๋ณธ๊ฐ’ ๋˜๋Š” null ํ—ˆ์šฉ ์—ฌ๋ถ€ ์˜๋ฏธ๊ฐ€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์˜ํ–ฅ์„ ๊ณ ๋ คํ•˜์ง€ ์•Š๋Š” ์ •์  ๋ถ„์„์€ ๋Ÿฐํƒ€์ž„์— ์†Œ๋น„์ž๋ฅผ ์˜ค์ž‘๋™์‹œํ‚ค๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์Šน์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด ์˜ํ–ฅ ๋ถ„์„์€ ์„œ๋น„์Šค ์ „๋ฐ˜์— ๊ฑธ์ณ API ๊ณ„์•ฝ์ด ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”์ง€ ์ถ”์ ํ•˜๊ณ  ํ˜ธํ™˜์„ฑ ๊ฐ€์ •์ด ์œ„๋ฐ˜๋  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค.

๋Œ€๊ทœ๋ชจ ๊ธฐ์—… ํ™˜๊ฒฝ์—์„œ๋Š” API ์‚ฌ์šฉ์ž๋ฅผ ๋‹จ์ผ ํŒ€์—์„œ ํŒŒ์•…ํ•˜๊ฑฐ๋‚˜ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋“œ๋ญ…๋‹ˆ๋‹ค. Kotlin ์„œ๋น„์Šค๋Š” ์™ธ๋ถ€ ํŒŒํŠธ๋„ˆ, ๋ชจ๋ฐ”์ผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ๋˜๋Š” ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์ผ์ •์œผ๋กœ ๋ฐœ์ „ํ•˜๋Š” ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ ๋“ฑ์—์„œ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์˜ํ–ฅ ๋ถ„์„ ์‹œ์—๋Š” API ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋กœ์ปฌ ๋ฆฌํŒฉํ† ๋ง์ด ์•„๋‹Œ ์‹œ์Šคํ…œ ์ด๋ฒคํŠธ๋กœ ๊ฐ„์ฃผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ํ•„๋“œ๋‚˜ ๋™์ž‘์— ์˜์กดํ•˜๋Š” ์‚ฌ์šฉ์ž๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์€ ๋ฒ„์ „ ๊ด€๋ฆฌ, ์„œ๋น„์Šค ์ค‘๋‹จ, ๊ทธ๋ฆฌ๊ณ  ๋ฐฐํฌ ์ „๋žต ์ˆ˜๋ฆฝ์— ์ค‘์š”ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์šฐ๋ ค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฃผ์ œ์™€ ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ด€๋ จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. API ๋ณ€๊ฒฝ ๊ด€๋ฆฌ์•ˆ์ •์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ฒด๊ณ„์ ์ธ ๊ฑฐ๋ฒ„๋„Œ์Šค๊ฐ€ ํ•„์š”ํ•œ ์ƒํ™ฉ์—์„œ, API ์‚ฌ์šฉ ๋ฐ ์ง„ํ™”๋ฅผ ๋ชจ๋ธ๋งํ•˜๋Š” Kotlin ์˜ํ–ฅ ๋ถ„์„์€ ์ฑ…์ž„๊ฐ ์žˆ๋Š” ๋ณ€ํ™” ๊ด€๋ฆฌ์— ํ•„์š”ํ•œ ๊ทผ๊ฑฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฃผ๊ด€์ ์ธ ์œ„ํ—˜ ํ‰๊ฐ€์—์„œ ๊ตฌ์ฒด์ ์ธ ์˜์กด์„ฑ ์‚ฌ์‹ค์— ๊ธฐ๋ฐ˜ํ•œ ๋…ผ์˜๋กœ ์ „ํ™˜ํ•˜์—ฌ ๊ธฐ์—…์ด ํ˜์‹ ๊ณผ ์•ˆ์ •์„ฑ ์‚ฌ์ด์˜ ๊ท ํ˜•์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค ๋ฐ ๋ฐฐํฌ ๊ฒฝ๊ณ„ ์ „๋ฐ˜์— ๊ฑธ์ณ ๋ณด์•ˆ์„ ๋ณ€๊ฒฝํ•˜์„ธ์š”.

Kotlin ์˜ํ–ฅ ๋ถ„์„์€ ์„œ๋น„์Šค ๊ฒฝ๊ณ„ ๋ฐ ๋ฐฐํฌ ํ™˜๊ฒฝ ์ „๋ฐ˜์— ๊ฑธ์ณ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์–ด๋–ป๊ฒŒ ์ „ํŒŒ๋˜๋Š”์ง€๋„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์—์„œ Kotlin ์„œ๋น„์Šค๋Š” ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ, ๋ฉ”์‹œ์ง€ ํ ๋ฐ ๊ณต์œ  ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋ฅผ ํ†ตํ•ด ์ƒํ˜ธ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•œ ์„œ๋น„์Šค์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋‹ค๋ฅธ ์„œ๋น„์Šค์˜ ๊ฐ€์ •์„ ๋ณ€๊ฒฝํ•˜์—ฌ ๋‹จ์ผ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ๊ตญํ•œ๋œ ์ •์  ๋ถ„์„์œผ๋กœ๋Š” ์˜ˆ์ธกํ•  ์ˆ˜ ์—†๋Š” ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋งฅ๋ฝ์—์„œ ์˜ํ–ฅ ๋ถ„์„์€ ์„œ๋น„์Šค ๊ฐ„์˜ ํ˜ธ์ถœ ์ฒด์ธ๊ณผ ์ƒํ˜ธ ์ž‘์šฉ ํŒจํ„ด์„ ์žฌ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • Kotlin ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์„œ๋น„์Šค์™€ ๊ทธ ์กฐ๊ฑด์„ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์ด์ฃ . ์ด ์ •๋ณด๋Š” ๋ฐฐํฌ ๊ณ„ํš, ํŠนํžˆ ๋‹จ๊ณ„์  ๋ฐฐํฌ๋‚˜ ๋ธ”๋ฃจ/๊ทธ๋ฆฐ ์ „๋žต์„ ์‚ฌ์šฉํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ณ€๊ฒฝ ์‚ฌํ•ญ์˜ ์˜ํ–ฅ์„ ๋ฐ›๋Š” ์„œ๋น„์Šค๋ฅผ ํŒŒ์•…ํ•˜๋ฉด ๋ฐฐํฌ ์ˆœ์„œ ๊ฒฐ์ •๊ณผ ๋กค๋ฐฑ ๊ณ„ํš ์ˆ˜๋ฆฝ์— ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๋ฐฐํฌ ๊ฒฝ๊ณ„๋Š” ๋ณ€๊ฒฝ ์•ˆ์ „์„ฑ์„ ๋”์šฑ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. Kotlin ์ฝ”๋“œ๋Š” ๊ตฌ์„ฑ ํ”Œ๋ž˜๊ทธ, ๊ธฐ๋Šฅ ํ† ๊ธ€ ๋˜๋Š” ํ™˜๊ฒฝ๋ณ„ ์ข…์†์„ฑ์— ๋”ฐ๋ผ ๋™์ž‘์ด ๋‹ฌ๋ผ์ง€๋ฉด์„œ ํ™˜๊ฒฝ๋ณ„๋กœ ๋‹ค๋ฅด๊ฒŒ ๋ฐฐํฌ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์˜ํ–ฅ ๋ถ„์„์€ ์ •ํ™•์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐํฌ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ํ†ตํ•ฉ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•œ ํ™˜๊ฒฝ์—์„œ ์•ˆ์ „ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๊ตฌ์„ฑ์ด๋‚˜ ์ข…์†์„ฑ ๋ฒ„์ „์˜ ์ฐจ์ด๋กœ ์ธํ•ด ๋‹ค๋ฅธ ํ™˜๊ฒฝ์—์„œ๋Š” ์œ„ํ—˜์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ณผ์ œ๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋…ผ์˜๋“ค๊ณผ ๋งฅ๋ฝ์„ ๊ฐ™์ดํ•ฉ๋‹ˆ๋‹ค. ์—ฐ์‡„ ์‹คํŒจ ๋ฐฉ์ง€๊ฒฝ๊ณ„๋ฅผ ๋„˜๋‚˜๋“œ๋Š” ๊ฐ€์‹œ์„ฑ์ด ๋ณต์›๋ ฅ์— ํ•„์ˆ˜์ ์ธ ํ™˜๊ฒฝ์—์„œ, Kotlin์˜ ์„œ๋น„์Šค ๋ฐ ๋ฐฐํฌ ์ „๋ฐ˜์— ๊ฑธ์นœ ์˜ํ–ฅ ๋ถ„์„์€ ๊ธฐ์—…์ด ์žฅ์•  ๋ฐœ์ƒ ์ด์ „์— ์žฅ์•  ๋ชจ๋“œ๋ฅผ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ •์  ๋ถ„์„์„ ๋ณต์žกํ•œ ์‹œ์Šคํ…œ ์ „๋ฐ˜์— ๊ฑธ์ณ ์ œ์–ด๋œ ์ง„ํ™”๋ฅผ ์ง€์›ํ•˜๋Š” ๋Šฅ๋™์ ์ธ ์•ˆ์ „ ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

Kotlin ์˜ํ–ฅ ๋ถ„์„์€ ์˜์กด์„ฑ ์ „ํŒŒ, API ์•ˆ์ •์„ฑ ๋ฐ ์„œ๋น„์Šค ๊ฐ„ ์ƒํ˜ธ ์ž‘์šฉ์— ์ค‘์ ์„ ๋‘์–ด ๊ธฐ์—… ๋ณ€๊ฒฝ ์•ˆ์ „์„ฑ์˜ ํ•ต์‹ฌ ๊ณผ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด JVM ๋ฐ Android ํ™˜๊ฒฝ ์ „๋ฐ˜์— ๊ฑธ์ณ Kotlin์˜ ํ™œ์šฉ๋„๊ฐ€ ์ฆ๊ฐ€ํ•˜๋”๋ผ๋„ ์‹œ์Šคํ…œ์„ ์ž์‹  ์žˆ๊ฒŒ ๋ฐœ์ „์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ํ•„์š”ํ•œ ๋งฅ๋ฝ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Kotlin ์ •์  ๋ถ„์„์˜ ์‚ฌ๊ฐ์ง€๋Œ€: ๋ฆฌํ”Œ๋ ‰์…˜, ์ƒ์„ฑ๋œ ์ฝ”๋“œ ๋ฐ ํ”„๋ ˆ์ž„์›Œํฌ ์‹คํ–‰

๊ฐ€์žฅ ๋ฐœ์ „๋œ Kotlin ์ •์  ๋ถ„์„ ๋„๊ตฌ์กฐ์ฐจ๋„ ์–ธ์–ด ๊ธฐ๋Šฅ, ๋นŒ๋“œ ์‹œ๊ฐ„ ๋ณ€ํ™˜ ๋ฐ ํ”„๋ ˆ์ž„์›Œํฌ ๊ธฐ๋ฐ˜ ์‹คํ–‰์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•˜๋Š” ๊ตฌ์กฐ์  ์ œ์•ฝ ์กฐ๊ฑด ํ•˜์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ JVM ๋ฐ Android ํ™˜๊ฒฝ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์ œ์•ฝ ์กฐ๊ฑด์œผ๋กœ ์ธํ•ด ๋ถ„์„ ๊ฒฐ๊ณผ์˜ ์ •ํ™•๋„๊ฐ€ ๋–จ์–ด์ง€๊ฑฐ๋‚˜ ๋Ÿฐํƒ€์ž„ ํ˜„์‹ค์„ ์ œ๋Œ€๋กœ ๋ฐ˜์˜ํ•˜์ง€ ๋ชปํ•˜๋Š” ์‚ฌ๊ฐ์ง€๋Œ€๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์‚ฌ๊ฐ์ง€๋Œ€๋ฅผ ์ธ์‹ํ•˜๋Š” ๊ฒƒ์€ ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ•ด์„ํ•˜๊ณ  ์ฝ”๋“œ ํ’ˆ์งˆ์ด๋‚˜ ์•ˆ์ „์„ฑ์— ๋Œ€ํ•œ ์ž˜๋ชป๋œ ํ™•์‹ ์„ ํ”ผํ•˜๋Š” ๋ฐ ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

์ •์  ๋ถ„์„์˜ ์‚ฌ๊ฐ์ง€๋Œ€๋Š” ์ •์  ๋ถ„์„์˜ ์‹คํŒจ๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ด๋Š” ์†Œ์Šค ์ฝ”๋“œ์™€ ๋นŒ๋“œ ์•„ํ‹ฐํŒฉํŠธ๋งŒ์œผ๋กœ๋Š” ์ถ”๋ก ํ•  ์ˆ˜ ์—†๋Š”, ์‹คํ–‰ ๋™์ž‘์ด ๋™์ ์œผ๋กœ ๋˜๋Š” ๊ฐ„์ ‘์ ์œผ๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ์˜์—ญ์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌํ”Œ๋ ‰์…˜, ์ฝ”๋“œ ์ƒ์„ฑ, ๊ทธ๋ฆฌ๊ณ  IDC(Inversion of Control) ํ”„๋ ˆ์ž„์›Œํฌ์— ํฌ๊ฒŒ ์˜์กดํ•˜๋Š” Kotlin ์‹œ์Šคํ…œ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์‚ฌ๊ฐ์ง€๋Œ€๊ฐ€ ๋”์šฑ ์ปค์ง‘๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ•œ๊ณ„๋ฅผ ์ธ์ง€ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ์—…์€ ์ •์  ๋ถ„์„๊ณผ ๋ณด์™„์ ์ธ ๊ฐ€์‹œ์„ฑ ํ™•๋ณด ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํšจ๊ณผ์ ์œผ๋กœ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฆฌํ”Œ๋ ‰์…˜๊ณผ ๋™์  ๋””์ŠคํŒจ์น˜๋กœ ์ธํ•ด Kotlin ์‹คํ–‰ ๊ฒฝ๋กœ๊ฐ€ ๋ชจํ˜ธํ•ด์ง

๋ฆฌํ”Œ๋ ‰์…˜์€ ์ฝ”ํ‹€๋ฆฐ๊ณผ JVM ์ƒํƒœ๊ณ„, ํŠนํžˆ ์„ค์ •๋ณด๋‹ค๋Š” ๊ด€๋ก€๋ฅผ ์ค‘์‹œํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์˜์กด์„ฑ ์ฃผ์ž… ์ปจํ…Œ์ด๋„ˆ, ์ง๋ ฌํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ํด๋ž˜์Šค, ๋ฉ”์„œ๋“œ, ํ•„๋“œ์— ๋Œ€ํ•œ ๋ฆฌํ”Œ๋ ‰์…˜ ์ ‘๊ทผ์„ ์ž์ฃผ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ •์  ๋ถ„์„ ๊ด€์ ์—์„œ ๋ณผ ๋•Œ, ๋ฆฌํ”Œ๋ ‰์…˜์€ ์‹คํ–‰ ๋Œ€์ƒ์ด ๋ช…์‹œ์ ์ธ ํ˜ธ์ถœ ์ง€์ ์ด ์•„๋‹Œ ๋Ÿฐํƒ€์ž„์— ๊ฒฐ์ •๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆํ™•์‹ค์„ฑ์„ ์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค.

Kotlin์˜ ์–ธ์–ด์  ํŠน์ง•์€ ์ด๋Ÿฌํ•œ ๋ถˆํ™•์‹ค์„ฑ์„ ์ฆํญ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™•์žฅ ํ•จ์ˆ˜, ์œ„์ž„ ์†์„ฑ, ๊ณ ์ฐจ ํ•จ์ˆ˜๋Š” ๋ฆฌํ”Œ๋ ‰์…˜์„ ํ†ตํ•ด ํ˜ธ์ถœ๋˜๊ฑฐ๋‚˜ ํ”„๋ ˆ์ž„์›Œํฌ ๊ตฌ์„ฑ ์š”์†Œ์— ๋™์ ์œผ๋กœ ๋“ฑ๋ก๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •์  ๋ถ„์„ ๋„๊ตฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ๋™์ž‘์„ ๊ทผ์‚ฌ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ฑฐ๋‚˜ ์™„์ „ํžˆ ๋ฌด์‹œํ•˜์—ฌ ๋ถˆ์™„์ „ํ•œ ํ˜ธ์ถœ ๊ทธ๋ž˜ํ”„๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์˜ํ–ฅ ๋ถ„์„ ๋ฐ ์˜์กด์„ฑ ์ถ”์ ์€ Kotlin ์‹œ์Šคํ…œ์˜ ์‹ค์ œ ์‹คํ–‰ ํ‘œ๋ฉด์„ ์ œ๋Œ€๋กœ ๋‚˜ํƒ€๋‚ด์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ์—… ํ™˜๊ฒฝ์—์„œ ์ด๋Ÿฌํ•œ ๋ถˆ์™„์ „ํ•œ ํ‘œํ˜„์€ ์œ„ํ—˜ ํ‰๊ฐ€๋ฅผ ์™œ๊ณกํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Kotlin ์„œ๋น„์Šค๋Š” ์ •์  ํ˜ธ์ถœ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•  ๋•Œ ๋А์Šจํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ๊ตฌ์„ฑ์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๋ฆฌํ”Œ๋ ‰ํ‹ฐ๋ธŒ ํ˜ธ์ถœ ๊ฒฝ๋กœ์— ์ฐธ์—ฌํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋ถ„์„์—์„œ ์ œ์‹œํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๊ด‘๋ฒ”์œ„ํ•œ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ถˆ์ผ์น˜๋Š” ํŠนํžˆ ์ •์  ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํŒฉํ† ๋ง ๋˜๋Š” ๋ฐฐํฌ ๊ฒฐ์ •์˜ ๊ทผ๊ฑฐ๋กœ ์‚ฌ์šฉํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์ด ๊ณผ์ œ๋Š” ์ด์ „์— ํƒ๊ตฌํ–ˆ๋˜ ๋ฌธ์ œ๋“ค์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๋™์  ๋ฐฐ์†ก ๋ถ„์„๋Ÿฐํƒ€์ž„ ํ•ด์„์ด ์ •์  ์ถ”๋ก ์„ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ, ๋ฆฌํ”Œ๋ ‰์…˜์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์€ Kotlin ๋ถ„์„ ๊ฒฐ๊ณผ๋Š” ์‹ ์ค‘ํ•˜๊ฒŒ ํ•ด์„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์—…๋“ค์€ ์ข…์ข… ์ •์  ๋ถ„์„ ๊ฒฐ๊ณผ์™€ ๋Ÿฐํƒ€์ž„ ๊ด€์ฐฐ ๊ฒฐ๊ณผ๋ฅผ ์—ฐ๊ด€์‹œํ‚ค๊ฑฐ๋‚˜, ํ•ต์‹ฌ ๊ฒฝ๋กœ์—์„œ ๋ฆฌํ”Œ๋ ‰์…˜ ์‚ฌ์šฉ์„ ์ œํ•œํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜์  ์ œ์•ฝ์„ ์ ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ์‚ฌ๊ฐ์ง€๋Œ€๋ฅผ ์™„ํ™”ํ•ฉ๋‹ˆ๋‹ค.

์„ฑ์ฐฐ์ด ์–ด๋””์—, ๊ทธ๋ฆฌ๊ณ  ์–ผ๋งˆ๋‚˜ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”์ง€ ์ดํ•ดํ•˜๋ฉด ํŒ€์€ ์ •์  ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ๋งฅ๋ฝํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ •์ ์ธ ๊ฒƒ์œผ๋กœ ๋ฐ›์•„๋“ค์ด๊ธฐ๋ณด๋‹ค๋Š” ์ˆจ๊ฒจ์ง„ ์‹คํ–‰ ๊ฒฝ๋กœ์˜ ๊ฐ€๋Šฅ์„ฑ์— ๋”ฐ๋ผ ๊ฐ€์ค‘์น˜๋ฅผ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฏธ๋ฌ˜ํ•œ ํ•ด์„์€ ๋ถ„์„ ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ์‹ ๋ขฐ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ๋‚ด์žฌ๋œ ํ•œ๊ณ„๋ฅผ ์ธ์ •ํ•˜๋Š” ๋ฐ ๋งค์šฐ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์ƒ์„ฑ๋œ ์ฝ”๋“œ ๋ฐ ์ฃผ์„ ์ฒ˜๋ฆฌ๊ฐ€ ๋ถ„์„ ์ •ํ™•๋„์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ

์ฝ”๋“œ ์ƒ์„ฑ์€ ์ฝ”ํ‹€๋ฆฐ ํ”„๋กœ์ ํŠธ์—์„œ ํ”ํžˆ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ, ์–ด๋…ธํ…Œ์ด์…˜ ํ”„๋กœ์„ธ์„œ, ๋นŒ๋“œ ํƒ€์ž„ ํ”Œ๋Ÿฌ๊ทธ์ธ, ํ”„๋ ˆ์ž„์›Œํฌ ํˆด๋ง ๋“ฑ์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ ์ฝ”๋“œ์—๋Š” ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต, ์ง๋ ฌํ™” ๋กœ์ง, ์˜์กด์„ฑ ์ฃผ์ž… ์—ฐ๊ฒฐ, ์„ค์ • ์Šค์บํด๋”ฉ ๋“ฑ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ฝ”๋“œ๋Š” ์‹คํ–‰ ๊ณผ์ •์— ์™„์ „ํžˆ ์ฐธ์—ฌํ•˜์ง€๋งŒ, ์ •์  ๋ถ„์„ ๋„๊ตฌ์—์„œ๋Š” ์ข…์ข… ๋ณด์ด์ง€ ์•Š๊ฑฐ๋‚˜ ๋ถ€๋ถ„์ ์œผ๋กœ๋งŒ ๋ชจ๋ธ๋ง๋ฉ๋‹ˆ๋‹ค.

Kotlin ๋ถ„์„ ๋„๊ตฌ๋Š” ์ƒ์„ฑ๋œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด ๋‹ค์–‘ํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ๋„๊ตฌ๋Š” ๋…ธ์ด์ฆˆ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ์ƒ์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ์™„์ „ํžˆ ์ œ์™ธํ•˜๋Š” ๋ฐ˜๋ฉด, ๋‹ค๋ฅธ ๋„๊ตฌ๋Š” ์ถœ์ฒ˜๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋‘ ์ ‘๊ทผ ๋ฐฉ์‹ ๋ชจ๋‘ ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ์™ธ ๋ฐฉ์‹์€ ๋ณต์žก์„ฑ์„ ๊ณผ์†Œํ‰๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ข…์†์„ฑ์„ ๋†“์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ถœ์ฒ˜๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ํฌํ•จํ•˜๋ฉด ๋ฌธ์ œ ๋ฐœ์ƒ ๊ฑด์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ณ , ์ž‘์„ฑ๋œ ๋กœ์ง๊ณผ ์ƒ์„ฑ๋œ ์Šค์บํด๋”ฉ์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง‘๋‹ˆ๋‹ค.

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์‹œ์Šคํ…œ์—์„œ ์ƒ์„ฑ๋œ ์ฝ”๋“œ๋Š” ๋ฐฐํฌ๋œ ์•„ํ‹ฐํŒฉํŠธ์˜ ์ƒ๋‹น ๋ถ€๋ถ„์„ ์ฐจ์ง€ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋™์ž‘์˜ ํ•ต์‹ฌ์ธ ๊ฐ์ฒด ์ƒ๋ช…์ฃผ๊ธฐ ๋˜๋Š” ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜์„ ์กฐ์œจํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์š”์†Œ๋ฅผ ๊ฐ„๊ณผํ•˜๋Š” ์ •์  ๋ถ„์„์€ ์‹คํ–‰ ๊ฒฝ๋กœ ๋ฐ ์ข…์†์„ฑ ๊ด€๊ณ„๋ฅผ ์ž˜๋ชป ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํŠนํžˆ ์ƒ์„ฑ๋œ ์ฝ”๋“œ๊ฐ€ Kotlin ๊ตฌ์„ฑ ์š”์†Œ ๊ฐ„์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ๋งค๊ฐœํ•˜๋Š” ๊ฒฝ์šฐ ๋”์šฑ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ณผ์ œ๋“ค์€ ์•ž์„œ ๋…ผ์˜๋œ ์šฐ๋ ค ์‚ฌํ•ญ๋“ค๊ณผ ์ผ๋งฅ์ƒํ†ตํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ ์ฝ”๋“œ ์ฒ˜๋ฆฌ์ฝ”ํ‹€๋ฆฐ ๊ฐœ๋ฐœํŒ€์€ ์ƒ์„ฑ๋œ ์•„ํ‹ฐํŒฉํŠธ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€์— ๋”ฐ๋ผ ๋ถ„์„์˜ ์ •ํ™•๋„๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค๋Š” ์ ์„ ์ธ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์„ ํƒํ•œ ๋„๊ตฌ๊ฐ€ ์ƒ์„ฑ๋œ ์†Œ์Šค๋ฅผ ์–ด๋–ป๊ฒŒ ํ†ตํ•ฉํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๊ณ  ๊ทธ์— ๋งž์ถฐ ํ•ด์„์„ ์กฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์†Œ์Šค ์ฝ”๋“œ๋งŒ์„ ์ด์šฉํ•œ ๋ถ„์„์€ ์‹œ์Šคํ…œ ๋™์ž‘์— ๋Œ€ํ•œ ๋ถ€์ •ํ™•ํ•œ ๊ฒฐ๋ก ์œผ๋กœ โ€‹โ€‹์ด์–ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์‚ฌ๊ฐ์ง€๋Œ€๋ฅผ ํ•ด์†Œํ•˜๋ ค๋ฉด ๋ช…์‹œ์ ์ธ ๊ตฌ์„ฑ๊ณผ ๋ฌธ์„œํ™”๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๊ธฐ์—…์€ ์ƒ์„ฑ๋œ ์ฝ”๋“œ์— ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•˜๊ฑฐ๋‚˜, ์ „์šฉ ๋ชจ๋“ˆ๋กœ ๋ถ„๋ฆฌํ•˜๊ฑฐ๋‚˜, ์ •์  ๋ถ„์„์— ์•„ํ‹ฐํŒฉํŠธ ์ˆ˜์ค€ ๊ฒ€์‚ฌ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ๋ณ„๋„์˜ ๋ฒ”์ฃผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ํ‘œ์‹œํ•จ์œผ๋กœ์จ ํŒ€์€ ์ง์ ‘ ์ž‘์„ฑํ•œ Kotlin ๋กœ์ง๊ณผ ํ˜ผ๋™ํ•˜์ง€ ์•Š๊ณ  ๊ทธ ์˜ํ–ฅ์„ ๋” ์ž˜ ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋ ˆ์ž„์›Œํฌ ๊ธฐ๋ฐ˜ ์‹คํ–‰ ๋ฐ ์ œ์–ด๊ถŒ ์—ญ์ „์˜ ํ•œ๊ณ„

์ตœ์‹  ์ฝ”ํ‹€๋ฆฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์‹คํ–‰ ํ๋ฆ„ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์ œ์–ด์˜ ์—ญ์ „(Inversion of Control, ICC) ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ฝ”ํ‹€๋ฆฐ ์ปดํฌ๋„ŒํŠธ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋Š” ๋Œ€์‹ , ํ”„๋ ˆ์ž„์›Œํฌ์— ๋“ฑ๋ก๋˜์–ด ์ปดํฌ๋„ŒํŠธ์˜ ์ƒ๋ช…์ฃผ๊ธฐ์™€ ์ƒํ˜ธ ์ž‘์šฉ์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ชจ๋ธ์€ ๋ชจ๋“ˆ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค์ง€๋งŒ, ๋™์ž‘์„ ์ถ”๋ก ํ•˜๊ธฐ ์œ„ํ•ด ๋ช…์‹œ์ ์ธ ์ œ์–ด ํ๋ฆ„์— ์˜์กดํ•˜๋Š” ์ •์  ๋ถ„์„์„ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

ํ”„๋ ˆ์ž„์›Œํฌ ๊ธฐ๋ฐ˜ ์‹คํ–‰ ๋ฐฉ์‹์€ ์ง„์ž…์ ๊ณผ ํ˜ธ์ถœ ์ˆœ์„œ๋ฅผ ๋ชจํ˜ธํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. Kotlin ํ•จ์ˆ˜๋Š” ์ง์ ‘ ํ˜ธ์ถœ๋ณด๋‹ค๋Š” ์„ค์ •, ์–ด๋…ธํ…Œ์ด์…˜ ๋˜๋Š” ๋Ÿฐํƒ€์ž„ ์ด๋ฒคํŠธ์— ๋”ฐ๋ผ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •์  ๋ถ„์„ ๋„๊ตฌ๋Š” ์ด๋Ÿฌํ•œ ํ•จ์ˆ˜๋“ค์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋™์ž‘์—์„œ ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์„ ํ•จ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ์˜ํ–ฅ๋ ฅ์ด ๋‚ฎ์€ ๊ฒƒ์œผ๋กœ ์ž˜๋ชป ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์˜ค๋ถ„๋ฅ˜๋Š” ์˜ํ–ฅ ๋ถ„์„์„ ์™œ๊ณกํ•˜๊ณ  ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ๋ฆฌํŒฉํ† ๋ง ๊ฒฐ์ •์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ์—์„œ ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์›น ์ปจํŠธ๋กค๋Ÿฌ๋ถ€ํ„ฐ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์„œ ๋ฐ ๋ฉ”์‹œ์ง€ ์†Œ๋น„์ž๊นŒ์ง€ ์—ฌ๋Ÿฌ ๊ณ„์ธต์— ๊ฑธ์ณ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ณ„์ธต์— ์ฐธ์—ฌํ•˜๋Š” Kotlin ์ฝ”๋“œ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ์ฝœ๋ฐฑ์„ ํ†ตํ•ด ํ˜ธ์ถœ๋  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Š” ์ •์ ์œผ๋กœ ์ถ”์ ํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์€ ๋ถ„์„ ๊ฒฐ๊ณผ๋Š” ๊ฒฐํ•ฉ๋„๋ฅผ ๊ณผ์†Œํ‰๊ฐ€ํ•˜๊ณ  ๋ชจ๋“ˆ์„ฑ์„ ๊ณผ๋Œ€ํ‰๊ฐ€ํ•˜๋Š” ์œ„ํ—˜์„ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ œํ•œ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฃผ์ œ๋“ค์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋ ˆ์ž„์›Œํฌ ์‹คํ–‰ ๊ฐ€์‹œ์„ฑ๋Ÿฐํƒ€์ž„ ์ธ์‚ฌ์ดํŠธ๊ฐ€ ์ •์  ์ถ”๋ก ์„ ๋ณด์™„ํ•˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. Kotlin ์‹œ์Šคํ…œ์— ๋Œ€ํ•ด ์ •์  ๋ถ„์„์—๋งŒ ์˜์กดํ•˜๋Š” ๊ธฐ์—…์€ ํ”„๋ ˆ์ž„์›Œํฌ ๊ตฌ์„ฑ ๋ฐ ๋Ÿฐํƒ€์ž„ ์ƒํƒœ์— ๋”ฐ๋ผ ๊ฒฐ์ •๋˜๋Š” ์ค‘์š”ํ•œ ์ƒํ˜ธ ์ž‘์šฉ์„ ๋†“์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์‚ฌ๊ฐ์ง€๋Œ€๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ์•„ํ‚คํ…์ฒ˜์  ๊ทœ์œจ๊ณผ ๋ถ„์„์  ์ธ์‹์„ ๊ฒฐํ•ฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŒ€์€ ํ”„๋ ˆ์ž„์›Œํฌ ์‚ฌ์šฉ ํŒจํ„ด์„ ์ œํ•œํ•˜๊ฑฐ๋‚˜, ๋ผ์ดํ”„์‚ฌ์ดํด ํ›„ํฌ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋ฌธ์„œํ™”ํ•˜๊ฑฐ๋‚˜, ๋Ÿฐํƒ€์ž„ ์›๊ฒฉ ์ธก์ • ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ฉํ•˜์—ฌ ์ •์  ๊ฐ€์ •์„ ๊ฒ€์ฆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •์  ๋ถ„์„์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์œ ์šฉํ•˜์ง€๋งŒ, ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์‹คํ–‰ ๋ฐฉ์‹์„ ์–ด๋–ป๊ฒŒ ๋ณ€ํ™”์‹œํ‚ค๋Š”์ง€์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๊ฒฐ๋ก ์„ ๋„์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์‚ฌ๊ฐ์ง€๋Œ€๋ฅผ ์ธ์‹ํ•จ์œผ๋กœ์จ ๊ธฐ์—…์€ ์ฝ”ํ‹€๋ฆฐ ๋ถ„์„์„ ๋งน๋ชฉ์ ์ธ ๊ถŒ์œ„๊ฐ€ ์•„๋‹Œ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ง€์นจ์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€์—ญ์  ์ •ํ™•์„ฑ์—์„œ ๊ธฐ์—… ๋ณ€ํ™” ์ž์‹ ๊ฐ๊นŒ์ง€

Kotlin ์ •์  ๋ถ„์„์€ ์‹œ์Šคํ…œ ๋™์ž‘์— ๋งž์ถฐ ๋ฐœ์ „ํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ ๊ฐ„์ฃผํ•˜๊ธฐ๋ณด๋‹ค๋Š” ๋‹จ์ˆœํžˆ ๋„๊ตฌ ๋ชฉ๋ก์œผ๋กœ๋งŒ ์ทจ๊ธ‰ํ•  ๋•Œ ์‹ค์งˆ์ ์ธ ํ•œ๊ณ„์— ๋„๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ JVM ๋ฐ Android ํ™˜๊ฒฝ์—์„œ Kotlin ์ฝ”๋“œ๋Š” ๊ฑฐ์˜ ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ ˆ๊ฑฐ์‹œ ์ œ์•ฝ ์กฐ๊ฑด, ๋ถ„์‚ฐ๋œ ์†Œ์œ ๊ถŒ, ๊ทธ๋ฆฌ๊ณ  ๊ธด ์šด์˜ ์ˆ˜๋ช… ์ฃผ๊ธฐ๋กœ ํ˜•์„ฑ๋œ ์•„ํ‚คํ…์ฒ˜ ๋‚ด์—์„œ ์ปดํŒŒ์ผ, ๋ณ€ํ™˜, ํŒจํ‚ค์ง• ๋ฐ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ •์  ๋ถ„์„์€ ์ด๋Ÿฌํ•œ ์‹œ์Šคํ…œ ์ „๋ฐ˜์— ๊ฑธ์ณ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์–ด๋–ป๊ฒŒ ์ „ํŒŒ๋˜๋Š”์ง€ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•œ ๋” ๊ด‘๋ฒ”์œ„ํ•œ ๋…ธ๋ ฅ์˜ ์ผํ™˜์œผ๋กœ ํ•ด์„๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„ฑ์ˆ™ํ•œ Kotlin ํฌํŠธํด๋ฆฌ์˜ค ์ „๋ฐ˜์—์„œ ๊ด€์ฐฐ๋˜๋Š” ๋ฐœ์ „ ๊ณผ์ •์€ ์ผ๊ด€์ ์ž…๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ๋‹จ๊ณ„์—์„œ๋Š” ๋กœ์ปฌ ์ •ํ™•์„ฑ๊ณผ ๊ฐœ๋ฐœ์ž ์ƒ์‚ฐ์„ฑ์— ์ค‘์ ์„ ๋‘ก๋‹ˆ๋‹ค. ๋„์ž… ๊ทœ๋ชจ๊ฐ€ ์ปค์ง์— ๋”ฐ๋ผ ๋นŒ๋“œ ์•ˆ์ •์„ฑ, ๋ณด์•ˆ ์ƒํƒœ ๋ฐ ๋ฆด๋ฆฌ์Šค ์กฐ์ •์— ๋Œ€ํ•œ ๊ด€์‹ฌ์ด ๋†’์•„์ง‘๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ์—๋Š” ๋ณ€๊ฒฝ ์•ˆ์ „์„ฑ์ด ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ณ ๋ ค ์‚ฌํ•ญ์ด ๋ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ ์ •์  ๋ถ„์„์˜ ๊ฐ€์น˜๋Š” ๋ฐœ๊ฒฌ๋œ ๊ฒฐ๊ณผ์˜ ์ˆ˜๋ณด๋‹ค๋Š” ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์ „์— ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์— ๋” ํฌ๊ฒŒ ์ขŒ์šฐ๋ฉ๋‹ˆ๋‹ค.

์ด ๊ธ€์˜ ์—ฌ๋Ÿฌ ๋ถ€๋ถ„์—์„œ ๊ณตํ†ต์ ์ธ ํŒจํ„ด์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. Kotlin ๋„ค์ดํ‹ฐ๋ธŒ ๋„๊ตฌ๋Š” ์–ธ์–ด ๊ทœ์œจ์„ ๊ฐ•ํ™”ํ•˜๊ณ  ๋กœ์ปฌ ๋ฌธ์ œ๋ฅผ ๋“œ๋Ÿฌ๋‚ด๋Š” ๋ฐ ํƒ์›”ํ•ฉ๋‹ˆ๋‹ค. CI์— ํ†ตํ•ฉ๋œ ๋ถ„์„ ๋„๊ตฌ๋Š” ํ”ผ๋“œ๋ฐฑ์„ ํ‘œ์ค€ํ™”ํ•˜๊ณ  ์žฌํ˜„์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค. ๋ณด์•ˆ ์Šค์บ๋„ˆ๋Š” ์ง‘์ค‘์ ์ธ ๊ฐœ์„ ์ด ํ•„์š”ํ•œ ์ทจ์•ฝ์  ์œ ํ˜•์„ ์‹๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ๋„๊ตฌ๋“ค ์ค‘ ์–ด๋А ํ•˜๋‚˜๋งŒ์œผ๋กœ๋Š” ๊ธฐ์—… ํ™˜๊ฒฝ์—์„œ Kotlin์ด ์–ด๋–ป๊ฒŒ ํ™œ์šฉ๋˜๋Š”์ง€์— ๋Œ€ํ•œ ์™„์ „ํ•œ ๊ทธ๋ฆผ์„ ์ œ๊ณตํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฉ์ฐจ๋Š” ๋ถ„์„ ๊ฒฐ๊ณผ๋ฅผ ์ข…์†์„ฑ ๊ตฌ์กฐ, ๋นŒ๋“œ ํ† ํด๋กœ์ง€ ๋ฐ ์šด์˜ ๋™์ž‘๊ณผ ์—ฐ๊ด€์‹œํ‚ฌ ๋•Œ ๋น„๋กœ์†Œ ๋“œ๋Ÿฌ๋‚ฉ๋‹ˆ๋‹ค.

Kotlin์„ ๋Œ€๊ทœ๋ชจ๋กœ ์„ฑ๊ณต์ ์œผ๋กœ ํ™œ์šฉํ•˜๋Š” ๊ธฐ์—…๋“ค์€ ๋„๊ตฌ ํ™•์‚ฐ๋ณด๋‹ค๋Š” ๋ถ„์„์˜ ์—ฐ์†์„ฑ์— ํˆฌ์žํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ ๋‹จ๊ณ„์™€ ๋ฐฐํฌ ๊ฒฝ๊ณ„๋ฅผ ๋„˜์–ด ์ง€์†๋˜๋Š” ์‹ ํ˜ธ์— ์ง‘์ค‘ํ•˜๊ณ , ์‹œํ€€์‹ฑ, ๋กค๋ฐฑ ๊ณ„ํš ๋ฐ ์ œ์–ด๋œ ์ง„ํ™”๋ฅผ ์ง€์›ํ•˜๋Š” ์ธ์‚ฌ์ดํŠธ๋ฅผ ์ค‘์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ด€์ ์€ ๋” ๋„“์€ ๋ฒ”์œ„์˜ ํ•™๋ฌธ ๋ถ„์•ผ์™€ ์ผ๋งฅ์ƒํ†ตํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์—… ๋ณ€๊ฒฝ ์•ˆ์ „์ •๋ณด์— ์ž…๊ฐํ•œ ์˜์‚ฌ๊ฒฐ์ •์ด ์ถ”์ธก์ด ์•„๋‹Œ ์ถ”์  ๊ฐ€๋Šฅํ•œ ์ฆ๊ฑฐ์— ์˜์กดํ•˜๋Š” ๊ฒฝ์šฐ.

์‹ค์งˆ์ ์ธ ์˜๋ฏธ๋Š” ์ฝ”ํ‹€๋ฆฐ ์ •์  ๋ถ„์„์ด ์™„๋ฒฝํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋งฅ๋ฝ์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฆฌํ”Œ๋ ‰์…˜, ์ƒ์„ฑ๋œ ์ฝ”๋“œ, ํ”„๋ ˆ์ž„์›Œํฌ ์‹คํ–‰์—๋Š” ํ•ญ์ƒ ์‚ฌ๊ฐ์ง€๋Œ€๊ฐ€ ์กด์žฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ด๋Ÿฌํ•œ ์‚ฌ๊ฐ์ง€๋Œ€๋ฅผ ์ดํ•ดํ•˜๊ณ  ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ๋ฐ ๋ณด์™„์ ์ธ ๊ฐ€์‹œ์„ฑ ํ™•๋ณด๋ฅผ ํ†ตํ•ด ๋ณด์™„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ •์  ๋ถ„์„์ด ์ฝ”๋“œ ํ’ˆ์งˆ์— ๋Œ€ํ•œ ์ตœ์ข…์ ์ธ ํŒ๋‹จ์ด ์•„๋‹Œ ์‹œ์Šคํ…œ ์ดํ•ด๋ฅผ ์œ„ํ•œ ์ง€์นจ์œผ๋กœ ํ™œ์šฉ๋  ๋•Œ, ๋งˆ์ฐฐ์˜ ์›์ธ์ด ์•„๋‹ˆ๋ผ ์•ˆ์ •ํ™” ์š”์†Œ๋กœ ์ž‘์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Kotlin์ด ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์‹œ์Šคํ…œ์—์„œ Java๋ฅผ ๋Œ€์ฒดํ•˜๊ฑฐ๋‚˜ ๊ณต์กดํ•˜๋Š” ์ถ”์„ธ๊ฐ€ ์ง€์†๋จ์— ๋”ฐ๋ผ Kotlin์— ์š”๊ตฌ๋˜๋Š” ๋ถ„์„ ์ˆ˜์ค€์€ ๋”์šฑ ๋†’์•„์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํฌํŠธํด๋ฆฌ์˜ค๋Š” ๋”์šฑ ์ด์งˆ์ ์œผ๋กœ ๋ณ€ํ•˜๊ณ , ๋ฆด๋ฆฌ์Šค ์ฃผ๊ธฐ๋Š” ๋”์šฑ ์ƒํ˜ธ ์˜์กด์ ์ด ๋˜๋ฉฐ, ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์˜ํ–ฅ์— ๋Œ€ํ•œ ํ—ˆ์šฉ์น˜๋Š” ๋‚ฎ์•„์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ˜„์‹ค์— ๋ฐœ๋งž์ถ˜ ์ •์  ๋ถ„์„์€ ์˜์กด์„ฑ ์ธ์‹, ์˜ํ–ฅ ๋ถ„์„, ๊ทธ๋ฆฌ๊ณ  ์žฅ๊ธฐ์ ์ธ ์‹ ํ˜ธ์— ์ค‘์ ์„ ๋‘˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋” ๋‚˜์€ Kotlin ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์‹œ์Šคํ…œ์ด ์ œ์–ด๋ ฅ์„ ์žƒ์ง€ ์•Š๊ณ  ์ง„ํ™”ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.