์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- ๊นํ๋จ
- ์นํผ๋ธ๋ฆฌ์ฑ
- ๋ ์
- ComputerScience
- ๋ง์ผ๋ด๊ฐ์ธ์์๋ค์์ฐ๋ค๋ฉด
- ๋ฐ์ํ
- ์๋ฐ
- ์นํ์ด์ง๋ง๋ค๊ธฐ
- Java
- ์ฝ๋ฉ
- ์ฅํธ์์ค
- css
- database
- ์ปดํจํฐ๊ณผํ
- html
- Python
- K๋ฐฐํฐ๋ฆฌ๋ ๋ณผ๋ฃจ์
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- K๋ฐฐํฐ๋ฆฌ
- ํ๋ก๊ทธ๋๋ฐ
- ์๋ฐ์คํฌ๋ฆฝํธ
- ์ค๋ผํด
- JavaScript
- ๋ผํ๋ผ์ค์๋ง๋
- ๊น๋ฏธ๊ฒฝ
- ํ์ด์ฌ
- ๊ฐ๋ฐ
- ๊น๋ฏธ๊ฒฝ์๋งํ์์
- ์ฑ
- ์ํ
- Today
- Total
๋ชฉ๋กfull stack/์๋๋ก์ด๋ (26)
JiYoung Dev ๐ฅ
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cTxpAy/btso6Ti4xvE/HmBmVynbl7ZkaqA1gEaY20/img.png)
Thread ํ์ ์ค๋ ๋ ์ ์ฅ ์ปดํจํฐ ์์ ์ CPU๊ฐ ํจ. CPU๋ ํ๋ฒ์ ํ๋์ ์ผ์ฒ๋ฆฌ๋ฅผ ํจ ์์ ์ค์ผ์ฅด๋ง์ ํตํด ๋ฉํฐ ์ค๋ ๋๋ฅผ ๊ฐ๋ฅํ๊ฒ ํจ → ์๋ถํ ์์คํ ์ค๋ ๋ ๋ผ์ดํ์ฌ์ดํด (์ค๋ ๋ ์๋ช ์ฃผ๊ธฐ) ์ฒซ๋ฒ์งธ ์ค๋ ๋๋ ๋๋ฒ์งธ ์ค๋ ๋์๊ฒ ์๋ณด : yeild ๋๋ฒ์งธ ์ค๋ ๋๋ ์ฒซ๋ฒ์งธ ์ค๋ ๋์ cpu๋ ๊ฐ๋ก์ฑ : interupt start(), run(), yeild(), interupt(), sleep() ๋ฑ์ ๋ฉ์๋๋ก ๊ตฌํ์ด ๋์ด ์์ ์ค๋ ๋1 ์์ ํ ๋ค์ ์คํ๋ ๋๋ run() ์ํ๋ก ์คํ๋จ(๋ค์ start() X) Handler ์๋๋ก์ด๋์์ ์ฐ๋ ๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ Handler๊ฐ ํ์ํจ ์๋๋ก์ด๋ ์ดํ์ ์คํ์ํค๋ฉด Task๊ฐ ์์ฑ๋๊ณ ๊ทธ ์์ activity๋ค์ด ์์ด๋ ๊ตฌ์กฐ ์๋๋ก์ด๋๋ ์ดํ์ ์ฌ๋ฌ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bpl8IT/btspeHOKXkY/XTAA1K0KKTkdsVMoHnXoh0/img.png)
1. Templete.xml ํ์ผ์ ์ค๋ฅธ์ชฝ ํก ์ถ๊ฐ โ ์ค์! ๊ฐ์ ํ์ผ์ ์ถ๊ฐํ ๊ฒ 2. ํ์ฌ ๋ก๊ทธ์ธํ ID๋ฅผ adapter์ ์์ฑ์๋ก ์ ๋ฌ => ๋ฉ์์ง ์ฃผ์ธ 3. adapter ํด๋์ค์ onBindView ๋ฉ์๋์์ data.get(position).name (๋ฉ์์ง ์ฃผ์ธ)๊ณผ ์์ฑ์๋ก ์ ๋ฌ๋ id๋ฅผ ๋น๊ต 4. ์ผ์นํ๋ค๋ฉด ์ผ์ชฝ๋ทฐ๋ gone, ์ค๋ฅธ์ชฝ ๋ทฐ๋ visible tip! ํ ํ๋ฆฟ์ ๋ทฐ๊ฐ ์ถ๊ฐ๋์ผ๋ viewHolder๋ ์์ ์ด ํ์
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/4g0jW/btso5sl4aSa/wtumuGIM2iDDEyXa4tHXLK/img.png)
๋ฐฐํฌ(apk) ๋ค์ด๋ก๋ ํ ์๋ฎฌ๋ ์ดํฐ์ ๋์ด๋ค ๋์ผ๋ฉด ๋ค์ด๋ฐ์์ง ์ดํ ์ด๋ฆ ๋ฐ๊พธ๊ธฐ ์ดํ ์์ด์ฝ ๋ฐ๊พธ๊ธฐ
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/b6H9jL/btsoTmFTe8D/dLrd6voS1GtkVkKOac3uKK/img.png)
FireBase DataBase ๊ฐ์ฒด ๊ฐ์ ธ์ค๊ธฐ // Write a message to the database //App์ ์ฐ๊ฒฐ๋์ด ์๋ FireBase DataBase ๊ฐ์ฒด ๊ฐ์ ธ์ค๊ธฐ val database = Firebase.database DataBase ๊ฒฝ๋ก ๊ฐ์ ธ์ค๊ธฐ //DataBase ๊ฒฝ๋ก ๊ฐ์ ธ์ค๊ธฐ val myRef = database.getReference("message") Data ์ถ๊ฐ myRef.push().setValue(KakaoVO(R.drawable.img2, "๋", "๋ญ๋จน์๋ญ", "์ค์ 10:30")) push : ๋๋คํ ๋ฌธ์์ด๋ก key๊ฐ์ ์ค์ ๊ฐ์ key๊ฐ์ผ๋ก ๋ฐ์ดํฐ ๋ฃ์ผ๋ฉด ๋ฐ์ดํฐ๊ฐ ๊ฐฑ์ ๋จ (์ถ๊ฐX) DataBase ๋ฐ์ดํฐ ๋ถ๋ฌ์์ ์ฝ๊ธฐ myRef.addChildEventLis..
์ ์ฅํ๋ ค๋ ํค-๊ฐ ์ปฌ๋ ์ ์ด ๋น๊ต์ ์์ ๊ฒฝ์ฐ SharedPreferences API๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. SharedPreferences ๊ฐ์ฒด๋ ํค-๊ฐ ์์ด ํฌํจ๋ ํ์ผ์ ๊ฐ๋ฆฌํค๋ฉฐ ํค-๊ฐ ์์ ์ฝ๊ณ ์ธ ์ ์๋ ๊ฐ๋จํ ๋ฉ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ฐ SharedPreferences ํ์ผ์ ํ๋ ์์ํฌ์์ ๊ด๋ฆฌํ๋ฉฐ ๋น๊ณต๊ฐ์ด๊ฑฐ๋ ๊ณต์ ์ผ ์ ์์ต๋๋ค. SharedPreferences ์์ฑ //url๊ฐ ์ ์ฅํ๊ธฐ (SharedPreference -> ๋ด๋ถ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ -> ๋ชจ๋ fragment์์ ์ฌ์ฉ๊ฐ๋ฅ) // - editor ์ฌ์ฉ // ์๋ ๋ก๊ทธ์ธ์ ํ์ฉ ๊ฐ๋ฅ!! (์ดํ์ ๊บผ๋ ๊ณ์ ์ ์ฅ๋จ) val spf = requireActivity().getSharedPreferences("mySPF",Context.MODE..
Handler ์ฌ์ฉ package com.sjy.fragment import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.os.Handler class IntroActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_intro) val handler = Handler() //postDelayed(๋ญํ ๊ฑด์ง(action), ๋๋ ์ด์๊ฐ(ms)..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/viu5F/btsoYUvwTxR/F6Wdd4NJttUDHbwp4zPJz0/img.png)
ํฐํธ ๋ค์ด๋ก๋ ํ font ๋ฆฌ์์ค ํด๋ ๋ง๋ค์ด์ ์ ์ฅ font resource file ์์ฑ(.xml) ์์ฑ๋ช : font family
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/ceJjXr/btsoToCoIcZ/7NeLNkNwDMZHAxfxdAYxL1/img.png)
ํ๋๊ทธ๋จผํธ(Fragment) https://developer.android.com/guide/components/fragments?hl=ko ํ๋๊ทธ๋จผํธ | Android ๊ฐ๋ฐ์ | Android Developers A Fragment represents a behavior or a portion of user interface in an Activity. You can combine multiple fragments in a single activity to build a multi-pane UI and reuse a fragment in multiple activities. You can think of a fragment as a modular section developer.android.com ํ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/lZSJn/btsoGfOcoyv/uRIxTReyTETlagI5tMdXoK/img.png)
MainActivity package com.sjy.pokemon import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.util.Log import android.widget.Toast import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView import com.android.volley.Request import com.android.volley.RequestQueue import com.android.volley.toolbox.StringRequest import com.a..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/mPK4z/btsonmenT4h/IHQv1hqHLZkqWCcTqVokjk/img.png)
๋ฐ๋ณต๋๋ ๋ ์ด์ด ์คํฌ๋กค ArrayList → ๋ฐ์ดํฐ์ ์๋์ ์ ์ ์์ ๋ ์ฌ์ฉ ๋ฐฐ์ด → ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ๊ณ ์ ๋์ด ์์ ๋ (๋ฐ์ดํฐ์ ์๋์ด ์ ํด์ ธ ์์ ๋) ๋ฌด์กฐ๊ฑด ArrayList๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ ๊ฒ์ ์๋! RecyclerView ์๋ฆฌ RecyclerView๋ ํ๋ฉด ํฌ๊ธฐ์์ ์ข๋ ์ฌ์ ์๊ฒ ๋ณต์ฌ ํ ์คํฌ๋กค์ ์ฌ๋ฆฌ๋ฉด view๋ฅผ ์ฌํ์ฉ → view๋ฅผ ์ฌํ์ฉํ๊ณ ๋ฐ์ดํฐ๋ง ์ ๋ฐ์ดํธํ๊ธฐ ๋๋ฌธ์ ์๋๊ฐ ๋น ๋ฆ ListView๋ ๋ฐ์ดํฐ๊ฐ 100๊ฐ๋ฉด ํ ํ๋ฆฟ๋ 100๊ฐ → ๋ฐ์ดํฐ๊ฐ ๋ง์์ง์๋ก ๋ถ๋ฌ์ค๋ ์๋๊ฐ ๋๋ ค์ง Recycler View๋ ์๋๋ก์ด๋ ์ฑ์์ ๋ฆฌ์คํธ์ ๊ทธ๋ฆฌ๋์ ๊ฐ์ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ํ์ํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ทฐ(View) ๊ทธ๋ฃน์ ๋๋ค. ๊ธฐ์กด ListView์ ๋ฌธ์ ์ ์ ๊ฐ์ ํ๊ณ ์ฑ๋ฅ์ ํฅ์์ํค..