kotlin 20

Java, Kotlin Coding conventions

Java convention https://naver.github.io/hackday-conventions-java/ ์บ ํผ์Šค ํ•ต๋ฐ์ด Java ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜ ์ค‘๊ด„ํ˜ธ({,}) ๋Š” ํด๋ž˜์Šค, ๋ฉ”์„œ๋“œ, ์ œ์–ด๋ฌธ์˜ ๋ธ”๋Ÿญ์„ ๊ตฌ๋ถ„ํ•œ๋‹ค. 5.1. K&R ์Šคํƒ€์ผ๋กœ ์ค‘๊ด„ํ˜ธ ์„ ์–ธ ํด๋ž˜์Šค ์„ ์–ธ, ๋ฉ”์„œ๋“œ ์„ ์–ธ, ์กฐ๊ฑด/๋ฐ˜๋ณต๋ฌธ ๋“ฑ์˜ ์ฝ”๋“œ ๋ธ”๋Ÿญ์„ ๊ฐ์‹ธ๋Š” ์ค‘๊ด„ํ˜ธ์— ์ ์šฉ๋˜๋Š” ๊ทœ์น™์ด๋‹ค. ์ค‘๊ด„ํ˜ธ naver.github.io Kotlin convention https://kotlinlang.org/docs/coding-conventions.html#class-layout Coding conventions | Kotlin kotlinlang.org ์ฝ”๋”ฉํ•  ๋•Œ ์ฐธ๊ณ ํ•˜๋Š” convention ๋ฌธ์„œ๋“ค! Java๋ž‘ Kotlin ์นดํ…Œ๊ณ ๋ฆฌ ๋‘˜ ์ค‘ ์–ด๋””๋‹ค ๋„ฃ์„์ง€..

์•ˆ๋“œ๋กœ์ด๋“œ ์ƒํƒœ๋ฐ” (statusBar) ์—†์• ๊ธฐ

์•ˆ๋“œ๋กœ์ด๋“œ ์ƒํƒœ๋ฐ” (statusBar) ์—†์• ๊ธฐ SplashActivity๋ฅผ ๋งŒ๋“ค ๋•Œ ๊ผญ ํ•„์š”ํ•œ ์ƒํƒœ๋ฐ” ์—†์• ๋Š” ๋ฐฉ๋ฒ•! ์–ธ์–ด๋Š” ์ฝ”ํ‹€๋ฆฐ ์ž…๋‹ˆ๋‹ค. class SplashActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_splash) // ์ƒํƒœ๋ฐ” ์—†์• ๊ธฐ @Suppress("DEPRECATION") if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { window.insetsController?.hide(WindowInsets.Type.statusBa..

Android 2021.07.17

์•ˆ๋“œ๋กœ์ด๋“œ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ(Data Binding) ์‹œ์ž‘ํ•˜๊ธฐ

Data Binding ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ(Data Binding)์„ ์จ์•ผํ•˜๋Š” ์ด์œ  ์•ˆ๋“œ๋กœ์ด๋“œ๋ฅผ ๋ฐฐ์šฐ๋Š” ์ดˆ๊ธฐ์—๋Š” findViewById()๋ฅผ ๋งŽ์ด ์“ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ findViewById()๋Š” runtime์‹œ ๋ทฐ์˜ ๊ณ„์ธต์„ ํƒ€๊ณ ํƒ€๊ณ  ๋“ค์–ด๊ฐ€๋Š” ๋น„ํšจ์œจ์ ์ธ ํ•จ์ˆ˜์ด๋‹ค. ๊ฐ„๋‹จํ•œ ์•ฑ์—์„œ๋Š” ์ƒ๊ด€์—†์ง€๋งŒ, ์•ฑ์ด ์ปค์ง€๋ฉด ํšจ์œจ์ด ๋–จ์–ด์ง„๋‹คใ…œใ…œ Data Binding์€ ๊ฐ ๋ ˆ์ด์•„์›ƒ xml๋งˆ๋‹ค binding class๋ฅผ ๋งŒ๋“ ๋‹ค. (activity_main ⇒ ActivityMainBinding) ๊ทธ๋ž˜์„œ binding class๋ฅผ ํ†ตํ•ด ์‰ฝ๊ฒŒ ๋ทฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์–ด์„œ, ์ฝ”๋“œ๋„ ๊ฐ„๊ฒฐํ•ด์ง„๋‹ค. ๋˜ํ•œ, ์š”์ฆ˜ ๋งŽ์ด ์“ฐ๋Š” MVVM ์•„ํ‚คํ…์ณ์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ(Data Binding)์˜ ์žฅ์  findViewById()์˜ ๋น„ํšจ์œจ์„ฑ์„ ๊ฐœ..

Android 2021.06.05

์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค ํ”„๋กœ์ ํŠธ Java๋ฅผ Kotlin์œผ๋กœ ๋ณ€ํ™˜ (java kt๋กœ ๋ฐ”๊พธ๊ธฐ)

์‹ ๋‚˜๊ฒŒ ์ž‘์—…ํ•˜๊ณ  ์žˆ๋˜ ์–ด๋Š ๋‚  , , ๋ฌธ๋“ MainActivity๊ฐ€ Java๋กœ ๋˜์–ด์žˆ๋Š” ๊ฑธ ๊นจ๋‹ฌ์•˜๋‹ค. ์•Œ๊ณ  ๋ณด๋‹ˆ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ์‹œ ์ž๋ฐ”๋กœ ๋งŒ๋“ค์—ˆ๋˜ ๊ฒƒ,,,,, ๋‚˜๋จธ์ง€๋Š” ์ฝ”ํ‹€๋ฆฐ์œผ๋กœ ๋‹ค ์ž‘์—…ํ•ด๋†”์„œ ๋‹คํ–‰์ด์—ˆ์ง€๋งŒ, MainActivity๋งŒ Java๋กœ ๋˜์–ด์žˆ์–ด์„œ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋‚˜ ํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ์—ญ์‹œ ํ‚น๊ฐ“ํ‹€๋ฆฐ...๐Ÿ‘ MainActivity์—์„œ ์šฐํด๋ฆญํ•˜๋ฉด, Convert Java File to Kotlin File ์ด๋ผ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค..! ํŒ์—…์ฐฝ์ด ๋œจ๋Š”๋ฐ ๊ทธ๋ƒฅ OK ๋ˆŒ๋Ÿฌ์ฃผ๋ฉด ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ž ์‹œ ํ›„... ์•„์ฃผ ๋‚˜์ด์Šค ํ•˜๊ฒŒ ์ฝ”ํ‹€๋ฆฐ์œผ๋กœ ๋ฐ”๋€๋‹ค!!!!!

Android 2021.05.28

Plugin [id: 'kotlin-android'] was not found in any of the following sources ์˜ค๋ฅ˜ ํ•ด๊ฒฐ

Plugin [id: 'kotlin-android'] was not found in any of the following sources Plugin [id: 'kotlin-kapt'] was not found in any of the following sources plugins { id 'com.android.application' id 'kotlin-android' id 'kotlin-kapt' } Room ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์“ฐ๋ ค๊ณ  plugin์— 'kotlin-android'์™€ 'kotlin-kapt'๋ฅผ ์ถ”๊ฐ€ํ•˜๋‹ˆ๊นŒ ์ด์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ๋‹ค.๐Ÿ˜ข ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• Project ๋ ˆ๋ฒจ์˜ Gradle ํŒŒ์ผ๋กœ ๊ฐ„๋‹ค. Gradle ํŒŒ์ผ์— ์ž๊ธฐ์˜ ํ˜„์žฌ ์ฝ”ํ‹€๋ฆฐ ๋ฒ„์ „๊ณผ, classpath๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค! buildscript ..

Android 2021.05.23

[๋ถ€์ŠคํŠธ์ฝ”์Šค] 03. ์ฝ”ํ‹€๋ฆฐ null ์ฒ˜๋ฆฌ, ์ž๋ฃŒํ˜• ๋ณ€ํ™˜

์ฝ”ํ‹€๋ฆฐ์˜ null ์ฒ˜๋ฆฌ ์ฝ”ํ‹€๋ฆฐ์˜ ๋ณ€์ˆ˜ ์„ ์–ธ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ null์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. null ๊ฐ€๋Šฅํ•œ ์„ ์–ธ (Nullable) val a: Int? = null val b: String? = null ๋‹จ์ˆœ ์ถœ๋ ฅ์€ ์ƒ๊ด€์—†์œผ๋‚˜ null์ธ ์ƒํƒœ์—์„œ ์—ฐ์‚ฐ๋˜๋Š” ๋ฉค๋ฒ„์— ์ ‘๊ทผํ•  ๋•Œ → NPE ๋ฐœ์ƒ NPE (Null Pointer Exception) ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” null์ธ ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜๋ฉด์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ˆ์™ธ ์„ธ์ดํ”„ ์ฝœ ? fun main() { var str1: String? str1 = null println("str1: $str1, length: ${str1?.length}") // str1์ด null์ด๋ฉด length๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค. } ? ์„ ๋ถ™์ด์ง€ ์•Š์œผ๋ฉด NPE๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. non-null ๋‹จ์ • ๊ธฐํ˜ธ !! f..

[๋ถ€์ŠคํŠธ์ฝ”์Šค] 02. ์ฝ”ํ‹€๋ฆฐ ๋ณ€์ˆ˜์™€ ์ž๋ฃŒํ˜•

์ฝ”ํ‹€๋ฆฐ ๋ณ€์ˆ˜ ์„ ์–ธ ์„ ์–ธ ๋ฐฉ๋ฒ• val (value) - ๋ถˆ๋ณ€ํ˜•. ์„ ์–ธํ•˜๊ณ  ์ดˆ๊ธฐํ™” ํ›„ ๊ฐ’์„ ๋ฐ”๊ฟ€ ์ˆ˜ X var (variable) - ๊ฐ€๋ณ€ํ˜• fun main() { var username: String = "Kildong" username = "Dooly" println("username: $username") } ๋ฌธ์ž์—ด ๋‚ด์— ๋ณ€์ˆ˜๋‚˜ ์‹์„ ${๋ณ€์ˆ˜ ํ˜น์€ ์‹}์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ณ€์ˆ˜๊ฐ€ ํ•˜๋‚˜์ด๋ฉด $username์ฒ˜๋Ÿผ ์ค‘๊ด„ํ˜ธ ์ƒ๋žต ๊ฐ€๋Šฅ. ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ฐ์ดํ„ฐํ˜•์„ ์ถ”๋ก ํ•ด ์„ ์–ธํ•  ์ˆ˜ ๋„ ์žˆ๋‹ค. fun main() { var username = "Kildong" var count = 3 println("username: $username, count: $count") } ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ถ”๋ก ํ•œ ๋ณ€์ˆ˜๋Š” ctrl + shi..

[๋ถ€์ŠคํŠธ์ฝ”์Šค] 01. ์ฝ”ํ‹€๋ฆฐ ์†Œ๊ฐœ, ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์น˜

์ฝ”ํ‹€๋ฆฐ์ด๋ž€? ์ฝ”ํ‹€๋ฆฐ์˜ ํŠน์ง• IDE(Android Studio์˜ ๋ชจ์ฒด)๋กœ ์œ ๋ช…ํ•œ JetBrains์—์„œ ๊ฐœ๋ฐœํ•˜๊ณ  ๋ณด๊ธ‰. ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•˜๊ณ  ๋‹ค์žฌ๋‹ค๋Šฅํ•˜๋ฉฐ ํ˜ธํ™˜์„ฑ์ด ๋†’๋‹ค. ๋ฌธ์žฅ ๋์— ์„ธ๋ฏธ์ฝœ๋ก ์€ ์˜ต์…˜์ด๋‹ค. (์•ˆ ๋ถ™์—ฌ๋„ ๋œ๋‹ค.) Android Studio์—์„œ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ณต์‹ ์–ธ์–ด๋กœ ์ถ”๊ฐ€. ๋ณ€์ˆ˜๋Š” Nullable(๋„ ๊ฐ’ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)๊ณผ NotNull๋กœ ๋‚˜๋‰˜๋Š”๋ฐ, ๋ณ€์ˆ˜ ์„ ์–ธ ์‹œ '?'๋ฅผ ๋ถ™์—ฌ Nullable๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. Null ๊ฐ’์ด ๊ฐ€๋Šฅ ํ•œ์ง€, ์•ˆ ํ•œ ์ง€ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ. ์˜ˆ์™ธ ์ฒ˜๋ฆฌํ•  ํ•„์š” ์—†๋‹ค. ์ฝ”ํ‹€๋ฆฐ์˜ ์šฉ๋„(์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ”Œ๋žซํผ) Kotlin/JVM ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹  ์ƒ์—์„œ ๋™์ž‘ํ•˜๋Š” ์•ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. → ์•ˆ๋“œ๋กœ์ด๋“œ๋„ ๊ฐ€๋Šฅ! Kotlin/JS ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์— ์˜ํ•ด ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•˜๋Š” ์•ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. Kot..

[๋ถ€์ŠคํŠธ์ฝ”์Šค] 00. ๋ถ€์ŠคํŠธ์ฝ”์Šค ์†Œ๊ฐœ, ์ฝ”ํ‹€๋ฆฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

๋ถ€์ŠคํŠธ์ฝ”์Šค ๋ถ€์ŠคํŠธ์ฝ”์Šค๋Š” ๋„ค์ด๋ฒ„ ์ปค๋„ฅํŠธ์žฌ๋‹จ์—์„œ ๊ธฐํšํ•˜๊ณ  ์šด์˜ํ•˜๋Š” ์‹ค๋ฌดํ˜• ์˜จ๋ผ์ธ ๊ต์œก ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. IT ๋ถ„์•ผ์— ๋Œ€ํ•œ ํ€„๋ฆฌํ‹ฐ ๋†’์€ ๊ฐ•์˜๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋ˆ„๊ตฌ๋‚˜ ์ œํ•œ ์—†์ด ๋ฌด๋ฃŒ๋กœ ์ˆ˜๊ฐ• ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค!! ๋˜ํ•œ ๋ชจ๋“  ๊ณผ์ •์€ ํ”„๋กœ์ ํŠธ ํ˜•์‹์˜ ๊ณผ์ œ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์‹ค๋ฌด ์—ญ๋Ÿ‰์„ ๊ธฐ๋ฅด๋Š”๋ฐ ์ตœ๊ณ ์˜ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค!๐Ÿ‘๐Ÿ‘ ์ €๋Š” ์•ž์œผ๋กœ '์ฝ”ํ‹€๋ฆฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ' ๊ฐ•์˜๋ฅผ ํ•™์Šตํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ์ €์™€ ํ•จ๊ป˜ ๊ณต๋ถ€ํ•˜์‹ค ๋ถ„๋“ค์€ ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”. ๐Ÿ˜Š www.boostcourse.org/mo132 ์ฝ”ํ‹€๋ฆฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ณธ1/2(ํ•จ์ˆ˜ํŽธ) ๋ถ€์ŠคํŠธ์ฝ”์Šค ๋ฌด๋ฃŒ ๊ฐ•์˜ www.boostcourse.org ์ฝ”ํ‹€๋ฆฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ถ€์ŠคํŠธ์ฝ”์Šค์˜ ์ฝ”ํ‹€๋ฆฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ•์˜๋Š” ๊ตฌ๊ธ€์—์„œ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ณต์‹ ์–ธ์–ด๋กœ ์ง€์ •๋œ '์ฝ”ํ‹€๋ฆฐ'์„ ํ•™์Šตํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ์ด 3ํŽธ์œผ๋กœ ๊ตฌ์„ฑ๋˜..

[๋ถ€์ŠคํŠธ์ฝ”์Šค] ๋ถ€์ŠคํŠธ์ฝ”์Šค ์„œํฌํ„ฐ์ฆˆ 3๊ธฐ ํ•ฉ๊ฒฉ!!!

๋ถ€์ŠคํŠธ์ฝ”์Šค ์„œํฌํ„ฐ์ฆˆ 3๊ธฐ์— ํ•ฉ๊ฒฉํ–ˆ๋‹ค!!!!!!๐ŸŽ‰ ์ •๋ง ๊ธ‰ํ•˜๊ฒŒ ์ง€์›ํ•˜๊ธฐ๋„ ํ–ˆ๊ณ , ์ฝ”ํ‹€๋ฆฐ ๋ถ„์•ผ๋Š” ์ œ์ผ ์ ๊ฒŒ ๋ฝ‘์•„์„œ ๊ธฐ๋Œ€๋„ ์•ˆ ํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ์ƒˆํ•ด๋ถ€ํ„ฐ ์ด๋Ÿฐ ๊ธฐ์œ ์†Œ์‹์„ ๋“ค์–ด์„œ ๋„ˆ๋ฌด ํ–‰๋ณตํ•˜๋‹ค~~๐Ÿ˜†๐Ÿ˜† ๋ฒŒ์จ๋ถ€ํ„ฐ ์„œํฌํ„ฐ์ฆˆ์˜ ์ฑ…์ž„๊ฐ์ด ๋”ํ•ด์ ธ์„œ ๊ทธ๋Ÿฐ์ง€ ๊ณต๋ถ€ ์˜์ง€๊ฐ€ ๋ถˆํƒ€์˜ค๋ฅธ๋‹ค....๐Ÿ”ฅ ์—ด์‹ฌํžˆ ํ™œ๋™ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค! naver.me/GKoTzkff [๋ถ€์ŠคํŠธ์ฝ”์Šค ์„œํฌํ„ฐ์ฆˆ 3๊ธฐ ๋ชจ์ง‘] ๊ฒจ์šธ๋ฐฉํ•™์„ ์•Œ์ฐจ๊ฒŒ ๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ•! [BY ๋ถ€์ŠคํŠธ์ฝ”์Šค] ์•ˆ๋…•ํ•˜์„ธ์š”! ๋ถ€์ŠคํŠธ์ฝ”์Šค ์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ์—ฌ๋Ÿฌ๋ถ„๋“ค๊ป˜ ํ•œ ๊ฐ€์ง€ ์†Œ์‹์„ ๊ฐ€์ง€๊ณ  ์™”๋Š”๋ฐ์š”, ... m.post.naver.com