[Android TIL] 240318
๋ฐ˜์‘ํ˜•

 

 

 

~ Today I Learned ~

 

โœ”๏ธ ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด (์—†๋Š” ์ˆซ์ž ๋”ํ•˜๊ธฐ)
โœ”๏ธ ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ๊ฐœ๋ฐœ ์ž…๋ฌธ ๊ฐ•์˜ ์™„๊ฐ• (1~3์ฃผ์ฐจ)

X๊ณ„ํš์‹คํŒจX ํ‚ค์˜ค์Šคํฌ ๊ณผ์ œ ๋ณต์Šต ๋ฐ ํ•ด์„ค

 

 

 

 


 

 

 

1. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด (์—†๋Š” ์ˆซ์ž ๋”ํ•˜๊ธฐ)

 

 

[Kotlin] ์—†๋Š” ์ˆซ์ž ๋”ํ•˜๊ธฐ (ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์•Œ๊ณ ๋ฆฌ์ฆ˜)

๋ฌธ์ œ https://school.programmers.co.kr/learn/courses/30/lessons/86051 ์ ‘๊ทผ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋‚ด๋ถ€์˜ ์›์†Œ๋ฅผ ๊ฒ€์‚ฌํ•˜๊ณ , ์—†๋Š” ๊ฒฝ์šฐ sum์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. class Solution { fun solution(numbers: IntArray): Int {

limheejin.tistory.com

  • filterNot(numbers::contains) ์„ ์ด์šฉํ•œ ํ’€์ด๊ฐ€ ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์› ๋‹ค.
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ์‚ฌ์šฉํ•œ '๋ฐฐ์—ด ๋‚ด ํŠน์ • ์›์†Œ'์™€ ๊ด€๋ จ๋œ ๋ฉ”์„œ๋“œ๋“ค์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

 

๐Ÿ’ก Kotlin์—์„œ ๋ฐฐ์—ด ์•ˆ์˜ ํŠน์ • ์›์†Œ์™€ ๊ด€๋ จ๋œ ๋ฉ”์„œ๋“œ

 

val array = arrayOf(1, 2, 3, 4, 5)
val result = 3 in array // true
  • in ์—ฐ์‚ฐ์ž
  • ๋ฐฐ์—ด ์•ˆ์— ํŠน์ • ์›์†Œ๊ฐ€ ์žˆ๋Š”์ง€๋ฅผ ๊ฒ€์‚ฌ
  • ํ•ด๋‹น ์›์†Œ๊ฐ€ ๋ฐฐ์—ด์— ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜

 

val array = arrayOf(1, 2, 3, 4, 5)
val result = array.contains(3) // true
  • contains() 
  • ๋ฐฐ์—ด์— ํŠน์ • ์›์†Œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€๋ฅผ ๊ฒ€์‚ฌ
  • ํ•ด๋‹น ์›์†Œ๊ฐ€ ๋ฐฐ์—ด์— ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜

 

val array = arrayOf(1, 2, 3, 4, 5)
val containsElement = array.any { it == 3 } // true
  • .any() 
  • ๋ฐฐ์—ด์— ์ฃผ์–ด์ง„ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์š”์†Œ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธ
  • ๋งŒ์•ฝ ๋ฐฐ์—ด์— ํ•ด๋‹น ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์š”์†Œ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ๋‹ค๋ฉด true๋ฅผ ๋ฐ˜ํ™˜, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜

 

val array = arrayOf(1, 2, 3, 4, 5)
val index = array.indexOf(3) // 2
  • indexOf()
  • ๋ฐฐ์—ด์—์„œ ํŠน์ • ์›์†Œ์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ฒ€์ƒ‰
  • ํ•ด๋‹น ์›์†Œ๊ฐ€ ๋ฐฐ์—ด์— ์žˆ์œผ๋ฉด ์ธ๋ฑ์Šค๊ฐ’, ๋ฐฐ์—ด์— ์—†์œผ๋ฉด -1์„ ๋ฐ˜ํ™˜

 

val sortedArray = arrayOf(1, 2, 3, 4, 5)
val index = sortedArray.binarySearch(3) // 2
  • binarySearch()
  • ๋ฐฐ์—ด์ด ์ •๋ ฌ๋˜์–ด ์žˆ์„ ๊ฒฝ์šฐ, ์ด์ง„ ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ํŠน์ • ์›์†Œ์˜ ์ธ๋ฑ์Šค๋ฅผ ๊ฒ€์ƒ‰
  • ํ•ด๋‹น ์›์†Œ๊ฐ€ ๋ฐฐ์—ด์— ์žˆ์œผ๋ฉด ์ธ๋ฑ์Šค๊ฐ’, ๋ฐฐ์—ด์— ์—†์œผ๋ฉด ์Œ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜

 

val array = arrayOf(1, 2, 3, 4, 5)
val filteredArray = array.filter { it == 3 } // [3]
val containsElement = filteredArray.isNotEmpty() // true
  • .filter() 
  • ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ฃผ์–ด์ง„ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์š”์†Œ๋งŒ์„ ์„ ํƒํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ์ƒ์„ฑ
  • ๋”ฐ๋ผ์„œ ํŠน์ • ์›์†Œ๊ฐ€ ๋ฐฐ์—ด์— ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค๋Š”, ํ•ด๋‹น ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์›์†Œ๊ฐ€ ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐ ์ ํ•ฉ

 

 

 

 

 

2. ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ๊ฐœ๋ฐœ ์ž…๋ฌธ ๊ฐ•์˜ ์™„๊ฐ• (1~4์ฃผ์ฐจ)

 

1์ฃผ์ฐจ

 

[Android ๊ธฐ์ดˆ] 01. ์•ˆ๋“œ๋กœ์ด๋“œOS์™€ ์ฝ”ํ‹€๋ฆฐ ๊ธฐ์ดˆ ๊ฐœ๋…

1 ์•ˆ๋“œ๋กœ์ด๋“œ์™€ ์ฝ”ํ‹€๋ฆฐ ์•ˆ๋“œ๋กœ์ด๋“œ OS ํŠน์ง• 1. ์˜คํ”ˆ์†Œ์Šค - ๊ฐœ๋ฐœ์ž๋“ค์ด ์†Œ์Šค ์ฝ”๋“œ์— ์ ‘๊ทผํ•˜์—ฌ ์ด๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ๋ฐฐํฌ ๊ฐ€๋Šฅ - ๋‹ค์–‘ํ•œ ์ œ์กฐ์‚ฌ๊ฐ€ ์ž์‹ ๋“ค์˜ ๊ธฐ๊ธฐ์— ๋งž์ถคํ˜• ์•ˆ๋“œ๋กœ์ด๋“œ ๋ฒ„์ „์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ

limheejin.tistory.com

 

[Android ๊ธฐ์ดˆ] 02. ๊ฐœ๋ฐœ ๋„๊ตฌ IDE, AVD์‹คํ–‰, XML ๊ธฐ๋ณธ ๊ตฌ์กฐ

1 ์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค ์„ค์น˜/์‹œ์ž‘ ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ ๋ฐ ์„ค์น˜ํ•˜๊ธฐ https://developer.android.com/studio?hl=ko ์—์„œ ๋‹ค์šด๋กœ๋“œ ๋ฐ ์„ค์น˜ ์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค ์ต์ˆ™ํ•ด์ง€๊ธฐ ํˆด๋ฐ”: ์•ฑ ๋ฐ ์—๋ฎฌ๋ ˆ์ดํ„ฐ ์‹คํ–‰, SDK ๋‹ค์šด๋กœ

limheejin.tistory.com

  • ์•ˆ๋“œ๋กœ์ด๋“œ ํ”Œ๋žซํผ ๊ตฌ์กฐ(Linux Kernel, HAL, ART, Native C/C++ Libraries, Java API ํ”„๋ ˆ์ž„์›Œํฌ, System Apps ๋“ฑ)
  • ์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค ์„ค์ •
  • AVD ์‹คํ–‰
  • ํ™”๋ฉด ์ „ํ™˜๊ณผ ์ธํ…ํŠธ
  • ๋ฒ„ํŠผ onclick์„ ์ด์šฉํ•œ ํ™”๋ฉด ๋„˜๊ธฐ๊ธฐ

๊ธฐ์กด์— ์ •๋ฆฌํ•œ ๊ธ€์— ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ˆ˜์ •ํ–ˆ๋‹ค.

 

2์ฃผ์ฐจ

 

[Android ๊ธฐ์ดˆ] 3. ์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค ํŒŒ์ผ ๊ตฌ์„ฑ

Gradle๋นŒ๋“œ ์„ค์ •ํŒŒ์ผ Gradle: ์•ˆ๋“œ๋กœ์ด๋“œ ์•ฑ์˜ ๋นŒ๋“œ ๋„๊ตฌ Gradle์˜ ์„ค์ • ํŒŒ์ผ: build.gradle ํ”„๋กœ์ ํŠธ ์ˆ˜์ค€์˜ build.gradle(Project:AndroidLab) ๋ชจ๋“ˆ ์ˆ˜์ค€์˜ build.gradle(Module:AndroidLab.app) ์ฃผ์š”๋ฉ”๋‰ด Bookmarks - ๋ถ๋งˆํฌ ํ• 

limheejin.tistory.com

  • ์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค์˜ ์ฃผ์š” ๋ฉ”๋‰ด
  • Manifest ํŒŒ์ผ, Resource, R.java, .kt, Gradle ์„ค์ • ํŒŒ์ผ
  • ๋ฆฌ์†Œ์Šค ํŒŒ์ผ ์žฌ์ •์˜๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

 

3์ฃผ์ฐจ

  • UI์˜ ์œ„์ ฏ๋ถ€๋ถ„๊นŒ์ง€ ๊ณต๋ถ€ํ•˜๊ณ  ์ •๋ฆฌํ•˜์˜€๋‹ค. ๋‚จ์€ 3์ฃผ์ฐจ ์ ˆ๋ฐ˜๊ณผ 4์ฃผ์ฐจ ๊ฐ•์˜๋Š” ๋‚ด์ผ ์ •๋ฆฌํ•˜์—ฌ ์˜ฌ๋ฆด ์˜ˆ์ •์ด๋‹ค.

 

 

 

 


 

~ Trouble Shooting ~

 

 

๋นŒ๋“œ๋„ ์•ˆ ๋จ

1. Github์— ์ปค๋ฐ‹๋œ ํŒŒ์ผ์„ cloneํ•œ ํ›„ ์—ด์—ˆ์„ ๋•Œ์˜ ๋ฌธ์ œ

 

[Git] ๊นƒ ํด๋ก  ์˜ค๋ฅ˜ - Invalid Gradle JDK configuration found

๊นƒํ—ˆ๋ธŒ์— ์˜ฌ๋ ค๋‘” ํ”„๋กœ์ ํŠธ๋ฅผ ํด๋ก  ํ•  ๋•Œ๋งˆ๋‹ค ์œ„์™€ ๊ฐ™์€ ์˜ค๋ฅ˜๊ฐ€ ๋–ด๋‹ค. ์ปดํ“จํ„ฐ์— ์–ด๋–ค ์„ค์ •์ƒ์˜ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋ณด์•˜๋‹ค. Invalid Gradle JDK configuration found ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• 1. cmd๋ฅผ ์—ด๊ณ 

limheejin.tistory.com

  • ์œ„์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐ ์™„๋ฃŒํ–ˆ๋‹ค.
  • Java๊ฐ€ ์„ค์น˜๋˜์ง€ ์•Š์•„ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ • ๋ฐ Gradle JDK ๊ฒฝ๋กœ๋ฅผ ๋‹ค์‹œ ์„ค์ •ํ•ด์ค˜์•ผ ํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค.

 

 

 


~ Retrospect ~

 

๋“œ๋””์–ด ๊ธฐ์ดˆ์ ์ธ ์ฝ”ํ‹€๋ฆฐ ๋ฌธ๋ฒ•์„ ๋„์žฅ๊นจ๊ธฐํ•˜๊ณ , ์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค๋กœ ์˜ฎ๊ฒจ์™”๋‹ค. ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ๋„ ๋ณ‘ํ–‰ํ•˜๊ณ  ์‹ถ์€ ์š•์‹ฌ์ด ์—„์ฒญ๋‚˜๋‹ค.

 

 

 

 

 

๋ฐ˜์‘ํ˜•
 ๐Ÿ’ฌ C O M M E N T