๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ฑ

(18)
[Android Studio] ์•ฑ ๋งŒ๋“ค๊ธฐ ์ „ ์•Œ๋ฉด ์œ ์šฉํ•œ ๊ฒƒ๋“ค โ–ช๏ธ๊ธฐ๋ณธ ๋ฐฐ๊ฒฝ ์ƒ‰์ƒ ์„ค์ • values → themes → themes.xml ์—์„œ ํ•˜๋‹จ์— ์›ํ•˜๋Š” ์ƒ‰์ƒ์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๊ธฐ๋ณธ ๋ฐฐ๊ฒฝ ์ƒ‰์ƒ์œผ๋กœ ์„ค์ •๋œ๋‹ค. โ–ช๏ธ๊ธ€์ž ์ƒ‰ ์„ค์ • values → colors.xml ์—์„œ ํ•˜๋‹จ์— #FF9E9E9E์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‚ฌ์šฉ๋ฒ•์€ xml์—์„œ ํ•ด๋‹น ์ปฌ๋Ÿฌ์˜ ์ด๋ฆ„์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค. #FFBB86FC #FF6200EE #FF3700B3 #FF03DAC5 #FF018786 #FF000000 #FFFFFFFF #FF9E9E9E โ–ช๏ธํฐํŠธ ์‚ฌ์šฉํ•˜๊ธฐ res → New → Android Resource Directory๋ฅผ ํด๋ฆญํ•˜๊ณ  ์ด๋ฆ„์— font๋ฅผ ์น˜๊ณ  OK ์‚ฌ์šฉํ•˜๋Š” ํฐํŠธ์˜ ํŒŒ์ผ๋ช…์—” ๋Œ€๋ฌธ์ž, ๋„์–ด์“ฐ๊ธฐ๊ฐ€ ๋“ค์–ด๊ฐ€๋ฉด ์•ˆ๋œ๋‹ค. ์‚ฌ์šฉ๋ฒ•์€ xml์—์„œ fontFamily์—์„œ ์›ํ•˜๋Š” ํฐํŠธ์˜ ํŒŒ์ผ๋ช…์„ ๋„ฃ์–ด์ค€๋‹ค. โ–ช๏ธ๊ธฐ๋ณธ ..
[Kotlin] TodoList ์•ฑ ๋งŒ๋“ค๊ธฐ๏ผ“ ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ž‘์„ฑํ•œ ํ•  ์ผ์˜ ์ƒ์„ธ ๋ณด๊ธฐ๋ฅผ ๋งŒ๋“ค์–ด๋ด„. ์—ฌ๊ธฐ์„œ๋Š” ๋‹ค์ด์–ผ๋กœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ณด์—ฌ์ฃผ๊ธฐ๋งŒ ํ•  ๊ฑฐ์ž„. MainAdapter์—์„œ MainActivity์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ธ์ž๋กœ this(MainActivity)๋ฅผ ๋„˜๊ฒจ์คŒ. ๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜์— todoDialog๋ฅผ ์ž‘์„ฑํ•ด ์คŒ. todoDialog์—์„œ์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜์—๋Š” ํด๋ฆญํ•œ ํ•ญ๋ชฉ์˜ ํ•  ์ผ Text๋ฅผ ๋„˜๊ฒจ ๋ฐ›์„ ๊ฒƒ์ž„. class MainActivity : AppCompatActivity(), View.OnClickListener { // adapter ์„ ์–ธ val mainAdapter = MainAdapter(this, todoList) override fun onCreate(savedInstanceState: Bundle?) { ... } ove..
[Kotlin] TodoList ์•ฑ ๋งŒ๋“ค๊ธฐ๏ผ’ UI ๊ตฌ์„ฑ์€ ๋‹ค ๋๋ƒˆ์œผ๋ฏ€๋กœ ์ด์ œ ๊ธฐ๋Šฅ๋“ค์„ ๋„ฃ์–ด๋ด„. ์ œ์ผ ๋จผ์ € ํ•ด์•ผ ํ•˜๋Š” ViewBinding ์„ค์ • ๋จผ์ € ํ•ด์คŒ. โ–ช๏ธViewBinding https://velog.io/@eoqkrskfk94/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-View-Binding ์•ˆ๋“œ๋กœ์ด๋“œ View Binding ๋ทฐ ๋ฐ”์ธ๋”ฉ์€ Activity๋‚˜ fragment์™€ ๊ฐ™์€ ๋ทฐ์™€ ์ƒํ˜ธ ์ž‘์šฉํ• ๋•Œ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ง€์›ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•˜๊ฒŒ ์šฐ๋ฆฌ๊ฐ€ ๋ทฐ์™€ ์ƒํ˜ธ ์ž‘์šฉํ• ๋•Œ ์ฃผ๋กœ ์“ฐ๋Š” findViewById๋ฅผ ์“ฐ์ง€ ์•Š๊ณ  ๋ทฐ ์ปด velog.io plugins { ... } android { ... // ViewBinding ์ถ”๊ฐ€ buildFeatures { viewBinding = true..
[Kotlin] TodoList ์•ฑ ๋งŒ๋“ค๊ธฐ๏ผ‘ Android Studio์™€ Kotlin์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์•„์‹œ๋Š” ๋ถ„์„ ๊ธฐ์ค€์œผ๋กœ ํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค. ์šฐ์„  ๋ฉ”๋ชจ ์•ฑ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ ์•ฑ์„ ๋‹ด์„ ํด๋”๋ฅผ ๋งŒ๋“ค์–ด์คŒ. Android Studio ์‹คํ–‰ ํ›„ New Project๋ฅผ ํด๋ฆญํ•˜๊ณ  Phone and Tablet์˜ Empty Activity ํด๋ฆญ ํ›„ Next๋ฅผ ๋ˆ„๋ฅด๊ณ  Name์€ TodoList(์ž์œ )๋กœ ์ ์–ด์คŒ. ์ด์ œ ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์€ Language์™€ Minimum SDK์ž„. ์šฐ๋ฆฌ๋Š” Kotlin์œผ๋กœ ๊ฐœ๋ฐœ์„ ํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— Kotlin์œผ๋กœ ์„ค์ •ํ•ด์ฃผ๊ณ  Minimum SDK๋Š” ์ด ์•ฑ์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์†Œ ์‚ฌ์–‘์ด๋ฉฐ API 26 : Android 8.0(Oreo)๋กœ ํ•ด์ฃผ๊ณ  Finish๋ฅผ ๋ˆŒ๋Ÿฌ์คŒ. SDK๊ฐ€ ๋„ˆ๋ฌด ๋†’๋‹ค๋ฉด ์ตœ์‹  ์Šค๋งˆํŠธํฐ OS๊ฐ€ ์•„๋‹ ๊ฒฝ์šฐ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š๊ณ , ..
[Kotlin] ์ปฌ๋ ‰์…˜ ๐Ÿ’ก๋ฐฐ์—ด, List, Map, Set๐Ÿ’ก โ–ช๏ธ๋ฐฐ์—ด · 0๋ถ€ํ„ฐ ์‹œ์ž‘๋˜๋Š” ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค. · ๋‹ค์–‘ํ•œ ํƒ€์ž…์˜ ๊ฐ’์„ ๋ฐฐ์—ด์— ๋‹ด์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ•œ ๊ฐ€์ง€ ํƒ€์ž…์œผ๋กœ ์ œํ•œํ•˜์—ฌ ๊ฐ’์„ ๋‹ด์„ ์ˆ˜๋„ ์žˆ๋‹ค. fun main() { // ๋‚ด์šฉ์„ ์ถœ๋ ฅํ•˜๋ ค๋ฉด contentToString() val arr1 = arrayOf(10, 20, 30, 40, 50) println("arr1 : $arr1") println("arr1 : ${arr1.contentToString()}") // ๋‹ค์–‘ํ•œ ํƒ€์ž…์„ ๋„ฃ๊ธฐ val arr2 = arrayOf(10, 20.0, "๊ฐ€๋‚˜๋‹ค", true) println("arr2 : ${arr2.contentToString()}") // ํ•œ ๊ฐ€์ง€ ํƒ€์ž…๋งŒ ๋„ฃ๊ธฐ // ๋งจ ์•ž์— ํƒ€์ž…+ArrayOf๋ฅผ ๋ถ™์ด๊ฑฐ๋‚˜ ์ œ๋„ค..
[Kotlin] ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๐Ÿ’ก์ต๋ช…ํ•จ์ˆ˜, ์ธ๋ผ์ธ ํ•จ์ˆ˜, ํ™•์žฅํ•จ์ˆ˜, Infix ํ•จ์ˆ˜, ๊ณ ์ฐจํ•จ์ˆ˜๐Ÿ’ก โ–ช๏ธํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ · Java๋Š” ์™„๋ฒฝํ•œ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ด๋‹ค. · Kotlin์€ ํ•จ์ˆ˜๋งŒ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ง€์›ํ•œ๋‹ค. · ๊ฐ„๋‹จํ•œ ํ•จ์ˆ˜๋Š” ํ•œ ์ค„๋กœ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. fun main() { val result1 = fun1(100, 200) println(result1) val result2 = fun2(200, 300) println(result2) val result3 = fun2(300, 400) println(result3) } fun fun1(num1 : Int, num2 : Int) : Int { return num1 + num2 } // fun1์ฒ˜๋Ÿผ ๊ฐ„๋‹จํ•œ ํ•จ์ˆ˜๋Š” ํ•œ ์ค„๋กœ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅ fun fun2(num1 : In..
[Kotlin] ๋‹ค์–‘ํ•œ ํด๋ž˜์Šค ๐Ÿ’กcompanion, data class, ์ค‘์ฒฉ ํด๋ž˜์Šค, enum, sealed๐Ÿ’ก โ–ช๏ธcompanion · ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. · ๊ณตํ†ต๋œ ๊ฐ’์ด ๋งŽ๋‹ค๋ฉด companion์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. fun main() { // ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์•ผ ๊ทธ ์•ˆ์˜ ๋‚ด์šฉ๋“ค์„ ์“ธ ์ˆ˜ ์žˆ์Œ val obj = ComClass() println("obj.num1 : ${obj.num1}") obj.comFunction1() // companion์€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ println("obj.num2 : ${ComClass.num2}") ComClass.comFunction2() } class ComClass { var num1 = 100 fun comFunction1() { println("comFu..
[Kotlin] ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๐Ÿ’ก์ƒ์„ฑ์ž, ์ƒ์†, ์ถ”์ƒ, interface๐Ÿ’ก โ–ช๏ธ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ · ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋‚˜ ๊ธฐ๋Šฅ์„ ๊ฐ์ฒด๋กœ ๋ฌถ์–ด์„œ ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ๋ฒ•์ด๋‹ค. · ๋งค๊ฐœ์ฒด ํ•˜๋‚˜์˜ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ์ฒด ํ•˜๋‚˜๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ ๊ด€๋ฆฌํ•˜๊ณ ์ž ํ•˜๋Š” ๋งค๊ฐœ์ฒด์˜ ์ˆ˜๋งŒํผ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค. fun main() { // ๊ฐ์ฒด ๋งŒ๋“ค๊ธฐ val obj1 = TestObject() val obj2 = TestObject() // obj1์—๋Š” ์ด๋ฏธ ๋งŒ๋“ค์–ด๋…ผ ๊ฐ์ฒด๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ obj3์—๋Š” obj1์˜ ์ฃผ์†Œ๊ฐ’์ด ๋“ค์–ด๊ฐ(๊ฐ™์€ ๊ฐ์ฒด) val obj3 = obj1 // ๊ฐ์ฒด์˜ ์ฃผ์†Œ๊ฐ’์ด ๋‚˜์˜ด println("obj1 : $obj1") println("obj2 : $obj2") println("obj3 : $obj3") } class Test..