java
-
[Java] JUnit5์ด๋? JUnit ํ ์คํธ ๋ฐฉ๋ฒAndroid/Java 2021. 1. 13. 20:11
์ด ๊ธ์ "์จ๋ผ์ธ ์๋ฐ ์คํฐ๋ ๋ด์ฉ"์ ์ ๋ฆฌํ ๊ธ์ ๋๋ค. JUnit5๋? JUnit์ ์๋ฐ ํ๋ก๊ทธ๋๋ฐ์ฉ ๋จ์ ํ ์คํธ๋ฅผ ํ ์ ์๋ ํ๋ ์์ํฌ์ ๋๋ค. ์์ฆ ํ๋ก๊ทธ๋๋ฐ์์๋ ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ ๋ฉด์์ ์ค์์ ์ด ๋ถ๊ฐ๋ ๋งํผ ํ์ตํ ํ์๊ฐ ์์ต๋๋ค. JUnit5์ ์ด์ ๋ฒ์ ๊ณผ๋ ๋ฌ๋ฆฌ, JUnit5 = JUnit Platform + JUnit Jupiter + JUnit Vintage ์ฌ๋ฌ ๊ฐ์ ๋ชจ๋๋ก ๊ตฌ์ฑ๋์์ต๋๋ค. JUnit Platform JUnit Platform ์ JVM์์ ํ ์คํธ ํ๋ ์์ํฌ๋ฅผ ์์ํ๊ธฐ ์ํ ๊ธฐ๋ฐ์ ์ ๊ณตํฉ๋๋ค. ๋ํ, ํ๋ซํผ์์ ์คํ๋๋ ํ ์คํธ ํ๋ ์ ์ํฌ ๊ฐ๋ฐ์ ์ํ TestEngine API๋ฅผ ์ ์ํฉ๋๋ค. ๋ชจ๋๊ฐ ์ ์๋ IDEs(Intellj, Eclipse, VS Code), ๋น๋..
-
[Java] JVM์ด๋? ์๋ฐ ์ฝ๋ ์คํAndroid/Java 2021. 1. 11. 01:28
์ด ๊ธ์ "์จ๋ผ์ธ ์๋ฐ ์คํฐ๋ ๋ด์ฉ"์ ์ ๋ฆฌํ ๊ธ์ ๋๋ค. JVM์ด๋? Java๋ ๋ค๋ฅธ ์ธ์ด์ ๋ฌ๋ฆฌ ํ๋ซํผ์ ์ข ์์ ์ด์ง ์๋ค๋ ํน์ง์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด๋ฌํ ํน์ง์ ๊ฐ์ง ์ ์๊ฒ ๋์์ฃผ๋ ์ํํธ์จ์ด๊ฐ JVM์ ๋๋ค. JVM์ Java Virtual Machine ์ฝ์ด๋ก ์๋ฐ ํ๋ก๊ทธ๋จ์ ์คํ์ํค๊ธฐ ์ํด ํ์์ ์ธ ๋ฐํ์ ํ๊ฒฝ์ ์ ๊ณตํ๋ ํ๋ก๊ทธ๋จ์ ๋๋ค. JVM์ ์ฃผ์ ์ญํ ๋ก ์๋ฐ ์์ค์ฝ๋๊ฐ ์ปดํ์ผ์ ํ์ฌ ๋ฐ์ดํธ์ฝ๋๋ก ๋ณํ๊ฒ ๋๋ฉด ๋ฐ์ดํธ์ฝ๋๋ฅผ ๊ฐ ์ด์์ฒด์ ์ ๋ง๋ ๊ธฐ๊ณ์ด๋ก ๋ค์ ๋ฒ์ญํ๋ ์ญํ ์ ๋ด๋นํ๊ณ ์์ต๋๋ค. ๊ทธ ์ธ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ, Garbage Collection ์ด๋ผ๋ ์ค์ํ ์ญํ ์ ์ํํ๊ณ ์์ต๋๋ค. ์ปดํ์ผ ๋ฐฉ๋ฒ ์๋ฐ๋ ๋น๋ ์, ์๋ฐ ํ์ผ(.java)์ ์๋ฐ ์ปดํ์ผ๋ฌ(javac.exe)๋ฅผ ์ด์ฉํ์ฌ JV..
-
[Android] Broadcast? Broadcast Receiver๋?Android 2021. 1. 8. 16:34
์ด ๊ธ์ ์๋๋ก์ด๋ 4๋ ์ปดํฌ๋ํธ ์ค ํ๋์ธ Broadcast Receiver์ ๊ดํ ๊ธ์ ๋๋ค. Broadcast ๊ฐ์ ์๋๋ก์ด๋ ์ดํ๋ฆฌ์ผ์ด์ ์ Publish-Subscribe ํจํด๊ณผ ์ ์ฌํ๊ฒ ์๋๋ก์ด๋ ์์คํ ๋๋ ๋ค๋ฅธ ์๋๋ก์ด๋ ์ดํ๋ฆฌ์ผ์ด์ ์ผ๋ก๋ถํฐ ๋ธ๋ก๋์บ์คํธ ๋ฉ์์ง๋ฅผ ๋ฐ์ต๋๋ค. ์์๋ก ํด๋ํฐ์ด ์ผ์ง ๋, ํด๋ํฐ์ด ์ถฉ์ ํ ๋์ ๊ฐ์ ์ด๋ฒคํธ๋ฅผ App์ ๋ฑ๋ก์ ํ๊ฒ ๋๋ฉด ์ด๋ฒคํธ ๋ฐ์ ์ ๋ธ๋ก๋์บ์คํธ ๋ฉ์์ง๊ฐ ์ ๋ฌ๋ฉ๋๋ค. ์์คํ ์ ํน์ ๋ธ๋ก๋์บ์คํธ ์ ํ์ ๋ฐ์ App์ผ๋ก ๋ธ๋ก๋์บ์คํธ๋ฅผ ์๋์ ์ผ๋ก ๋ผ์ฐํ ํฉ๋๋ค. ๋ธ๋ก๋์บ์คํธ์ ์๋ตํ๊ณ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ ํ ๋ ๋จ์ฉํ์ง ์๋๋ก ์กฐ์ฌํด์ผ ํฉ๋๋ค. Broadcast ์ฌ์ฉ ๋งค๋ํ์คํธ ์์ ๋ธ๋ก๋์บ์คํธ ๋ฆฌ์๋ฒ๋ฅผ ์ ์ธํฉ๋๋ค. ๋ธ๋ก๋์บ์ํธ ๋ฉ์์ง๋ Intent ๊ฐ์ฒด๋ก w..
-
[Java] ๋์์ธ ํจํด(Decorator ํจํด)Android/Java 2021. 1. 8. 11:14
์ด ๊ธ์ "์ธํ๋ฐ Java ๋์์ธ ํจํด" ๊ฐ์๋ฅผ ๋ฃ๊ณ ๊ณต๋ถํ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ๊ธ์ ์์ฑํ์์ต๋๋ค. Decorator ํจํด์ด๋? ์์ ํด๋์ค๋ฅผ ์ค์ ์ผ๋ก ์์๊ณผ ํฉ์ฑ์ ์ด์ฉํ์ฌ ํฐ ํด๋์ค๋ฅผ ๋ง๋๋ ํจํด์ ๋๋ค. ์ค์ฌ๋๋ ํด๋์ค๋ ๋ณ๊ฒฝ ์์ด ์ถ๊ฐ ํด๋์ค๋ฅผ ์์ฑํ์ฌ ์์์ ํ๋ฉด์ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋๋ ๋ฐฉ์์ ๋๋ค. ๋ชจ๋ฐ์ผ UI ๊ฐ๋ฐ์ ์ฃผ๋ก ๋ง์ด ํ์ฉ๋๋ ์๋ ํจํด์ ๋๋ค. Decorator ์ฌ์ฉ public abstract class Widget { public abstract int getColumns(); public abstract int getRows(); public abstract String getRowText(int row); public void show(){ for (int i = 0; i < getRo..
-
[Java] ๋์์ธ ํจํด(Adapter ํจํด)Android/Java 2021. 1. 7. 20:19
์ด ๊ธ์ "์ธํ๋ฐ Java ๋์์ธ ํจํด" ๊ฐ์๋ฅผ ๋ฃ๊ณ ๊ณต๋ถํ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์์ฑํ ๊ธ์ ๋๋ค. Adapter ํจํด์ด๋? ํ๋์ ํด๋์ค์ ์ธํฐํ์ด์ค๋ฅผ ๋ค๋ฅธ ํด๋์ค์ ์ธํฐํ์ด์ค๋ก ๋ณํํ ๋ ์ฃผ๋ก ์ฐ๋ ํจํด์ ๋๋ค. ์ด๋ ์ ๋ ๊ท๋ชจ๊ฐ ์๋ ๋ด๋ถ ์์คํ ์์ ์๋ก์ด ํด๋์ค๋ฅผ ์ ์ฉํ๋ ค๊ณ ์ธํฐํ์ด์ค๋ฅผ ๋ชจ๋ ์์ ํ๋ ๊ฒ์ ์ฌ์ค์ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์ด๋ด ๋ ๊ธฐ์กด์ ์ธํฐํ์ด์ค๋ฅผ ๋ค๋ฅธ ํด๋์ค์ ์ธํฐํ์ด์ค๋ก ๋ณํํ์ฌ ์ฌ์ฉํฉ๋๋ค. ์ด๋ฆ ๊ทธ๋๋ก ์ ๊ธฐ ์ด๋ํฐ๋ผ๊ณ ์๊ฐํ์ฌ ๋ค๋ฅธ ์ ๊ธฐ๋ ๊ธฐ๊ณ์ฅ์น๋ฅผ ์๋ก ์ฐ๊ฒฐํด์ ์๋ํ๊ฒ ํด์ฃผ๋ ๋๊ตฌ์ธ ๊ฒ์ฒ๋ผ Adapter ํจํด๋ ๋น์ทํ๊ฒ ์๋ํฉ๋๋ค. ์๋๋ก์ด๋์์๋ Adapter ํจํด์ ์์ฃผ ์ฌ์ฉ๋๊ณ ์์ต๋๋ค. ex) ListView, RecyclerView .. Adapter ํจํด ์ฌ์ฉ public in..
-
[Java] ๋์์ธ ํจํด (Singleton ํจํด)Android/Java 2021. 1. 5. 22:50
์ด ๊ธ์ "์ธํ๋ฐ Java ๋์์ธ ํจํด" ๊ฐ์๋ฅผ ๋ฃ๊ณ ๊ณต๋ถํ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ๊ธ์ ์์ฑํ์์ต๋๋ค. Singleton ํจํด์ด๋? ์ด ํจํด์ ์ฃผ๋ก ์ธ์คํด์ค ์์ฑ์ ํ๋ฒ ํ ํ ์ ๊ตฌ์ญ์์ ๊ฐ์ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ ๋ ์ฌ์ฉํ๋ ํจํด์ ๋๋ค. ์ด ํจํด์ ์ฌ์ฉํ๋ฉด ์ ์ญ ์ธ์คํด์ค์ด๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ํด๋์ค์์ ๋๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๊ธฐ ์ฝ๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค. ํ์ง๋ง ์ฌ๋ฌ ํด๋์ค์์ ์ฑ๊ธํค ์ธ์คํด์ค๊ฐ ํธ์ถ๋๊ณ ์ฌ์ฉ๋๋ค๋ฉด ์์ฐ์ค๋ฝ๊ฒ ๊ฒฐํฉ๋๋ ์ฆ๊ฐํ๊ฒ ๋ฉ๋๋ค. ๊ฒ๋ค๊ฐ ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์๋ ๋๊ธฐํ ์์ ์ด ํ์์ ์ผ๋ก ์งํ๋์ด์ผ ํฉ๋๋ค. (์ฌ๋ฌ ์ธ์คํด์ค ์์ฑ ๊ฐ๋ฅ์ฑ์ด ์๋ค.) ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ ์ง์คํธ๋ฆฌ ๊ฐ์ ๋จ ํ๋๋ก ์กด์ฌํด์ผ ์๋ฏธ๊ฐ ์์ ๋ ์ฌ์ฉํ๋ฉด ํจ๊ณผ์ ์ ๋๋ค. Singleton ์ฌ์ฉ public class Singleto..
-
[Java] ๋์์ธ ํจํด (Builder ํจํด)Android/Java 2021. 1. 3. 21:55
์ด ๊ธ์ "์ธํ๋ฐ Java ๋์์ธ ํจํด" ๊ฐ์๋ฅผ ๋ฃ๊ณ ๊ณต๋ถํ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์์ฑํ์์ต๋๋ค. Builder ํจํด์ด๋? ์๋๋ก์ด๋, ์๋ฐ ๊ฐ๋ฐ์ ํ ๋ ์์ฃผ ์ฐ์ด๋ ํจํด ์ค ํ๋์ ๋๋ค. Builder ํจํด์ ํด๋์ค ์์ฑ ํจํด์ผ๋ก ๋ฉค๋ฒ ๋ณ์๊ฐ ๋ง์ ๊ฒฝ์ฐ ๋ค์ํ ์์ฑ์๊ฐ ํ์ํ๋ค๋ ๋จ์ ์ ํด๊ฒฐํ ์ ์๋ ํจํด์ ๋๋ค. Builder ํจํด์ ์ฌ์ฉํ๋ฉด ์ฝ๋์ ๊ฐ๋ ์ฑ์ด ๋์์ง๊ณ ์ ์ง๋ณด์๋ฅผ ํธ๋ฆฌํ๊ฒ ํ ์ ์์ต๋๋ค. ๋ํ, ๊ฐ์ฒด ์์ฑ๋ ๊น๋ํ ํ ์ ์์ต๋๋ค. ์๋๋ก์ด๋์์ NotificationCompat์ ์๋ฐ์์ StringBuilder์์ Builder ํจํด์ ์ฌ์ฉํ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. Builder ํจํด ์ฌ์ฉ Student ๊ฐ์ฒด์ Builder ํจํด์ ์ฌ์ฉํ์์ต๋๋ค. ์๋ Student์ ์ ๋ณด( ํ๋ฒ..
-
[Android] android.app.RemoteServiceException: Bad notification for startForeground: java.lang.RuntimeException: invalid channel for service notificationAndroid/Exception 2020. 12. 14. 09:59
์๋๋ก์ด๋ ์๋ฌ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ํ ๊ธ์ ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ๋ Notification ์ ์ฌ์ฉ ์์ Oreo ๋ฒ์ (API26) ์ด์์ด๋ฉด notification Channel์ ๋ฑ๋กํด์ผ ํฉ๋๋ค. ์ด notification Channel์ ๋ฑ๋กํ์ง ์์ ๊ฒฝ์ฐ์ ๋ฐ์ํ๋ ์ค๋ฅ๋ก ๋ค์ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ฉด ํด๊ฒฐ๋ฉ๋๋ค. public void createNotificationChannel() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationManager manager = getBaseContext().getSystemService(NotificationManager.class); NotificationChannel serviceChannel =..