๋ชฉ๋กDEVELOPE (113)
๐ฑ dreaming DiNO
TTP๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ฐฉ์์ ํํ REST api ๋ฅผ ์ด์ฉํ ๋ฐ์ดํฐ ๊ตํ ๋ฐฉ์์ด๋ผ๊ณ ๋งํ๋ค. ํ๋ ๋คํธ์ํฌ ์์ฅ์์ ๊ฐ์ฅ ๋ง์ ํฌ์ ์ ์ฐจ์งํ๊ณ ์๋ ๋ฐฉ์์ด๊ธฐ ๋๋ฌธ์ ํด๋น ๋ฐฉ์์ ์ ์๊ณ ์์ด์ผ ํ๋ค. REST ๋? REST ๋ Representational State Transfer ์ ์ค์๋ง์ด๋ค. ํด์ํ๋ฉด "ํํ์ ํตํ ์ํ ์ ๋ฌ" ์ ๋๋ก ๋ณผ ์ ์๋ค. REST๋ฅผ ์ ์ค๋ช ํ ์ ์๋ ํด์์ "ํํ(์์, ๊ฒฐ๊ณผ์ ํํ๋ฐฉ์)์ ๋ฐ๋ฅธ ์ํ์ ์ ๋ฌ" ์ด ๋ ์ ํํ ๊ฒ ๊ฐ๋ค. HTTP URI(Uniform Resource Identifier)๋ฅผ ํตํด ์์์ ๋ช ์(์์) ํ๊ณ , HTTP Method(POST, GET, PUT, DELETE)๋ฅผ ํตํด ํด๋น ์์์ ๋ํ CRUD Operation..
127.0.0.1 localhost 192.68.0.x (์ฌ์คip) ๋ชจ๋ ๊ฐ์๊ฑฐ ์๋๊ฐ? ๋ผ๊ณ ์๊ฐํ๊ธฐ ์ฝ์ง๋ง, ์ฌ์ค ์กฐ๊ธ์ฉ ์ฐจ์ด๊ฐ ์์ต๋๋ค. ์์์ผํ ๊ฐ๋ loopback ๊ณต์ธ IP ์ฌ์ค IP ๊ฐ๋จํ๊ฒ ์ค๋ช ํ์๋ฉด, loopback์ ํธ์คํธ์ ํ ๋น๋ ์์ดํผ๋ฅผ ์๋ฏธํฉ๋๋ค. ์ฆ, ๋ด๊ฐ ๊ฐ๊ณ ์๋ ๋ ธํธ๋ถ์์ localhost ๋๋ 127.0.0.1๋ก ์๋ฒ๋ฅผ ๋์ธ ๊ฒฝ์ฐ ์๋ฒ๋ฅผ ๋์ด ๋ ธํธ๋ถ์์๋ง ์ ์์ด ๊ฐ๋ฅํฉ๋๋ค. ํธ๋ํฐ์์ localhost ๋๋ 127.0.0.1๋ก ์๋ฒ๋ฅผ ๋์ธ ๊ฒฝ์ฐ ํธ๋ํฐ์์๋ง ์ ์์ด ๊ฐ๋ฅํฉ๋๋ค. ์ฌ์คIP์ ๊ฒฝ์ฐ์๋ ๊ฐ์ ๋์ญ์ ์ฌ์ค IP๋ฅผ ํ ๋น๋ฐ์ ๋ชจ๋ ๊ธฐ๊ธฐ์์ ์ ์์ด ๊ฐ๋ฅํฉ๋๋ค. ๋จ, ๊ฐ์ ๋์ญ์ ์ฌ์ค IP์ ๋ถ์ด์์ง ์์๊ฒฝ์ฐ (์ฝ๊ฒ ๋งํด์, ๊ฐ์ ์์ดํ์ด์ ๋ถ์ด์์ง ์์ ๊ฒฝ์ฐ)์๋ ์ ์์ด..
Retrofit : (๊ธฐ๊ณ ์์ ์๋ ์๋ ๋ถํ ๋ฑ์) ์๋ก ์ฅ์ฐฉํ๋ค / ๋ฃ๋ค / ์ ๊ณตํ๋ค ์๋๋ก์ด๋์์์ Retrofit : ์๋ฒ์์ HTTP ํต์ ์ ํตํด ์ ๋ฌ๋ ๋ฐ์ดํฐ๋ฅผ ์ฑ์์ ํน์ ํํ๋ก ๋ฐ์๋ณผ ์ ์๊ฒ ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ ํธ๋กํ์ ํ ๋ฌธ์ฅ์ผ๋ก ์ ์ํ๋ผ๊ณ ํ๋ฉด ์๋ฒ์ HTTP ํต์ ์ ํด์, ์๋ฒ๋ก๋ถํฐ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฑ์์ ์ถ๋ ฅํด ์ฌ์ฉ์๊ฐ ๋ณผ ์ ์๊ฒ ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ผ๋ฐ์ ์ธ ์ฑ์ ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ๋คํธ์ํฌ ํต์ ์ผ๋ก ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ๊ณ ์ด ์ ๋ณด๋ฅผ ํ๋ฉด์ ๋ฟ๋ฆฌ๊ธฐ๋ ํ๋ฉฐ, ์ ๋ ฅ๋ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๋ฑ์ ๊ธฐ๋ฅ๋ค์ด ๊ตฌํ๋ผ ์๋ค. ์ด๊ฑธ ๋คํธ์ํน ๊ธฐ๋ฅ์ด๋ผ๊ณ ํ๋ค. ์์ฆ์ ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ณผ์ ์์ REST API๋ผ๋ ๋ฐฉ์์ ์จ์ ๋คํธ์ํฌ ํต์ ์ ํ๋ค๊ณ ํ๋ค. AsyncTask์ HttpURLCon..

// letํจ์์ ์ฌ์ฉ๋ฒ -> if (null X) ์์ ๋๋ค์ ์คํํด๋ผ! val email : String?= "mia@naver.com" email?.let { println("My email is ${email}") } NunNull -> something ์ผ๋ก ์ด๊ธฐํ null ์ด๋ผ ์์ letํจ์ ๋๋ค์์ด ์์ ์คํ์ด ์๋์ ์๋ฌด ๋ฐ์์ด ์๋๊ฒ! (ํด๊ฒฐ^ใ ^) fun let(){ // ? ์ฌ์ฉ๋ฒ var name : String? = "mia" // null์ด๋ฉด mia๋ก ์ด๊ธฐํ name?.let{ println(it) } // for๋ฌธ ์ฌ์ฉ๋ฒ val students = arrayListOf("mia", "jino", "ted", "hoxvi") for (name in students) { print..

Android Spring ์ฐ๋ ํ์์ฑ

๐ฅบ ์๋ฌ ๋ฐ์ : ์ํ ๊ถํ ์ถ๊ฐํ๋ ค๊ณ Manifest.xml permission ์ถ๊ฐ, build.gradle (:app) ์ jitpack.io ์ dependency ์ถ๊ฐํ๊ณ ์ฑํฌ ๋ง์ถ๋ ์๋์ ๊ฐ์ Error ๋ฐ์! A problem occurred evaluating project ':app'. > Build was configured to prefer settings repositories over project repositories but repository 'maven' was added by build file 'app/build.gradle' ๐ ์๋ฌ ํด๊ฒฐ settings.gradle (Project๋ช ) ์์ ์์ ๊ฐ์ด ๋ณ๊ฒฝ ํ Sync ๋ง์ถ๋ ํด๊ฒฐ

MVVM - Model, View, ViewModel MVVM ์ ๊ฐ๋ ์ ๊ธฐ์ด๋ PM(Presentation Model - ๋งํดํ์ธ๋ฌ์ ์ ์)์ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด ์ก๋ค. PM ์ View์ ๋ ๋๋ง์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ฒด์ด๊ณ , View ๋ PM ์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ ๋๋งํ๋ค. PM ์ ์ค์ํ ํฌ์ธํธ๋ PM ์ด ๋ค๊ณ ์๋ ๋ฐ์ดํฐ์ View๋ ํญ์ ๋๊ธฐํ๊ฐ ๋์ด์ผํ๋ค๋ ๊ฒ. ์ฌ๊ธฐ์ ํ์ PM ์ ViewModel ์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ๋ช ๋ช ํ๋ฉด์ MVVM์ด ํ์ํ๋ค. ์ ์ฒด ์์ ์ UI ๋ก์ง ์์ ๊ณผ ๋น์ฆ๋์ค ๋ก์ง ์์ ์ผ๋ก ๋๋ ์ ์๋ค. ์ด๋ ๊ฒ ๋๋์ด์ง ์์ ์ ๋์์ธ์ ํนํ๋ UI ๊ฐ๋ฐ์๋ UI์ชฝ์ ๋ด๋นํ๊ณ , ๋น์ฆ๋์ค ๋ก์ง์ ํนํ๋ ๊ฐ๋ฐ์๋ ๋๋จธ์ง ๋ถ๋ถ์ ๋ด๋นํ ์ ์๋๋ก ํ๊ธฐ ์ํด์ ๋๋์ด์๋ค. MVV..

package com.example.database; import androidx.appcompat.app.AppCompatActivity; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends AppCompatActivity { EditText editText; EditText editText2; T..