๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ

๐Ÿ’ป ๊ฐœ๋ฐœ/iOS

[TIL] 22.03.17

๊ณต๋ถ€ํ•œ ๊ฒƒ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐ•์˜ ์ˆ˜๊ฐ• CameraX Glide Content Resolver ScaleGestureDetector ์•Œ๊ฒŒ๋œ ๊ฒƒ 1. AddTextChangedListener ๋Œ€๋ถ€๋ถ„์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ฒ€์ƒ‰์ฐฝ์— ๊ฒ€์ƒ‰์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ Enter ๋ฅผ ๋ˆ„๋ฅด๊ธฐ๋„ ์ „์— ์ž…๋ ฅํ•œ ๊ฒ€์ƒ‰์–ด์— ๋”ฐ๋ผ ์ž๋™์™„์„ฑ ๊ฒ€์ƒ‰์–ด๊ฐ€ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„  EditText ์˜ ํ…์ŠคํŠธ ๋ณ€ํ™”๋ฅผ ๊ฐ์ง€ํ•ด์•ผํ•˜๋Š”๋ฐ ์ด๋ฅผ AddTextChangedListener ๋ฅผ ํ†ตํ•ด ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. private fun bindViews() = with(binding) { editTextView.addTextChangedListener { Log.d("Changed!", editTextView.text.toString()) ..

๐Ÿ’ป ๊ฐœ๋ฐœ/iOS

[TIL] 22.03.16

๊ณต๋ถ€ํ•œ ๊ฒƒ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐ•์˜ ์ˆ˜๊ฐ• Retrofit2, OkHttpLoggingInterceptor Shimmer Glide Content Resolver Unsplash API ์•Œ๊ฒŒ๋œ ๊ฒƒ 1. Glide ์˜ค๋Š˜ ๊ณต๋ถ€๋ฅผ ํ•˜๋ฉด์„œ Glide ๊ฐ€ ์ƒ๊ฐ๋ณด๋‹ค ์—„์ฒญ ๊ฐ•๋ ฅํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜๋‹ค. Glide ๋ฅผ ์‚ฌ์šฉํ•œ์ง€๋Š” ๊ฝค ๋์ง€๋งŒ ์ด๋ฅผ ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€ ์•Š์•˜๋‹ค. ์šฐ์„  ๊ทธ๋™์•ˆ Glide ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์•„๋ž˜์ฒ˜๋Ÿผ ์จ์™”๋‹ค. ๊ทธ๋ƒฅ ๋‹จ์ˆœํžˆ ์ด๋ฏธ์ง€๋ทฐ์— ์ด๋ฏธ์ง€๋ฅผ ๋„ฃ์–ด์ฃผ๊ธฐ ์œ„ํ•œ ์šฉ๋„๋กœ... private fun bindViews() { Glide.with(binding.root) .load(profileImageUrl) .into(binding.profileImageView) } ํ•˜์ง€๋งŒ ์ •๋ง ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. ..

๐Ÿ’ป ๊ฐœ๋ฐœ/iOS

[TIL] 22.03.15

๊ณต๋ถ€ํ•œ ๊ฒƒ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐ•์˜ ์ˆ˜๊ฐ• ์•Œ๊ฒŒ๋œ ๊ฒƒ 1. OkHttpLogging Retrofit ์„ ์‚ฌ์šฉํ•ด์„œ API ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ํด๋ผ์ด์–ธํŠธ์˜ ๋ฌธ์ œ์ธ์ง€ ์„œ๋ฒ„์˜ ๋ฌธ์ œ์ธ์ง€๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด HTTP ์˜ ๋กœ๊ทธ๋ฅผ ๋ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์ด ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด OkHttp ์˜ HttpLoggingInterceptor ์ด๋‹ค. // Retrofit Interface ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค. private val openApiService : OpenApiService by lazy { Retrofit.Builder() .baseUrl(Url.OPEN_API_BASE_URL) .addConverter(GsonConverterFactory.create()) .client(buildOkHttpClient()) .build() .crea..

๐Ÿ’ป ๊ฐœ๋ฐœ/iOS

[TIL] 22.03.14

๊ณต๋ถ€ํ•œ ๊ฒƒ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐ•์˜ ์ˆ˜๊ฐ• ์นด์นด์˜คํ†ก, ๊ณต๊ณต๋ฐ์ดํ„ฐ API Retrofit, OkHttpLoggingInterceptor FusedLocationProvider Coroutine AppWidgetProvider Service Lifecycle ์•Œ๊ฒŒ๋œ ๊ฒƒ 1. FusedLocationProvider ์•ˆ๋“œ๋กœ์ด๋“œ์—์„œ ์œ„์น˜ ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์—๋Š” LocationManager ์™€ FusedLocationProvider ๊ฐ€ ์žˆ๋‹ค. ์šฐ์„  LocationManager ์€ getLastKnownLocation ๋˜๋Š” LocationListener ๋ฅผ ํ†ตํ•ด์„œ ์œ„์น˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. // LocationManager ๋ฅผ ์ •์˜ํ•œ๋‹ค. val locationManager = getSystemService(LOCA..

๐Ÿ’ป ๊ฐœ๋ฐœ/iOS

[TIL] 22.03.13

๊ณต๋ถ€ํ•œ ๊ฒƒ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐ•์˜ ์ˆ˜๊ฐ• AppWidgetProvider ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 1๋ฌธ์ œ ์•Œ๊ฒŒ๋œ ๊ฒƒ ์•ˆ๋“œ๋กœ์ด๋“œ ์œ„์ ฏ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Manifest ์— Recevier ๋ฅผ ๋“ฑ๋กํ•˜๊ณ  ์ด ๋•Œ action ๊ณผ meta-data ๋ฅผ ๋„ฃ์–ด์ค€๋‹ค. meta-data : ์œ„์ ฏ ๋ ˆ์ด์•„์›ƒ์˜ ํฌ๊ธฐ, ์ดˆ๊ธฐ ๋ ˆ์ด์•„์›ƒ ๋ฆฌ์†Œ์Šค, ์—…๋ฐ์ดํŠธ ๋นˆ๋„ ๋“ฑ ์•ฑ ์œ„์ ฏ์˜ ๊ธฐ๋ณธ์ ์ธ ํŠน์„ฑ์„ ์ •์˜ํ•œ๋‹ค. minWidth, minHeight : ์œ„์ ฏ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ตœ์†Œ ํฌ๊ธฐ์ด๋‹ค. updatePeriodMillis : onUpdate ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์œ„์ ฏ์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋นˆ๋„๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. ์—…๋ฐ์ดํŠธ ์‹œ์— ๋””๋ฐ”์ด์Šค ๋Œ€๊ธฐ๋ชจ๋“œ๊ฐ€ ํ•ด์ œ๋˜๋ฏ€๋กœ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ๋Š” ์ตœ์†Œ 30๋ถ„, ์ด๋ณด๋‹ค ์งง์€ ์‹œ๊ฐ„ ๊ฐ„๊ฒฉ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์„ ๊ธˆํ•œ๋‹ค. previewImage : ์•ฑ ์œ„์ ฏ..

โœ๏ธ ์ฝ”ํ…Œ ์ค€๋น„/String

[๋ฌธ์ž์—ด / Kotlin] 2019 KAKAO BLIND RECRUITMENT - ์˜คํ”ˆ์ฑ„ํŒ…๋ฐฉ

๋ฌธ์ œ ํ’€์ด ์–ธ์–ด Kotlin ์ฝ”๋“œ class Solution { fun solution(record: Array): Array { val history = arrayListOf() val name = mutableMapOf() val result = arrayListOf() for (e in record.iterator()) { val act = e.split(" ") when (act[0]) { "Enter" -> { name[act[1]] = act[2] history.add(Pair(act[0], act[1])) } "Leave" -> { history.add(Pair(act[0], act[1])) } "Change" -> { name[act[1]] = act[2] } } } history.map ..

โœ๏ธ ์ฝ”ํ…Œ ์ค€๋น„/Implementation

[๊ตฌํ˜„ / Kotlin] 2022 SK ICT Family ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ ์ฑŒ๋ฆฐ์ง€ - 2๋ฒˆ

์šฐ์„  ๊ฐ„๋งŒ์— ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ์ ‘ํ–ˆ๋˜ ํ„ฐ๋ผ ๋งŽ์ด ์–ด๋ ค์› ๋‹ค. FE / APP ๊ฐœ๋ฐœ ์ง๊ตฐ์„ ์„ ํƒํ–ˆ๊ณ  ์ด 4๋ฌธ์ œ๊ฐ€ ๋‚˜์™”๋Š”๋ฐ DP 1, ๊ตฌํ˜„ 1, ๊ทธ๋ž˜ํ”„ 2 ์ด๋ ‡๊ฒŒ ๋‚˜์™”๋‹ค. ์‚ฌ์ •์ด ์žˆ์–ด์„œ 30๋ถ„ ์ •๋„ ๋’ค๋Šฆ๊ฒŒ ์ฐธ์„ํ–ˆ๊ณ  2์‹œ๊ฐ„ ๋™์•ˆ 2๋ฒˆ ํ•˜๋‚˜๋งŒ ํ’€์—ˆ๋‹ค. ์‹œ๊ฐ„์ด ๋” ์žˆ์—ˆ์–ด๋„ ๋‹ค๋ฅธ ๋ฌธ์ œ๋ฅผ ํ’€์ง€ ๋ชปํ–ˆ์„ ๊ฒƒ์ด๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ ๊ณต๋ถ€ ๋•Œ๋ฌธ์— ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์†Œํ™€ํžˆ ํ–ˆ๋Š”๋ฐ ์•ž์œผ๋กœ๋Š” ํŽธ์‹ํ•˜์ง€ ๋ง๊ณ  ์•Œ๊ณ ๋ฆฌ์ฆ˜๋„ ๊พธ์ค€ํžˆ ํ’€์–ด์•ผ๊ฒ ๋‹ค. ๋ฌธ์ œ ๋ฌธ์ œ ์ €์ž‘๊ถŒ์— ์˜ํ•ด์„œ ์บก์ณ๋Š” ํ•˜์ง€ ๋ชปํ–ˆ๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์„ ์žฌ์ •๋ ฌํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค. ์‹œ๊ณ„ ๋ฐฉํ–ฅ, ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ์ด 2๊ฐ€์ง€์˜ ๋ฐฉํ–ฅ์ด ์žˆ์—ˆ์œผ๋ฉฐ ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋Š” ํ™€์ˆ˜์™€ ์ง์ˆ˜๊ฐ€ ์กด์žฌํ–ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ด 4๊ฐ€์ง€ ๊ฒฝ์šฐ ๋Œ€ํ•ด ๋ฐฐ์—ด์„ ์žฌ์ •๋ ฌํ•˜๋Š” ๋ฌธ์ œ์˜€๋‹ค. ํ’€์ด ์–ธ์–ด Kotlin ์ฝ”๋“œ class Solution ..

โœ๏ธ ์ฝ”ํ…Œ ์ค€๋น„/String

[๋ฌธ์ž์—ด / Kotlin] 2020 KAKAO BLIND RECRUITMENT - ๋ฌธ์ž์—ด ์••์ถ•

ํ’€์ด ์–ธ์–ด Kotlin ์ฝ”๋“œ fun solution(s: String): Int { var minLength = s.length for (i in 0 until s.length / 2) { var subString = s.slice(0..i) var answer = "" var cnt = 1 var last = 0 for (j in i + 1 until s.length - i step i + 1) { // ๋งˆ์ง€๋ง‰ Index ๋ฅผ ์ €์žฅํ•œ๋‹ค. last = j + i + 1 // ๊ฐ™์€ SubString ์ธ ๊ฒฝ์šฐ ์ด๋ฅผ ์นด์šดํŠธํ•œ๋‹ค. if (subString == s.slice(j..j + i)) cnt += 1 // ๋‹ค๋ฅธ SubString ์ธ ๊ฒฝ์šฐ else { if (cnt > 1) { // ์ˆซ์ž + SubStri..

๐Ÿ’ป ๊ฐœ๋ฐœ/iOS

[TIL] 22.03.10

๊ณต๋ถ€ํ•œ ๊ฒƒ ์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐ•์˜ ์ˆ˜๊ฐ• ๊นƒํ—ˆ๋ธŒ API Retrofit2 Room SharedPreference ์•Œ๊ฒŒ๋œ ๊ฒƒ ์•”์‹œ์  ์ธํ…ํŠธ ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ action ๊ณผ category ๋Š” ํ•„์ˆ˜ ์š”์†Œ์ด๋‹ค. ์™ธ๋ถ€ ์Šคํ‚ด ์„ ์ด์šฉํ•˜์—ฌ ํŠน์ • Url ์ผ ๋•Œ ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ํ˜ธ์ถœ๋˜๋„๋ก ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์™ธ๋ถ€ ์•ฑ์„ ์‹คํ–‰ํ•˜๊ณ  ๋‹ค์‹œ ์•กํ‹ฐ๋น„ํ‹ฐ๋กœ ๋Œ์•„์˜จ ๊ฒฝ์šฐ onCreate ๊ฐ€ ์•„๋‹Œ OnNewIntent ๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค. Room ์„ ์‚ฌ์šฉํ•  ๋•Œ Entity ์—์„œ Primary Key ๋Š” Null ์ด ๋  ์ˆ˜ ์—†๋‹ค. (๋‹น์—ฐ) PreferenceManager ๋ฅผ ํ†ตํ•ด ๊ธฐ๊ธฐ ๋‚ด๋ถ€์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ณต๋ถ€ํ•  ๊ฒƒ ์ฝ”๋ฃจํ‹ด ์— ๋Œ€ํ•ด ์•„์ง ๋ฏธ์ˆ™ํ•˜๋‹ค. ๊ณต์‹ ๋ฌธ์„œ์™€ ๋ฏธ๋””์—„ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ๊ณต๋ถ€ํ•˜์ž. ๋Š๋‚€ ์  ๋ฐฐ์šธ๊ฒŒ ๋„ˆ๋ฌด ๋งŽ๋‹ค. ์—ด์‹ฌํžˆ ์‚ด์•„์•ผ๊ฒ ๋‹ค.

โ›น๏ธ ๋ผ์ดํ”„/ํšŒ๊ณ 

[ํผ๋“€ ์ผ๊ธฐ] ๊น€์น˜๊ฐ€ ๊ทธ๋ฆฝ์Šต๋‹ˆ๋‹ค

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

kodo_o
'๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (7 Page)