ํฌ์ŠคํŒ… ์ธ๋„ค์ผ ์ด๋ฏธ์ง€

ํ•™์Šต

Iterable, Iterator, Collection

์ „์ฒด์ ์ธ ๊ตฌ์กฐCollection, Iterable, Iterator์˜ ์ „์ฒด์ ์ธ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ๊ฐ Interface๋Š” ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ณ  ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ์•Œ์•„๋ณด์ž.  Iterable Iterator๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋งŒ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋‹ค. ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค๋Š” iterate ๋  ์ˆ˜ ์žˆ๋Š” sequence๋ฅผ ์˜๋ฏธํ•œ๋‹ค.iterate์˜ ์‚ฌ์ „์  ์˜๋ฏธ : (๊ณ„์‚ฐ·์ปดํ“จํ„ฐ ์ฒ˜๋ฆฌ ์ ˆ์ฐจ๋ฅผ) ๋ฐ˜๋ณตํ•˜๋‹ค public interface Iterable { public operator fun iterator(): Iterator} operator iterator ํ•จ์ˆ˜ ์•ž์— operator ํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™์–ด ์žˆ๋‹ค. operator๋Š” 1 + 3 ๊ณผ ๊ฐ™์ด ํ•จ์ˆ˜(add)๋ฅผ symbol(+)๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š”..

2024.05.21 ๊ฒŒ์‹œ๋จ

ํฌ์ŠคํŒ… ์ธ๋„ค์ผ ์ด๋ฏธ์ง€

ํ•™์Šต

Room์— ์ดˆ๊ธฐ ๊ฐ’์„ ๋„ฃ์œผ๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์„ ์ฒ˜์Œ ์„ค์น˜ํ•˜๊ฑฐ๋‚˜ ์ €์žฅ์†Œ, ์บ์‹œ๋ฅผ ์‚ญ์ œํ•œ ํ›„ ๋‹ค์‹œ ์‹คํ–‰ํ–ˆ์„ ๋•Œ Room์— ์ดˆ๊ธฐ ๊ฐ’์„ ๋„ฃ์œผ๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? ๊ณต์‹ ๋ฌธ์„œ์—์„œ ์•ˆ๋‚ดํ•˜๋Š” ์—ฌ๋Ÿฌ ๋ฐฉ๋ฒ•๊ณผ ๋ฌธ์ œ์ ์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. RoomDatabase.Callback() Room DatabaseBuilder๋ฅผ ์ด์šฉํ•ด Database๋ฅผ ์ƒ์„ฑํ•  ๋•Œ, builder์˜ addCallBack ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ RoomDatabase.Callback ํด๋ž˜์Šค๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Callback ํด๋ž˜์Šค๋Š” ์ด 3๊ฐ€์ง€ ํ•จ์ˆ˜๋กœ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. onCreate : database๊ฐ€ ์ตœ์ดˆ๋กœ ์ƒ์„ฑ๋˜๋Š” ์‹œ์ ์— ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. ๋‹จ, ๋ชจ๋“  table์ด ์ƒ์„ฑ๋œ ์ดํ›„์— ํ˜ธ์ถœ๋œ๋‹ค๋Š” ์ ์— ์ฃผ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.onOpen : database๊ฐ€ open ๋  ๋•Œ๋งˆ๋‹ค ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.onDestruc..

2024.05.18 ๊ฒŒ์‹œ๋จ

ํฌ์ŠคํŒ… ์ธ๋„ค์ผ ์ด๋ฏธ์ง€

ํ•™์Šต

Fragment์—์„œ ๋’ค๋กœ๊ฐ€๊ธฐ ๋™์ž‘ ์ปค์Šคํ…€ํ•˜๊ธฐ

๊ณต์‹ ๋ฌธ์„œ ์˜ˆ์ œFragment์—์„œ ๋’ค๋กœ๊ฐ€๊ธฐ ๋™์ž‘์„ ์ปค์Šคํ…€ํ•˜๋ ค๋ฉด Activity์— onBackPressedDispatcher๋ฅผ ๋“ฑ๋กํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. class MainPageFragment : Fragment() { ... override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) requireActivity().onBackPressedDispatcher.addCallback(this) { // Handle the back button event } ... } ...}https://developer.android.com/gui..

2024.05.04 ๊ฒŒ์‹œ๋จ

ํฌ์ŠคํŒ… ์ธ๋„ค์ผ ์ด๋ฏธ์ง€

ํ•™์Šต

EditText์—์„œ ํ•˜๋“œ์›จ์–ด ํ‚ค๋ณด๋“œ ๋Œ€์‘ํ•˜๊ธฐ with ๊ฐ€์ƒ ํ‚ค๋ณด๋“œ, ์ปค์„œ

ํ•˜๋“œ์›จ์–ด ์—”ํ„ฐ ๋˜๋Š” ๊ฐ€์ƒ ํ‚ค๋ณด๋“œ์˜ ์™„๋ฃŒ ๋ฒ„ํŠผ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’EditorInfo๋Š” ํ‚ค ์ž…๋ ฅ์„ ์™„๋ฃŒํ–ˆ์„ ๋•Œ์˜ ๋™์ž‘์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์ž…๋‹ˆ๋‹ค. EditText์˜ imeOptions attribute์—์„œ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์•„๋ฌด ๊ฒƒ๋„ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ ๊ฐ’์ธ actionDone(S23/Android14) ๋˜๋Š” actionNext(S9/Android10)๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ์™„๋ฃŒ : EditorInfo.IME_ACTION_DONE, EditorInfo.IME_ACTION_SEARCH,  EditorInfo.IME_ACTION_SEND, EditorInfo.IME_ACTION_NEXT    actionDone์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. actionSearch๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.  actionSend๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.   ์—”ํ„ฐ..

2024.05.02 ๊ฒŒ์‹œ๋จ

ํฌ์ŠคํŒ… ์ธ๋„ค์ผ ์ด๋ฏธ์ง€

ํ•™์Šต

FrameLayout์—์„œ Fragment ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ

FrameLayout์—์„œ Fragment๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์•ˆ๋“œ๋กœ์ด๋“œ ๊ณต์‹ ๋ฌธ์„œ์—์„œ Fragment๋ฅผ ์œ„ํ•œ container๋กœ FragmentContainerView ์‚ฌ์šฉ์„ ๊ฐ•๋ ฅํ•˜๊ฒŒ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.It is strongly recommended to always use a FragmentContainerView as the container for fragments, as FragmentContainerView includes fixes specific to fragments that other view groups such as FrameLayout do not provide.https://developer.android.com/guide/fragments/create#add ๊ทธ๋Ÿผ์—๋„ FrameLayout์—์„œ..

2024.05.02 ๊ฒŒ์‹œ๋จ

ํฌ์ŠคํŒ… ์ธ๋„ค์ผ ์ด๋ฏธ์ง€

TIL

240426 TIL - ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ ์ˆ™๋ จ์ฃผ์ฐจ ํŒ€ํ”„๋กœ์ ํŠธ ์™„๋ฃŒ

https://github.com/AndroidJeong/NBC_TwoOfUs GitHub - AndroidJeong/NBC_TwoOfUsContribute to AndroidJeong/NBC_TwoOfUs development by creating an account on GitHub.github.com ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ ์ˆ™๋ จ์ฃผ์ฐจ ํŒ€ํ”„๋กœ์ ํŠธ๊ฐ€ ๋๋‚ฌ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์‹ฌํ™” ์ฃผ์ฐจ(๊ฐœ์ธ ํ•™์Šต 2์ฃผ + ํŒ€ํ”„๋กœ์ ํŠธ 2์ฃผ), ์‹ค์ „ ํ”„๋กœ์ ํŠธ(6์ฃผ)๊ฐ€ ๋‚จ์•˜๋Š”๋ฐ, ์ด๋ฒˆ ํŒ€ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ๋Š๋‚€์ ์„ ์ •๋ฆฌํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. 1. ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ์—„๊ฒฉํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜์ž์ปค๋ฆฌํ˜๋Ÿผ ์ƒ์—์„œ Repository๋ฅผ ๋ฐฐ์šฐ์ง€ ์•Š์•„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์—ˆ๊ธฐ์— ์–ด์ฉ” ์ˆ˜ ์—†์ด Object class๋ฅผ ์ด์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ, ๋ฐ์ดํ„ฐ์˜ ๋ณ€ํ™”๋ฅผ ์ถ”์ ํ•˜..

2024.04.27 ๊ฒŒ์‹œ๋จ

ํฌ์ŠคํŒ… ์ธ๋„ค์ผ ์ด๋ฏธ์ง€

์ฝ”๋”ฉํ…Œ์ŠคํŠธ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ๋ชจ์Œ์‚ฌ์ „ Kotlin

https://school.programmers.co.kr/learn/courses/30/lessons/84512 ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.programmers.co.kr  ๋กœ์ง๊ฐ ์ž๋ฆฟ์ˆ˜๋Š” A E, I, O, U, ์—†์Œ ์ด 6๊ฐœ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์ „์—์„œ ๋ฌธ์ž์—ด ์‚ฌ์ด์˜ ๊ณต๋ฐฑ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ A(์—†์Œ)A์™€ ๊ฐ™์€ ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ฒฝ์šฐ์˜ ์ˆ˜ 5๋ฒˆ์งธ ์ž๋ฆฟ์ˆ˜๊นŒ์ง€ ๊ณ ์ • ์‹œํ‚ค๊ณ  ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜ = 1 4๋ฒˆ์งธ ์ž๋ฆฟ์ˆ˜ ~ = 1 + 5 3๋ฒˆ์งธ ์ž๋ฆฟ์ˆ˜ ~ = 1 + 5*1 + 5*5*1 2๋ฒˆ์งธ ์ž๋ฆฟ์ˆ˜ ~ = 1 + 5*1 + 5*5*1 + 5*5*5*1 1๋ฒˆ์งธ ์ž๋ฆฟ์ˆ˜ ~ = 1 +..

2024.04.25 ๊ฒŒ์‹œ๋จ

ํฌ์ŠคํŒ… ์ธ๋„ค์ผ ์ด๋ฏธ์ง€

์ฝ”๋”ฉํ…Œ์ŠคํŠธ

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 2๊ฐœ ์ดํ•˜๋กœ ๋‹ค๋ฅธ ๋น„ํŠธ Kotlin

https://school.programmers.co.kr/learn/courses/30/lessons/77885 ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.programmers.co.kr  ๋กœ์ง์ง์ˆ˜์ธ ๊ฒฝ์šฐ์—๋Š” 1์„ ๋”ํ•ด์คฌ๊ณ ํ™€์ˆ˜์ธ ๊ฒฝ์šฐ์—๋Š” ์˜ค๋ฅธ์ชฝ์—์„œ ์ตœ์ดˆ๋กœ ๋งŒ๋‚˜๋Š” 0 ๋น„ํŠธ์™€ ๋ฐ”๋กœ ๋’ค์— ์žˆ๋Š” 1๋น„ํŠธ๋ฅผ ๋ฐ˜์ „์‹œ์ผœ์คฌ์Šต๋‹ˆ๋‹ค. ์ˆซ์ž์˜ ๋น„ํŠธ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด string์œผ๋กœ ๋ณ€ํ™˜ํ•˜์ง€ ์•Š๊ณ , ์ˆซ์ž 2์— 2๋ฅผ ๊ณฑํ•˜๋ฉด์„œ ๊ฐ ๋น„ํŠธ๋ฅผ ํ™•์ธํ•ด์คฌ์Šต๋‹ˆ๋‹ค.๋น„ํŠธ๋ฅผ ๋ฐ˜์ „์‹œํ‚ค๊ธฐ ์œ„ํ•ด xor ์—ฐ์‚ฐ์„ ์ด์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. 2๋ฅผ ๊ณฑํ•˜๋Š” ๋Œ€์‹  shl, 2๋ฅผ ๋‚˜๋ˆ„๋Š” ๋Œ€์‹  shr ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค.class Solution { ..

2024.04.25 ๊ฒŒ์‹œ๋จ

ํฌ์ŠคํŒ… ์ธ๋„ค์ผ ์ด๋ฏธ์ง€

ํ•™์Šต

Fragment์—์„œ ViewPager2 + TabLayout ์‚ฌ์šฉํ•˜๊ธฐ

Fragment์—์„œ ViewPager2๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ ์ด์œ ๊ณต์‹ ๋ฌธ์„œ ๊ฐ€์ด๋“œ(https://developer.android.com/develop/ui/views/animations/screen-slide-2)์— ๋”ฐ๋ผ Activity์—์„œ ViewPager2๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ViewPager์— ์žˆ๋Š” Fragment์—์„œ ์ƒˆ๋กœ์šด Fragment ํ™”๋ฉด์„ ๋ณด์—ฌ์ค˜์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.  FragmentContainerView๊ฐ€ ์—†๋‹ค๋ณด๋‹ˆ, ์•„๋ž˜์™€ ๊ฐ™์ด Fragment์˜ root layout์˜ Fragment๋ฅผ ๋ฐ”๊ฟ”์ฃผ๋„๋ก ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. // Fragment ์ตœ์ƒ์œ„ Layout์— id๋ฅผ ์„ค์ •val bundle = Bundle().apply { putParcelable(BUNDLE_KEY_FOR_CONTACT_INFO..

2024.04.24 ๊ฒŒ์‹œ๋จ

ํฌ์ŠคํŒ… ์ธ๋„ค์ผ ์ด๋ฏธ์ง€

์„ค์ •

ezgif !๊ณ ์†๋ชจ๋“œ -> ScreenToGif

ezgif ezgif ํ™ˆํŽ˜์ด์ง€๋ฅผ ์ด์šฉํ•˜๋ฉด ์˜์ƒ์„ GIF๋กœ ๊ฐ„ํŽธํ•˜๊ฒŒ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ์˜์ƒ์„ ์—…๋กœ๋“œํ•˜๊ณ  ๋ณ€ํ™˜ํ•˜๋Š” ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ์ง€ ์•Š์•˜๋‚˜์š”? F12๋ฅผ ๋ˆ„๋ฅด๊ณ  Console ์ฐฝ์— !๊ณ ์†๋ชจ๋“œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ข€ ๋” ๋นจ๋ฆฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.๐Ÿ˜€ ScreenToGif ์žฅ๋‚œ์ด๊ตฌ์š”๐Ÿ˜… ezgif์ฒ˜๋Ÿผ ์˜์ƒ์„ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌด๋ฃŒ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ๊ทธ๋žจ์ธ screenToGif๋ฅผ ์ด์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค! ์•„๋ž˜ ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•ด์„œ ํ”„๋กœ๊ทธ๋žจ์„ ๋ฐ›์•„์ฃผ์„ธ์š”. ์ €๋Š” Portable์„ ์ด์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. https://www.screentogif.com/ ScreenToGif๋ฅผ ๊ทธ๋ƒฅ ์‚ฌ์šฉํ•˜๋ฉด ์†๋„๊ฐ€ ๋Š๋ฆฝ๋‹ˆ๋‹ค. GPU๋ฅผ ์ด์šฉํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” FFMPEG๋ฅผ ๋‹ค์šด๋ฐ›์•„ ์„ค์ •ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ๋งํฌ์— ์ ‘์†ํ•ด์„œ ffmpeg gpl ๋ฒ„์ „์„ ๋‹ค์šด๋ฐ›์•„ ์ฃผ..

2024.04.19 ๊ฒŒ์‹œ๋จ