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

์ „์ฒด ๊ธ€

(407)
์นด์นด์˜ค ์ฝ”๋”ฉํ…Œ์ŠคํŠธ - ์••์ถ• ๋ฌธ์ œ2. ์••์ถ• ์‹ ์ž…์‚ฌ์› ์–ดํ”ผ์น˜๋Š” ์นด์นด์˜คํ†ก์œผ๋กœ ์ „์†ก๋˜๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์••์ถ•ํ•˜์—ฌ ์ „์†ก ํšจ์œจ์„ ๋†’์ด๋Š” ์—…๋ฌด๋ฅผ ๋งก๊ฒŒ ๋˜์—ˆ๋‹ค. ๋ฉ”์‹œ์ง€๋ฅผ ์••์ถ•ํ•˜๋”๋ผ๋„ ์ „๋‹ฌ๋˜๋Š” ์ •๋ณด๊ฐ€ ๋ฐ”๋€Œ์–ด์„œ๋Š” ์•ˆ ๋˜๋ฏ€๋กœ, ์••์ถ• ์ „์˜ ์ •๋ณด๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ๋ณต์› ๊ฐ€๋Šฅํ•œ ๋ฌด์†์‹ค ์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ์–ดํ”ผ์น˜๋Š” ์—ฌ๋Ÿฌ ์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘์—์„œ ์„ฑ๋Šฅ์ด ์ข‹๊ณ  ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•œ LZW(Lempel–Ziv–Welch) ์••์ถ•์„ ๊ตฌํ˜„ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. LZW ์••์ถ•์€ 1983๋…„ ๋ฐœํ‘œ๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ, ์ด๋ฏธ์ง€ ํŒŒ์ผ ํฌ๋งท์ธ GIF ๋“ฑ ๋‹ค์–‘ํ•œ ์‘์šฉ์—์„œ ์‚ฌ์šฉ๋˜์—ˆ๋‹ค. LZW ์••์ถ•์€ ๋‹ค์Œ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค. ๊ธธ์ด๊ฐ€ 1์ธ ๋ชจ๋“  ๋‹จ์–ด๋ฅผ ํฌํ•จํ•˜๋„๋ก ์‚ฌ์ „์„ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. ์‚ฌ์ „์—์„œ ํ˜„์žฌ ์ž…๋ ฅ๊ณผ ์ผ์น˜ํ•˜๋Š” ๊ฐ€์žฅ ๊ธด ๋ฌธ์ž์—ด w๋ฅผ ์ฐพ๋Š”๋‹ค. w์— ํ•ด๋‹นํ•˜๋Š” ์‚ฌ์ „์˜ ์ƒ‰์ธ ๋ฒˆํ˜ธ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , ์ž…๋ ฅ์—์„œ w๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค. ์ž…๋ ฅ..
FloatingActionButton ๊ตฌํ˜„ dependencies ์ถ”๊ฐ€ implementation 'com.google.android.material:material:1.3.0' activity anim fab_open fab_close java FloatingActionButton fab_main, fab_sub1, fab_sub2; Animation fab_open, fab_close; boolean isFabOpen = false; fab_main = (FloatingActionButton) findViewById(R.id.fab_main); fab_sub1 = (FloatingActionButton) findViewById(R.id.fab_sub1); fab_sub2 = (FloatingActionButton) findViewById(R...
๋‹น๊ฒจ์„œ ์ƒˆ๋กœ๊ณ ์นจ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ํ•˜๊ธฐ swiperefreshlayout์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•œ๋‹ค. implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0" ์ƒˆ๋กœ๊ณ ์นจํ•  ๋ทฐ (๋ณดํ†ต ๋ฆฌ์ŠคํŠธ๋ทฐ, ๊ทธ๋ฆฌ๋“œ๋ทฐ, ๋ฆฌ์‚ฌ์ดํด๋Ÿฌ๋ทฐ)๋ฅผ SwipeRefreshLayout๋กœ ๊ฐ์‹ธ์ค€๋‹ค. //์ƒˆ๋กœ๊ณ ์นจํ•  ๋ทฐ ๋ฆฌ์Šค๋„ˆ์•ˆ์— ์ƒˆ๋กœ๊ณ ์นจ ์‹คํ–‰์‹œ ๋ฐ”๋€” ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค. final SwipeRefreshLayout refreshLayout = (SwipeRefreshLayout) findViewById(R.id.refresh_layout); refreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @Override public void ..
Activity ์ƒ๋ช…์ฃผ๊ธฐ ์•กํ‹ฐ๋น„ํ‹ฐ๋Š” ์ƒํƒœ ๋ณ€ํ™”(์‹œ์Šคํ…œ์ด ์•กํ‹ฐ๋น„ํ‹ฐ๋ฅผ ์ƒ์„ฑ, ์ค‘๋‹จ, ๋‹ค์‹œ ์‹œ์ž‘, ์ข…๋ฃŒ ๋“ฑ)๋ฅผ ์•Œ์•„์ฐจ๋ฆด ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ ์ฝœ๋ฐฑ์„ ์ œ๊ณตํ•œ๋‹ค. onCreate() ์‹œ์Šคํ…œ์ด ์•กํ‹ฐ๋น„ํ‹ฐ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ๊ฒƒ์œผ๋กœ ํ•„์ˆ˜์ ์œผ๋กœ ๊ตฌํ˜„ํ•ด์•ผํ•œ๋‹ค. onStart() ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ํ™”๋ฉด์— ๋ณด์ด๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค. onResume() ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ํ™”๋ฉด์ƒ์— ๋ณด์—ฌ์ง€๊ฒŒ ๋˜๋ฉด์„œ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์–ด๋– ํ•œ ๋™์ž‘๋„ ๋ฐ›์ง€ ์•Š์•˜์„ ๋•Œ ํ˜ธ์ถœ๋œ๋‹ค. ๋ฐฉํ•ด๋˜๋Š” ์ด๋ฒคํŠธ(ex. ์ „ํ™”, ๋‹ค๋ฅธ ์•กํ‹ฐ๋น„ํ‹ฐ๋กœ ์ด๋™, ๊ธฐ๊ธฐํ™”๋ฉด์ด ๊บผ์ง)๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์•กํ‹ฐ๋น„ํ‹ฐ๋Š” onPause()๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. onPause() ์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๋‹น ์•กํ‹ฐ๋น„ํ‹ฐ๋ฅผ ๋‹ค๋ฅธ ์•กํ‹ฐ๋น„ํ‹ฐ๋กœ ์ „ํ™˜ ์‹œํ‚ฌ ๋•Œ ๋ณด๋‚ด๋Š” ์ฒซ๋ฒˆ์งธ ์‹ ํ˜ธ์ด๋‹ค. ์•กํ‹ฐ๋น„ํ‹ฐ๊ฐ€ ํฌ๊ทธ๋ผ์šด๋“œ์— ์žˆ์ง€ ์•Š๊ฒŒ ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.(์‚ฌ์šฉ์ž๊ฐ€ ๋ฉ€ํ‹ฐ ์œˆ๋„์šฐ ๋ชจ๋“œ์— ์žˆ์„ ๊ฒฝ์šฐ..
์•ˆ๋“œ๋กœ์ด๋“œ 4๋Œ€ ์ปดํฌ๋„ŒํŠธ ์•ˆ๋“œ๋กœ์ด๋“œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ปดํฌ๋„ŒํŠธ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ์˜ 4๋Œ€ ์ปดํฌ๋„ŒํŠธ 1. ์•กํ‹ฐ๋น„ํ‹ฐ(Activity) 2. ์„œ๋น„์Šค(Service) 3. ๋ฐฉ์†ก ์ˆ˜์‹ ์ž (BroadCast Receiver) 4. ์ฝ˜ํ…ํŠธ ์ œ๊ณต์ž (Content Provider) - ๊ฐ ์ปดํฌ๋„ŒํŠธ๋“ค์€ ํ•˜๋‚˜์˜ ๋…๋ฆฝ์ ์ธ ํ˜•ํƒœ๋กœ ์กด์žฌํ•œ๋‹ค. - ๊ฐ ์ปดํฌ๋„ŒํŠธ๋“ค์€ ๊ณ ์œ ์˜ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. - ๊ฐ ์ปดํฌ๋„ŒํŠธ๋“ค์€ ์ธํ…ํŠธ๋ฅผ ํ†ตํ•ด ์„œ๋กœ ์ƒํ˜ธ์ž‘์šฉํ•œ๋‹ค. 1. ์•กํ‹ฐ๋น„ํ‹ฐ(Activity) ์•กํ‹ฐ๋น„ํ‹ฐ๋Š” ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉ์„ ๋‹ด๋‹นํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค. ์ฆ‰ UI ํ™”๋ฉด์„ ๋‹ด๋‹นํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ์ด๋‹ค. - ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜ ์ด์ƒ์˜ ์•กํ‹ฐ๋น„ํ‹ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค. - ๋‘๊ฐœ์˜ ์•กํ‹ฐ๋น„ํ‹ฐ๋ฅผ ๋™์‹œ์— ๋ณด์—ฌ์ค„ ์ˆ˜ ์—†๋‹ค. - ๋‹ค๋ฅธ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์•กํ‹ฐ๋น„ํ‹ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. - ์•กํ‹ฐ๋น„ํ‹ฐ ๋‚ด์—์„œ..
Toolbar ๊ฒ€์ƒ‰๋ฒ„ํŠผ ๋งŒ๋“ค๊ธฐ Toolbar์•ˆ์— ๊ฒ€์ƒ‰๋ฒ„ํŠผ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฒ€์ƒ‰๋ฒ„ํŠผ์„ ๊ตฌํ˜„ํ•˜๊ธฐ์ „์— ์•ก์…˜๋ฐ”๋ฅผ ์—†์• ๊ณ  toolbar๋ฅผ ๋งŒ๋“ค์–ด์ค˜์•ผํ•ฉ๋‹ˆ๋‹ค. activity_main.xml Toolbar๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด res/menu/search_menu.xml์„ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ๊ฒ€์ƒ‰์•„์ด์ฝ˜์„ ๋„ฃ์Šต๋‹ˆ๋‹ค. MainActivity.java toolbar๋ฅผ ์„ค์ •ํ•ด์ฃผ๊ณ  ๊ฒ€์ƒ‰๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); //๋ฉ”๋‰ด ์ƒ์„ฑํ•˜๋Š” onCreateOptionsMenu @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); //search_..
Retrofit2 + Okhttp3 Retrofit2 Retrofit์€ Square์‚ฌ์—์„œ ๋งŒ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•˜๋ฉฐ ์‘๋‹ต์†๋„๊ฐ€ ๋น ๋ฅธ๊ฒƒ์ด ์žฅ์ ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜ ์‚ฌ์ง„์„ ๋ณด๋ฉด Retrofit์ด ๊ฐ€์žฅ ๋น ๋ฅธ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Okhttp3 Retrofit์€ ๊ธฐ๋ณธ์ ์œผ๋กœ Okhttp๋ฅผ ๋„คํŠธ์›Œํ‚น ๊ณ„์ธต์œผ๋กœ ํ™œ์šฉํ•˜๋ฉฐ ๊ทธ ์œ„์— ๊ตฌ์ถ•๋ฉ๋‹ˆ๋‹ค. OkHttp๋Š” ์ด๋ฏธ Retrofit2 ๋ชจ๋“ˆ์˜ ์ข…์†์„ฑ์— ํฌํ•จ๋˜์–ด ์žˆ์–ด, ๋ณ„๋„์˜ OkHttp ์„ค์ •์ด ํ•„์š”ํ•˜๋‹ค๋ฉด Retrofit2์—์„œ OkHttp ์ข…์†์„ฑ์„ ์ œ์™ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋ฒ• mysql๊ณผ php๋ฅผ ์ด์šฉํ•˜์—ฌ ์„œ๋ฒ„ ๊ตฌ์ถ•์„ ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๋กœ๊ทธ์ธ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ์œ„ํ•ด userํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์–ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. CREATE TABLE `USER` ( `userID` VARCHAR(20) ..