๊ธฐ๋ณธ ์ฝ˜ํ…์ธ ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

๊ธ€

[Android] Fragment๋ฅผ XML ์ฝ”๋“œ๋กœ ์ƒ์„ฑํ•˜๊ธฐ

Android์—์„œ Fragment๋Š” ๋ฌด์กฐ๊ฑด Java Code๋กœ FragmentTransaction์„ ํ†ตํ•ด ๋„์šฐ๋Š” ๊ฑด ์ค„ ์•Œ์•˜๋Š”๋ฐ, ๊ฐ„๋‹จํžˆ XML๋งŒ์œผ๋กœ๋„ ๋„์šธ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ฒŒ ๋˜์–ด ๊ฐ„๋‹จํžˆ ์ ์–ด ๋ณธ๋‹ค. 1. Fragment๋ฅผ ์ƒ์†๋ฐ›๋Š” Class๋ฅผ ์ •์˜ํ•œ๋‹ค. public class DetailsFragment extends Fragment {     @BindView(R.id.tv_title) TextView mTvTitle;     public DetailsFragment() {     }     @Override     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {         View root = inflater.inflate(R.layout.fragment_details, container, false);         ButterKnife.bind(this, root);         return root;     } } fragment_details.xml ์€ ์ƒ๋žตํ•œ๋‹ค. 2. ์œ„์—์„œ ์ •์˜ํ•œ DetailsFragment๋ฅผ ์ ์žฌํ•  MainActivity์˜ layout xml ์ฝ”๋“œ๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•œ๋‹ค. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"         xmlns:tools="http://schemas.android.com/tools"         android:layout_width="match_parent"         android:layout_height="match_parent"         android:orientation="horizontal"         t
์ตœ๊ทผ ๊ธ€

[Firebase] ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์„ ์œ„ํ•œ Cloud Function ์ ์šฉ ์‚ฌ๋ก€ - 2

Firebase Cloud Functions๋ฅผ ์ ์šฉํ•˜๊ฒŒ ๋˜์—ˆ๋˜ ๋ฐฐ๊ฒฝ์„ ์ด์ „ ๊ธ€์—์„œ ์†Œ๊ฐœํ•ด๋“œ๋ฆฐ ๋ฐ”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ธ€์— ์ด์–ด Cloud Functions ์ ์šฉ๊ธฐ๋ฅผ ๊ฐ„๋‹จํžˆ ์†Œ๊ฐœํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ์ˆœ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. 1. Cloud Functions ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์ถ• 2. Cloud Functions ์ฝ”๋“œ ์ž‘์„ฑ 3. Deploy ์ข€๋” ์ƒ์„ธํ•œ ๋‚ด์šฉ์„ ์›ํ•˜์‹œ๋ฉด ํ•˜๊ธฐ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. (๋ณธ ๊ธ€์—์„œ ๋‹ค๋ฃจ๋Š” ๋‚ด์šฉ๋ณด๋‹ค ์ƒ์„ธํ•œ ๋‚ด์šฉ์„ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.) https://firebase.google.com/docs/functions/get-started https://firebase.google.com/docs/functions/database-events 1. Cloud Functions ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์ถ• ๋จผ์ € Cloud Functions์„ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ณ„๋„ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Cloud Functions์€ Node.js๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค์Œ ๋‹จ๊ณ„๊ฐ€ ์„ ํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Node.js ์„ค์น˜ (v6.11.1 recommend) npm ์„ค์น˜ Firebase CLI ์„ค์น˜ Node.js์™€ npm์„ ์„ค์น˜ํ–ˆ๋‹ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ Firebase CLI๋ฅผ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. npm install -g firebase-tools Firebase CLI๊นŒ์ง€ ์„ค์น˜๊ฐ€ ๋˜์—ˆ๋‹ค๋ฉด ์ด์ œ Firebase Cloud Functions ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ œ๊ฐ€ ๊ฐœ๋ฐœ ์ค‘์ธ ํ”„๋กœ์ ํŠธ๋Š” Android ๋ชจ๋ฐ”์ผ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ง€๊ธˆ ์ž‘์„ฑํ•˜๊ณ ์ž ํ•˜๋Š” ์ฝ”๋“œ๋Š” Android ์•ฑ์ด ์•„๋‹Œ Google Cloud ์„œ๋ฒ„์— ๋กœ๋“œ๋˜์–ด ๋™์ž‘ํ•  ์ฝ”๋“œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 1.1 ๋จผ์ € ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Firebase tool ์‚ฌ์šฉ์„ ์œ„ํ•œ ์ธ์ฆ์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค. firebase login 1.2 ์›ํ•˜๋Š” ๊ฒฝ๋กœ์— ์›ํ•˜๋Š” ์ด๋ฆ„์œผ๋กœ Directory๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

[Firebase] ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ์„ ์œ„ํ•œ Cloud Function ์ ์šฉ ์‚ฌ๋ก€ - 1

ํ˜„์žฌ Firebase์˜ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ์ ์šฉํ•˜์—ฌ ๋ชจ๋ฐ”์ผ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์•„์‹œ๋‹ค์‹œํ”ผ Firebase๋Š” ์ธ์ฆ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์Šคํ† ๋ฆฌ์ง€์™€ ๊ฐ™์€ ์—ฌ๋Ÿฌ ํ•ต์‹ฌ์ ์ธ ์„œ๋ฒ„ ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์ฃ . ๋•๋ถ„์— Client ์ฝ”๋“œ๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํžˆ Serverlessํ•œ ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์„ ํ•˜๋ฉด์„œ Firebase ์œ„๋ ฅ์— ํ•˜๋ฃจ ํ•˜๋ฃจ ๊ฐํƒ„/๊ฐ์‚ฌ(?)ํ•˜๊ณ  ์žˆ์ฃ . ๊ทธ๋Ÿฐ๋ฐ ์ง€๊ธˆ ์ œ๊ฐ€ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์œ„ ๊ธฐ๋Šฅ๋“ค๋งŒ์œผ๋กœ๋Š” ์กฐ๊ธˆ ๋ถ€์กฑํ–ˆ์Šต๋‹ˆ๋‹ค. Firebase Realtime Database๋Š” Json์„ ๋ฒ ์ด์Šค๋กœ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ์ ์œผ๋กœ ์ผ๋ฐ˜ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€๋Š” ๋‹ค๋ฅธ DB ์„ค๊ณ„๋ฅผ ์ƒ๊ฐํ•ด์•ผ ํ–ˆ๊ณ ์š”. ์ด๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ ์ •ํ•ฉ์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๋ก ์ ์œผ๋กœ๋Š” Firebase Cloud Function์„ ํ†ตํ•ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ  ๋ณธ ๊ธ€์€ Cloud Function์˜ ์ ์šฉ ์‚ฌ๋ก€๋ฅผ ์†Œ๊ฐœํ•˜๋Š” ๊ธ€์ž…๋‹ˆ๋‹ค. ์šฐ์„  ๋ณธ ์žฅ์—์„œ๋Š” Firebase๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์–ด๋–ค ๋ฌธ์ œ ์ƒํ™ฉ์„ ๋งˆ์ฃผํ–ˆ๊ณ , ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์„ ํ–‰์ ์œผ๋กœ ์–ด๋–ค ๋Œ€์•ˆ๋“ค์„ ์ƒ๊ฐํ–ˆ์—ˆ๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ๊ฒฐ๊ตญ์—๋Š” ์™œ Cloud Function์„ ์ตœ์ข… ๋Œ€์•ˆ์œผ๋กœ ์„ ํƒํ–ˆ๋Š”์ง€ ์†Œ๊ฐœํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋Š” ๋ฐ์ดํ„ฐ ์ค‘๋ณต ์ €์žฅ์€ ๊ฐ€๊ธ‰์  ํ”ผํ•ด์•ผํ•˜๊ณ , ์ด๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ •๊ทœํ™”๋ผ๋Š” ๊ฐœ๋…์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Firebase Realtime Database๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์•„๋‹Œ Mongo DB์™€ ๊ฐ™์€ Document Store์ž…๋‹ˆ๋‹ค. ์šฐ์„  ์ œ ์ž…์žฅ์—์„œ ์ด๋Ÿฐ ๊ตฌ์กฐ๋Š” ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜€๊ณ , ์ฒ˜์Œ ์ด๊ฒƒ์„ ์ ‘ํ–ˆ์„ ๋•Œ์—๋Š” ๊ฐ€๊ธ‰์  ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์œ ์‚ฌํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ ธ๊ฐ€๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Š” ์ƒ๊ฐ์ฒ˜๋Ÿผ ์‰ฝ์ง€ ์•Š์•˜๊ณ , ๊ฒฐ๊ตญ ์„ฑ๋Šฅ์„ ์œ„ํ•ด ์ผ๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘๋ณต ์ €์žฅํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. [์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•œ ์˜ˆ์ œ ์†Œ๊ฐœ] ๋ณธ ๊ธ€์—์„œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ง๋ฉดํ•œ ๋ฌธ์ œ๋ฅผ ์†Œ๊ฐœํ•˜๊ธฐ ์œ„ํ•ด User, Group์˜ ์˜ˆ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. User: ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ๋‹ด์€ ๊ฐ์ฒด G

์•„์ด์˜ ์žฌ๋Šฅ์„ ์‚ด๋ฆฌ๊ธฐ ์œ„ํ•ด ๋ถ€๋ชจ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ?

ํ•œ ์•„์ด์˜ ์ฒœ์žฌ์  ์žฌ๋Šฅ์ด ๋‚ญ๋น„๋˜๊ณ  ์žˆ๋‹ค๋Š” ์†Œ์‹์„ ์ ‘ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. http://baobao.hot-blogger.com/bbs/board.php?bo_table=blog&wr_id=3419 #_adtep ์šฐ๋ฆผ์ด๋Š” ์ดˆ๋“ฑํ•™๊ต ๋•Œ๋ถ€ํ„ฐ ๋นผ์–ด๋‚œ ๊ทธ๋ฆผ ์‹ค๋ ฅ์œผ๋กœ ์ฃผ๋ชฉ์„ ๋ฐ›์•˜๋‹ค. ๊ด€๋ จ ์ „๋ฌธ๊ฐ€๋“ค์€ ๋ชจ๋‘ ๊ทธ ์•„์ด์˜ ์žฌ๋Šฅ์„ ์ธ์ •ํ•˜์˜€์Œ์€ ๋ฌผ๋ก  ์žฅ๋ž˜๊ฐ€ ๊ธฐ๋Œ€๋˜๋Š” ์œ ๋ง์ฃผ์˜€๋‹ค. ๊ทธ๋žฌ๋˜ ์šฐ๋ฆผ์ด๋Š” 5๋…„์ด ํ˜๋Ÿฌ ์ด์ œ ๊ณ ๋“ฑํ•™์ƒ์ด ๋˜์–ด ์žˆ์—ˆ๋‹ค. 5๋…„์ด๋ž€ ์„ธ์›”๋™์•ˆ ์•„๋งˆ๋„ ์ž์‹  ๋งŒ์˜ ํ™•๊ณ ํ•œ ์„ธ๊ณ„๊ด€๊ณผ ๋ณด๋‹ค ์ •๊ตํ•œ ์‹ค๋ ฅ์œผ๋กœ ํ›จ์”ฌ ๋” ๋ฉ‹์ง„ ์ž‘ํ’ˆ์„ ๋งŒ๋“ค์–ด ์™”์„ ๊ฒƒ์ด๋ผ๊ณ  ๊ธฐ๋Œ€๋˜์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜. ์•„์ด์˜ ์žฌ๋Šฅ์€ ๊ทธ๋‹ค์ง€ ๋ฐœํœ˜๋˜์ง€ ๋ชปํ•˜์˜€๋‹ค. ์‹ค๋ ฅ๋ณด๋‹ค๋Š” ๋งˆ์Œ์ด ์ฃฝ์–ด์žˆ์—ˆ๋‹ค. ๊ณ ๋“ฑํ•™์ƒ์ธ ๊ทธ๋Š” ์—ฌ๋Š ๋‹ค๋ฅธ ๋˜๋ž˜ ์•„์ด๋“ค๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ž…์‹œ ์ค€๋น„๋ฅผ ํ•˜๊ณ  ์žˆ์—ˆ๊ณ , ๋ฏธ๋Œ€๋ฅผ ๊ฐ€๊ธฐ ์œ„ํ•ด ์ž…์‹œ ๋ฏธ์ˆ  ํ•™์›์„ ๋‹ค๋‹ˆ๊ณ  ์žˆ์—ˆ๋‹ค. ์šฐ๋ฆผ์ด๋Š” ๊ทธ๋ฆผ์„ ๋”์ด์ƒ ๊ทธ๋ฆฌ๊ธฐ ์‹ซ์–ดํ–ˆ๋‹ค. ๊ทธ ์ฒœ์žฌ์  ์žฌ๋Šฅ์„ ๋‚ญ๋น„ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. ๊ทธ ์›์ธ์€ ๋ถ€๋ชจ์˜ ์ž˜๋ชป๋œ ๊ฐ€์ด๋“œ์— ์žˆ์—ˆ๋‹ค. ๋ถ€๋ชจ๋Š” ์šฐ๋ฆผ์ด์—๊ฒŒ ๋ฏธ๋Œ€๋ฅผ ๊ฐ€๊ฒŒ๋” ๊ฐ€์ด๋“œ, ๊ฐ•์ œํ•˜์˜€๋‹ค. ๋ถ€๋ชจ์˜ ์ƒ๊ฐ์€ ๋‹จ์ˆœํ–ˆ๋‹ค. "์ž๊ธฐ๊ฐ€ ์ข‹์•„ํ•˜๋Š” ๊ทธ๋ฆผ๋งŒ ๊ทธ๋ฆฌ๋ฉด ์•„๋ฌด ๊ฒƒ๋„ ์•„๋‹ˆ๋‹ค." "๋ฏธ๋Œ€๋ฅผ ๊ฐ€์•ผํ•œ๋‹ค." 1. ๋ถ€๋ชจ๋Š” ์ „๋ฌธ๊ฐ€๊ฐ€ ์•„๋‹ˆ๋ฉฐ, ์šฐ๋ฆผ์ด์˜ ๊ทธ๋ฆผ์— ๋Œ€ํ•ด ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š” ์‹ค๋ ฅ์„ ๊ฐ–์ถ”๊ณ  ์žˆ์ง€ ์•Š๋‹ค. ์šฐ๋ฆผ์ด์˜ ๊ทธ๋ฆผ์€ ์ „๋ฌธ๊ฐ€๋“ค์ด ์ด๋ฏธ ์ธ์ •ํ•œ ๊ทธ๋ฆผ์ด๋‹ค. ๋ถ€๋ชจ๋Š” ์–ด๋–ค ๊ทผ๊ฑฐ๋กœ  "์ž๊ธฐ๊ฐ€ ์ข‹์•„ํ•˜๋Š” ๊ทธ๋ฆผ๋งŒ ๊ทธ๋ฆฌ๋ฉด ์•„๋ฌด ๊ฒƒ๋„ ์•„๋‹ˆ๋‹ค"  ๋ผ๊ณ  ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€? ์ œ 3์ž๋กœ์„œ ๋‚ด๊ฐ€ ๋ณด์ด๊ฒŒ ์ง€๊ทนํžˆ ๋ถ€๋ชจ์˜ ํŒ๋‹จ ๋ฏธ์Šค์ด๋‹ค. ๋น„์œ ํ•˜์ž๋ฉด ์šฐ๋ฆผ์ด์˜ ๊ทธ๋ฆผ ์„ธ๊ณ„๋Š” ๋ฌดํ•œํ•œ ๋ฐ”๋‹ค์ง€๋งŒ ์ด๋ฅผ ๋ฐ”๋ผ๋ณด๋Š” ๋ถ€๋ชจ๋Š” ๋™๋„ค ์šฐ๋ฌผ ์ˆ˜์ค€์ด๋‹ค. ๋™๋„ค ์šฐ๋ฌผ์ด ๋ฐ”๋‹ค๋ฅผ ์ดํ•ดํ•  ์ˆ˜๋Š” ์—†๋Š” ๋…ธ๋ฆ‡์ด๋‹ค. ๋ถ€๋ชจ๋ผ๊ณ , ๋‚˜์ด๊ฐ€ ๋งŽ๋‹ค๊ณ , ์ข€๋” ์˜ค๋ž˜ ์‚ด๊ณ  ํ˜„์‹ค์„ ๋” ์•ˆ๋‹ค๊ณ  ๊ทธ๋ฆผ ๋งˆ์ € ๋” ์ž˜ ์•ˆ๋‹ค๊ณ  ํ•  ์ˆ˜ ์—†๋‹ค. 2. ๋Œ€ํ•™์„ ๊ฐ€์•ผ๋งŒ ํ•œ๋‹ค๋Š” ๊ณ ์ • ๊ด€๋…๊ณผ ์‚ฌํšŒ ์‹œ์Šคํ…œ

๋„์„œ ๋ฆฌ๋ทฐ - ๊ธฐ์ ์˜ ์•„๋น  ์œก์•„

๋ณธ ๊ธ€์€ '๊ธฐ์ ์˜ ์•„๋น ์œก์•„'  ๋„์„œ ๋ฆฌ๋ทฐ์ž…๋‹ˆ๋‹ค. ์ €๋Š” ์˜ค๋Š” (2017๋…„) 9์›” ๋ง์— ์•„๋น ๊ฐ€ ๋  ์˜ˆ์ •์ธ, ์˜ˆ๋น„ ์•„๋น ์ž…๋‹ˆ๋‹ค. [์ด ์ฑ…์„ ์ฝ๊ธฐ ์ „์—๋Š”......] ์œก์•„๋ž€ ์ƒ๋‹นํ•œ ๊ณ ํ†ต์ด ์ˆ˜๋ฐ˜๋˜๋Š” ์ผ์ข…์˜ ๋ฌด์ผํ‘ผ ๋…ธ๋™์ด๋ž€ ์ธ์‹์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ฃผ๋ณ€ ์ง์žฅ ์„ ๋ฐฐ๋“ค์˜ ์ด์•ผ๊ธฐ๋ฅผ ๋“ค์–ด๋ด๋„ ์ง์žฅ ํ‡ด๊ทผ -  ์œก์•„ ์ถœ๊ทผ... ์• ๊ฐ€ ์ƒ๊ธฐ๋ฉด ์ž์œ  ์‹œ๊ฐ„์ด๋ž€ ํ–ฅํ›„ 10๋…„(?)์€ ์ƒ๊ฐ๋„ ํ•˜์ง€ ๋ง๋ผ๊ณ  ํ•˜๋‹ˆ ์ฒญ์ฒœ๋ฒฝ๋ ฅ์ด ์•„๋‹ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. [ํ•˜์ง€๋งŒ ์ด ์ฑ…์„ ์ฝ๊ณ  ๋‚œ ์ง€๊ธˆ์€......] ์œก์•„๋ผ๋Š” ๊ฒƒ์„ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋‚˜์˜ ๋…ธ๋™๊ณผ ๋ฌด์ž์œ ๋ผ๋Š” ๋ถ€์ •์ ์ธ ๊ฒƒ์œผ๋กœ ์น˜๋ถ€ํ•ด ๋ฒ„๋ฆฐ ์ œ ์ƒ๊ฐ์ด ์–ผ๋งˆ๋‚˜ ์งง์€ ๊ฒƒ์ธ์ง€ ๋ฐ˜์„ฑํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์œก์•„๋Š” ํ•œ๋‚ฑ ๋…ธ๋™์ด ์•„๋‹™๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ์†Œ์ค‘ํ•œ ์ƒ๋ช…์„ ๋ฐ”๋ฅด๊ฒŒ ๊ธฐ๋ฅด๋Š” ์•„์ฃผ ์ค‘์š”ํ•œ ๊ต์œก ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ๊ณ ์•ก ๊ณผ์™ธ? ์กฐ๊ธฐ ์–ดํ•™ ์—ฐ์ˆ˜? ์ดˆํ˜ธํ™” ์–ด๋ฆฐ์ด์ง‘? ๊ทธ๋Ÿฐ ๊ฒƒ๊ณผ ๋น„๊ตํ•  ์ˆ˜ ์—†์„ ์ •๋„๋กœ ์ค‘์š”ํ•œ ๊ต์œก ๊ณผ์ •์ž…๋‹ˆ๋‹ค. [์œก์•„๋Š” ๊ฒฝํ—˜์ด ์•„๋‹™๋‹ˆ๋‹ค, ์œก์•„๋„ ๊ต์œก์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.] ์œก์•„๊ฐ€ ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ ๋Š” ์žˆ์Šต๋‹ˆ๋‹ค.  ๊ทธ๋Ÿฐ๋ฐ ๊ณผ์—ฐ  ๊ตฌ์ฒด์ ์ธ ์œก์•„๋ฒ•์„ ์•Œ๊ณ  ์•„์ด๋ฅผ ํ‚ค์šฐ๋‚˜์š”? ์˜ˆ๋น„ ์•„๋น ์ธ ์ € ์—ญ์‹œ ์œก์•„์— ๋Œ€ํ•ด ๋ณ„ ์ƒ๊ฐ์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ์ •์งํ•˜๊ณ , ๋ฐ”๋ฅด๊ณ , ๊ฑด๊ฐ•ํ•˜๊ฒŒ ํ‚ค์šฐ๋ฉด ๋œ๋‹ค๊ณ  ์ƒ๊ฐ๋งŒ ํ•  ๋ฟ ๊ฑฐ๊ธฐ์—๋Š”  ๊ทธ ์ด์ƒ์˜ ๊ตฌ์ฒด์ ์ธ ๋ฌด์–ธ๊ฐ€๋Š” ์—†์ฃ . ๊ทธ๋Ÿฐ๋ฐ   ๋ฐ”๋กœ ๊ทธ ๊ตฌ์ฒด์ ์ธ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ด ์ฑ…์€ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค. [์ €๋Š” ์ด ์ฑ…์„ ์•„๋น ๋“ค๋งŒ์˜ ์ฑ…์€ ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.] ํ•„์‹œ ์ฑ… ์ œ๋ชฉ์€ ํ•ด์™ธ ์„ ์ง„๊ตญ๊ณผ๋Š” ๋‹ฌ๋ฆฌ ์œก์•„๋Š” ์—ฌ์„ฑ์˜ ๋ชซ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š”  ์šฐ๋ฆฌ์˜ ๊ทธ๋ฆ‡๋œ ๊ด€๋…์„ ํŒŒ๊ณ ๋“  ๋งˆ์ผ€ํŒ… ์ „๋žต์ด ์•„๋‹๊นŒ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ € ์—ญ์‹œ ์ด ์ฑ…์„ ์ฝ๊ณ  ์•„๋‚ด์—๊ฒŒ๋„ ์ผ๋…์„ ๊ถŒํ–ˆ์œผ๋‹ˆ๊นŒ์š”. [์ด ์ฑ…์€ ์œก์•„๊ฐ€ ์‰ฌ์›Œ์ง€๋Š” ์œก์•„ ๊ฟ€ํŒ ๊ฐ€์ด๋“œ ๋ถ์ด ์•„๋‹™๋‹ˆ๋‹ค.] ์ฝ๊ณ  ๋‚˜๋ฉด ์ž์œ  ์‹œ๊ฐ„์ด ์ƒ๊ธฐ๊ณ , ์ง์žฅ ํ‡ด๊ทผ, ๊ฐ€์ • ์ถœ๊ทผ์˜ ํŒจ๋Ÿฌ๋‹ค์ž„์ด ๋ฐ”๋€๋‹ค๊ฑฐ๋‚˜, ์œก์•„๊ฐ€ ์‰ฌ์›Œ์ง€๊ฑฐ๋‚˜ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๊ทธ๋Ÿฐ ์œก์•„

Android ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— Settings (์„ค์ •) ๊ธฐ๋Šฅ์„ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ• ๊นŒ?

๋ณธ ๊ธ€์€ Android Settings ํŽ˜์ด์ง€๋ฅผ ์ฐธ๊ณ ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Android Application์„ ๋งŒ๋“ค๋‹ค ๋ณด๋ฉด ์„ค์ • ํ™”๋ฉด์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ํ•  ์ˆ˜ ์žˆ์„ ๊นŒ์š”? ๊ฐ„๋‹จํžˆ SettingsActivity๋ฅผ ์ƒ์„ฑํ•˜๊ณ   ์—ฌ๊ธฐ์— ํ•„์š”์— ๋”ฐ๋ผ EditText, ListView, Button, CheckBox ๋“ฑ์˜ View๋ฅผ ๊ทธ๋ ค์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ View Event๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ๋ณ€๊ฒฝ๋œ ๊ฐ’์„ File, SharedPreference, ํ˜น์€ Database ๋“ฑ์— ์ €์žฅํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ Android์—์„œ๋Š” ์ข€๋” ์Šค๋งˆํŠธํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ด์ฃผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ Preference  ์ž…๋‹ˆ๋‹ค. ์„ค์ • ํ™”๋ฉด์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์œ„์™€ ๊ฐ™์ด View๋ฅผ ์ง์ ‘ ๊ทธ๋ฆฌ๋Š” ๋Œ€์‹ , Preference์™€ ๊ทธ SubClass๋“ค์„ XML์— ์ •์˜ํ•˜์—ฌ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์„ค์ • ํ™”๋ฉด์€ ListView๋กœ ๋ณด์—ฌ์ง€๋Š”๋ฐ์š”. ์ด๋•Œ ๊ฐ List ํ•˜๋‚˜์˜ ํ•ญ๋ชฉ ๋‹น ํ•˜๋‚˜์˜ ์„ค์ • ๊ฐ’์„ ์ €์žฅ/๋ณ€๊ฒฝ/๊ด€๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์•ž์„œ ์–ธ๊ธ‰ํ•œ Preference ๊ฐ์ฒด๊ฐ€ ๋ฐ”๋กœ ์ด ํ•˜๋‚˜์˜ ์„ค์ • ํ•ญ๋ชฉ์— ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. ์ฆ‰ 5๊ฐœ์˜ ์„ค์ •์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์„ค์ • ํ™”๋ฉด์„ ์œ„ํ•ด์„œ๋Š” 5๊ฐœ์˜ Preference ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฑฐ์ฃ . Preference์—๋Š” ๋Œ€ํ‘œ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ SubClass๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. CheckBoxPreference EditTextPreference ListPreference ๊ฐ ์ด๋ฆ„์„ ๋ณด์‹œ๋ฉด ์–ด๋–ค ์„ค์ • ๋ฉ”๋‰ด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์„ ๊ฒ๋‹ˆ๋‹ค. Preference๋Š” key-value ์Œ์œผ๋กœ ์„ค์ • ๊ฐ’์„ ์ €์žฅํ•˜๋ฉฐ, ๊ทธ ์ €์žฅ ๊ฐ’์€ SharedPreference์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์„ค์ • ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด ์‹œ์Šคํ…œ์€ ๊ทธ ๊ฐ’์„ SharedPreference์— ์—…๋ฐ์ดํŠธํ•˜๋ฏ€๋กœ ์„ค์ • ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ SharedPreference์— ์ ‘๊ทผํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์˜ค์ง ์„ค์ • ๊ฐ’์„ ์ฝ์–ด ์ ํ•ฉํ•œ UI๋ฅผ ๊ทธ๋ฆฌ๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด์„œ๋งŒ

WayCap - ๋”์ด์ƒ ๋„ค์Šคํ”„๋ ˆ์†Œ ์บก์Š์˜ ๋…ธ์˜ˆ๊ฐ€ ๋˜์ง€ ์•Š๊ฒ ๋‹ค!

์ „ ๋„ค์Šคํ”„๋ ˆ์†Œ ์ปคํ”ผ ๋จธ์‹ ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ํ•œ 2๋…„ ์ •๋„๋œ ๊ฒƒ ๊ฐ™๋„ค์š”. ์ฒ˜์Œ์—” "์ด๋‹ˆ์‹œ์•„ ๋ ˆ๋“œ" ์ œํ’ˆ์„ ์ด์šฉํ–ˆ์—ˆ๊ณ , ์ฒ˜์Œ์œผ๋กœ ๊ตฌ๋งคํ•˜์—ฌ ์‚ฌ์šฉํ–ˆ๋˜ ๋„ค์Šคํ”„๋ ˆ์†Œ ์ด๋‹ˆ์‹œ์•„ C40 ์ œํ’ˆ ์ตœ๊ทผ์—๋Š” "U C50" ์ œํ’ˆ์œผ๋กœ ๋ฐ”๊ฟ” ์ด์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ๊ทผ ์„ ๋ฌผ๋ฐ›์•„ ์ด์šฉํ•˜๊ฒŒ ๋œ ๋„ค์Šคํ”„๋ ˆ์†Œ ์œ  C50 ์ œํ’ˆ ๋„ค์Šคํ”„๋ ˆ์†Œ ์ปคํ”ผ ๋จธ์‹ ์„ ์ด์šฉํ•˜๊ณ  ๋‚˜์„œ ์ปคํ”ผ๋ฅผ ๋งˆ์‹œ๋Š”๊ฒŒ ์‰ฌ์›Œ์กŒ์ฃ . ์นดํŽ˜์— ๊ฐ€์„œ ์ปคํ”ผ๋ฅผ ๋งˆ์‹œ๊ธฐ ์œ„ํ•ด ์ ๊ฒŒ๋Š” 2์ฒœ์›, ํฌ๊ฒŒ๋Š” 6~7์ฒœ์› ์ง€๋ถˆํ•˜๋Š”๋ฐ, ์ด์ œ๋Š” ์ง‘์—์„œ 6~800์›์œผ๋กœ ํ•ด๊ฒฐํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋‹ˆ ์ฐธ ๋ฟŒ๋“ฏํ–ˆ์ฃ . ๊ทธ๋Ÿฐ๋ฐ ์‚ฌ์‹ค์€...... ๋งˆ๋ƒฅ ์ข‹๊ธฐ๋งŒ ํ–ˆ๋˜ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋„ค์Šคํ”„๋ ˆ์†Œ์˜ ์•„์‰ฌ์šด ์  1 ํ•œ 2๋…„์„ ๋จน๋‹ค ๋ณด๋‹ˆ ๋‹ค๋ฅธ ์ปคํ”ผ๋ฅผ ๋จน๊ณ  ์‹ถ์–ด๋„ ๋ฐฉ๋ฒ•์ด ์—†์—ˆ๋˜ ๊ฑฐ์ฃ . ๋„ค์Šคํ”„๋ ˆ์†Œ๋Š” ์ด๋ฏธ ๊ต‰์žฅํžˆ ๋‹ค์–‘ํ•œ ์ปคํ”ผ ์บก์Š์„ ํŒ๋งคํ•˜๊ณ  ์žˆ์ง€๋งŒ ๊ทธ๊ฒƒ๋งŒ์œผ๋กœ๋Š” ์ฑ„์šธ ์ˆ˜ ์—†๋Š” ๊ณตํ—ˆํ•จ? ์ž์ฃผ ๊ฐ€๋Š” ์นดํŽ˜์—์„œ ํŒ๋งคํ•˜๋Š” ์›๋‘ ๊ฐ€๋ฃจ๋กœ ์ง‘์—์„œ๋„ ์ปคํ”ผ๋ฅผ ๋‚ด์–ด ๋จน๊ณ  ์‹ถ๋‹ค๋Š” ์ƒ๊ฐ. ๋„ค์Šคํ”„๋ ˆ์†Œ ๋จธ์‹  ์‚ฌ์šฉ์ž๋กœ์„œ ์ €๋Š” "์•„๋ƒ ๋„ค์Šคํ”„๋ ˆ์†Œ๊ฐ€ ๋” ๋ง›์žˆ์–ด, ๋„ค์Šคํ”„๋ ˆ์†Œ ๋งˆ์‹œ๋ฉด ๋œ๋‹ค๊ณ !" ๋ผ๋ฉฐ ์Šค์Šค๋กœ๋ฅผ ์œ„๋กœํ–ˆ๋˜...... ๋„ค์Šคํ”„๋ ˆ์†Œ์˜ ์•„์‰ฌ์šด ์  2 ๋ช‡๊ฐœ์›”์— ๊ฑธ์ณ ๋จน๋‹ค ๋ณด๋ฉด ์–ด๋Š ์ƒˆ ํ ์บก์Š๋“ค๋กœ ๊ฐ€๋“ํ•œ ์žฌํ™œ์šฉ ์ˆ˜๊ฑฐ ๋ด‰ํˆฌ๋ฅผ ๋ฐœ๊ฒฌํ•˜๊ฒŒ ๋˜์ฃ . ์ฒ˜์Œ์—” ์ฃผ๋ฌธํ•˜๋ฉด์„œ ์ˆ˜๊ฑฐ๋ฅผ ์š”์ฒญํ–ˆ๋Š”๋ฐ, ์ง‘์— ์ œ๊ฐ€ ๋Š˜ ์žˆ๋Š” ๊ฒƒ๋„ ์•„๋‹ˆ๋‹ค ๋ณด๋‹ˆ ์ˆ˜๊ฑฐ๊ฐ€ ์•ˆ๋˜๋”๋ผ๊ณ ์š”. ๊ฒฐ๊ตญ ์“ฐ๋ ˆ๊ธฐ ๋ด‰ํˆฌ์— ๋ฒ„๋ ค์กŒ์ฃ . ํ•ญ์ƒ ๋ณด๋ฉด์„œ ์•„๊น๋‹ค ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ž‘์€ ์ปคํ”ผ ํ•œ ์ž” ๋จน๊ฒ ๋‹ค๊ณ  ์ €๋ ‡๊ฒŒ ์บก์Š์„ ํ•˜๋‚˜์”ฉ ๋ฒ„๋ ค์•ผ ํ•˜๋‹ค๋‹ˆ. ๊ทธ๋Ÿฌ๋˜ ์ž‘๋…„ ๊ฐ€์„ ์ฏค์ด์—ˆ๋‚˜์š”? Indiegogo ๋ผ๋Š” ํฌ๋ผ์šฐ๋“œ ํŽ€๋”ฉ ์‚ฌ์ดํŠธ์—์„œ ์–ด๋Š ํ•œ ์ œํ’ˆ์ด ์ œ ๋ˆˆ๊ธธ์„ ์‚ฌ๋กœ ์žก์•˜์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์ด WAYCAP ์ด๋ผ๋Š” ์ œํ’ˆ์ธ๋ฐ์š”.