๊ฐ๋ฐ/Java
-
JVM์ด์ผ๊ธฐ - ์ ์(+JRE, JDK), ๊ตฌ์กฐ๊ฐ๋ฐ/Java 2022. 7. 5. 12:00
JVM (Java Virtual Machine ) ์๋ฐ ๊ฐ์ ๋จธ์ ์ปดํจํฐ๋ 0๊ณผ 1๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ด๋๋ฆฌ(2์ง์)๋ก ์์ฑ๋ ๊ธฐ๊ณ์ด๋ก๋ง ์ดํด๋ฅผ ํ ์ ์๋ค. ํ์ง๋ง ์ฌ๋์ ๊ทธ ๊ธฐ๊ณ์ด๋ฅผ ๋ณด๊ณ ์ดํดํ๊ธฐ๊ฐ ์ด๋ ต๋ค. (๋ชจ๋ํฐ์ 0110101010110 ์ด๋ ๊ฒ๋ง ์จ์์ผ๋ฉด, ๋๊ฐํ๋ค^^;) ์ด์จ๋ ์ฐ๋ฆฌ๊ฐ ์ดํดํ๊ณ ์์ฑํ ์ ์๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ปดํจํฐ๊ฐ ์์๋ค์ ์ ์๋ ๊ธฐ๊ณ์ด๋ก ๋ฐ๊ฟ์ฃผ๋ ์์ ์ ๋คํํ๋ c๋ ์๋ฐ ๊ฐ์ ์ปดํ์ผ ์ธ์ด์์๋ ์ปดํ์ผ๋ฌ๋ผ๋ ๋ฒ์ญ๊ฐ๊ฐ ๋ฒ์ญ์ ํด์ค๋ค. ๊ทธ๋ฐ๋ฐ c๊ฐ์ ๊ฒฝ์ฐ๋, ๋๊ฐ์ด c๋ก ์ง ํ๋ก๊ทธ๋๋ฐ์ด๋๋ผ๋ ์๋์ฐ์์ ๋๊ฒ ์ปดํ์ผํ ๊ฒ์ ๋งฅ์ด๋ ๋ฆฌ๋ ์ค์์ ์๋๋ค. ์ฆ, ํ๋ก๊ทธ๋จ์ด ๋๋ ํ๊ฒฝ, ์ปดํจํฐ๋ง๋ค ๊ฑฐ๊ธฐ์ ๋ง๋ ๊ธฐ๊ณ์ด๋ก ์ผ์ผ์ด ๋ฒ์ญ์ ํด์ค์ผํ๋ค. ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ง๋ค์ด์ง ๊ฒ ์๋ฐ..
-
์๋ฐ๊ฐ ํ์ฅํ ๊ฐ์ฒด ์งํฅ๊ฐ๋ฐ/Java 2022. 5. 24. 02:42
๐ก abstract - ์ถ์ ๋ฉ์๋์ ์ถ์ ํด๋์ค ์ถ์๋ฉ์๋ : ์ ์ธ๋ถ๋ ์๋๋ฐ, ๊ตฌํ๋ถ๊ฐ ์๋ ๋ฉ์๋ ์ถ์ ํด๋์ค - ์ถ์ ๋ฉ์๋๋ฅผ ํ๋๋ผ๋ ๊ฐ๊ณ ์๋ ํด๋์ค ์ถ์ ํด๋์ค๋ ์ธ์คํด์ค, ์ฆ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์๋ ํด๋์ค๊ฐ ๋๋ค. - ์ถ์ํด๋์ค๋ ์ธ์คํด์ค, ์ฆ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์๋ค. - ๋ง์ฝ ํด๋น ์ถ์ํด๋์ค๋ฅผ ์์ํ ํ์ ํด๋์ค๊ฐ ์์ ํด๋์ค์ ์ถ์๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ์ง ์์ผ๋ฉด ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค. - ์ถ์๋ฉ์๋๋ฅผ ํฌํจํ๋ ํด๋์ค๋ ๋ฐ๋์ ์ถ์ ํด๋์ค์ฌ์ผ ํ๋ค. ๐ก interface์ implements ์ธํฐํ์ด์ค๋ public static final ์์๋ง ๊ฐ์ง ์ ์์ผ๋ฉฐ, ๋ฉ์๋๋ public abstract ๋ง ๊ฐ์ง ์ ์๋ค. ๋ค๋ง, ์ฝ๋์ ์ด๋ฐ ์์ฝ์ด๋ค์ด ์๋ถ์ด์๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ, ์ด๋ฐ ์ด์ ๋ ์..
-
Java8 - stream(์คํธ๋ฆผ), forEach(), map(), filter(), Method Reference(๋ฉ์๋ ์ฐธ์กฐ)๊ฐ๋ฐ/Java 2022. 4. 30. 00:20
stream์ด๋ผ๋ ์์ด ๋จ์ด๋ ๋ค์๊ณผ ๊ฐ์ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค. 1. ๊ฐ์ธ, ์๋ด 2. (์ก์ฒด๋ ๊ธฐ์ฒด์) ์ค๊ธฐ 3. (์ฌ๋์ด๋ ์ฐจ๋๋ค๋ก ๊ณ์ ์ด์ด์ง) ์ค ์์ ์๋ฏธ๋ก ๋ณด์์ ๋, "์ค์ค์ด ์ด์ด์ ธ ์๋" ์๋ฏธ๋ก ์ฌ์ฉ์ด ๋๋ค. ๐ก์๋ฐ์ ์คํธ๋ฆผ์ ์ธ์ ์ฌ์ฉํ ๊น? ์๋ฐ์ ์คํธ๋ฆผ์ "๋ญ๊ฐ ์ฐ์๋ ์ ๋ณด"๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉํ๋ค. ์๋ฐ์์๋ ๋ฐฐ์ด๊ณผ ์ปฌ๋ ์ ์ ์๊ฐํด๋ณผ ์ ์๊ฒ ๋ค. ํ์ง๋ง, ๋ฐฐ์ด์์๋ ์คํธ๋ฆผ์ ์ฌ์ฉํ ์ ์๋ค. cf) ๊ทธ๋ ์ง๋ง, ๋ฐฐ์ด์ ์ปฌ๋ ์ ์ List๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์กด์ฌํ๋ค. 1) asList() ๋ฉ์๋๋ฅผ ์ด์ฉํ ๋ณํ Integer[] values = {1, 3, 5}; List list = new ArrayList(Arrays.asList(values)); 2) Arrays.stream()..
-
Java8 - Lamda ํํ์(expression)๊ฐ๋ฐ/Java 2022. 4. 29. 17:57
Java8 ์ด์์ ์ฌ์ฉํ๋ค๋ฉด ๋ฐ๋์ ์๊ณ ์์ด์ผ๋ง ํ๋ "๋๋ค"์ ๋ํด ์์๋ณด๊ฒ ๋ค. ์ด ๋๋ค ํํ์์ ์ตํ ๋์ง ์์ผ๋ฉด ์์ผ๋ก ๋ง๋ค์ด์ง๋ ์๋ฐ ์ฝ๋๋ฅผ ์ฝ๋ ๋ฐ ๋งค์ฐ ์ด๋ ค์์ ๊ฒช์ ์ ์๊ธฐ ๋๋ฌธ์, ๊ผญ ์์๋๊ธฐ๋ฅผ ๊ถํ๋ค. ๐กLamda ํํ์์ ์ ๋ง๋ค์ด์ก์๊น? ์ต๋ช ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด, ํด๋์ค๋ฅผ ์๋กญ๊ฒ ๋ง๋๋ ๋ฐ ํ์ํ ๋น์ฉ์ ์ค์ผ ์ ์๋ค๋ ์ฅ์ ์ด ์์ง๋ง, ๋ฐ๋๋ก ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋ ๋ถํธํจ์ด ์๋ค. ์ด๋ฅผ ๋ณด์ํ๊ณ ์ ๋ง๋ค์ด์ก๋ค. ๐กLamda ํํ์์ ์ธ์ ์ธ๊น? ์ด ํํ์์ ์ธํฐํ์ด์ค์ ๋ฉ์๋๊ฐ "ํ๋"์ธ ๊ฒ๋ค๋ง ์ ์ฉ ๊ฐ๋ฅํ๋ค. ๊ทธ๋์, ๋๋ค ํํ์์ ์ต๋ช ํด๋์ค๋ก ์ ํ์ด ๊ฐ๋ฅํ๋ฉฐ, ์ต๋ช ํด๋์ค๋ ๋๋ค ํํ์์ผ๋ก ์ ํ์ด ๊ฐ๋ฅํ๋ค. ๐กJava์ ์๋ ์ธํฐํ์ด์ค ์ค, ๋ฉ์๋๊ฐ ํ๋์ธ ์ธํฐํ์ด์ค์๋ ์ด๋ค ๊ฒ๋ค์ด ์..
-
[Thread] Runnable and Callable in Java๊ฐ๋ฐ/Java 2022. 4. 25. 15:31
Java ์ด๊ธฐ๋ถํฐ ๋ฉํฐ์ค๋ ๋ฉ์ ์ธ์ด์ ์ฃผ์ ์ธก๋ฉด์ด์๋ค. Runnable ์ ๋ค์ค ์ค๋ ๋ ์์ ์ ๋ํ๋ด๊ธฐ ์ํด ์ ๊ณต๋๋ ํต์ฌ ์ธํฐํ์ด์ค์ด๊ณ , Callable ์ Java 1.5์ ์ถ๊ฐ๋Runnable์ ๊ฐ์ ๋ ๋ฒ์ ์ด๋ค. ๋ ์ธํฐํ์ด์ค ๋ชจ๋ ์ฌ๋ฌ ์ค๋ ๋์์ ์คํํ ์ ์๋ ์์ ์ ๋ํ๋ด๋๋ก ์ค๊ณ๋์๋ค. ํ์ง๋ง, Runnable์ Threadํด๋์ค ๋๋ExecutorService ๋ฅผ ์ฌ์ฉํ์ฌ ์คํํ ์ ์๋ ๋ฐ๋ฉด Callable ์ ํ์๋ฅผ ์ฌ์ฉํด์๋ง ์คํํ ์ ์๋ค. ๊ทธ๋ผ ์ฐจ์ด์ ์ ์์ธํ ์ดํด๋ณด์. Runnable ๐ก๋ฐํ ๊ฐ Runnable ์ธํฐํ์ด์ค ๋ ๊ธฐ๋ฅ์ ์ธํฐํ์ด์ค์ด๋ฉฐ ๋งค๊ฐ๋ณ์๋ฅผ ํ์ฉํ์ง ์๊ณ ๊ฐ์ ๋ฐํํ์ง ์๋ ๋จ์ผ run() ๋ฉ์๋๊ฐ ์๋ค. ์ค๋ ๋ ์คํ์ ๊ฒฐ๊ณผ๋ฅผ ์ฐพ์ง ์๋ ์ํฉ์ ์ ํฉํ๋ค. ๐ก์คํ ..
-
[Thread] Volatile์ด๋, Volatile๊ณผ DCL(Double Checking Locking) ๊ณต๋ถ ๊ธฐ๋ก๊ฐ๋ฐ/Java 2022. 4. 24. 00:02
๐กvolatile์ ์ธ์ ์ฌ์ฉํ ๊น? ์๋ฐ์ ์์ฝ์ด ์ค์๋ volatile๋ผ๋ ๊ฒ์ด ์๋ค. ์ด ์์ฝ์ด๋ ๋ณ์ ์ ์ธ์์๋ง ์ฌ์ฉ๋๋ค. ์ด ์์ฝ์ด์ ๋ํ ์ค๋ช ์ ๋ฃ๊ธฐ ์ ์ ๋จผ์ ๋ค์์ ์์ ์ฝ๋๋ฅผ ๋ณด์. (์ฝ๋ ์ค๋ช ์ ์ฃผ์์ผ๋ก ๋์ฒดํ๋ค.) VolatileSample.java package e.thread.volat; public class VolatileSample extends Thread{ //instanceVariable์ด๋ผ๋ ๋ณ์๊ฐ ์๊ณ , ๊ธฐ๋ณธ ๊ฐ์ 0์ผ๋ก ์ง์ ํ๋ค. private double instanceVariable = 0; //instanceVariable ๊ฐ์ ๋ณ๊ฒฝํ๋ ๋ฉ์๋ void setDouble(double value) { this.instanceVariable = value; } pu..
-
[Thread] ๋์์ฑ ์ด์(Synchronization Issue), ์ฐ๋ ๋๋ก์ปฌ(ThreadLocal), ์ฐ๋ ๋ํ(ThreadPool), ์ฐ๋ ๋์ ์์ ํ ์ค๊ณ(ThreadSafe)์ ๋ํ ๊ณต๋ถ ๊ธฐ๋ก๊ฐ๋ฐ/Java 2022. 4. 23. 21:54
๐ก๋์์ฑ ์ด์๋ ๋ฌด์์ธ๊ฐ? ๋์์ฑ ์ด์๋ ์ฌ๋ฌ ์ฐ๋ ๋๊ฐ ๋์์ ๊ฐ์ ์ธ์คํด์ค์ ํ๋ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด์ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ์๋ฏธํ๋ค. ๊ฐ์ฅ ๋ํ์ ์ธ ์๋ก ์ฑ๊ธํค(Singleton) ํจํด์ ์๋ก ๋ค ์ ์๋ค. โ ์ฑ๊ธํค(Singleton) ํจํด์ด๋? ์ฑ๊ธํค์ด๋ ์ด๋ค ํด๋์ค๊ฐ ์ต์ด ํ๋ฒ๋ง ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ (Static) ๊ทธ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ๋ ๋์์ธ ํจํด์ ์๋ฏธํ๋ค. ์ฆ, ์์ฑ์์ ํธ์ถ์ด ๋ฐ๋ณต์ ์ผ๋ก ์ด๋ค์ ธ๋ ์ค์ ๋ก ์์ฑ๋๋ ๊ฐ์ฒด๋ ์ต์ด ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํ ํด์ฃผ๋ ๊ฒ์ด๋ค. ์๋์ ์ฝ๋๋ฅผ ๋ณด์. @Service public class UserService { private static UserId userId; // ์ํ ๊ฐ public void createUser(User user) { // ์ฌ๊ธฐ์ use..
-
[Thread] Program, Process, Thread, Multi-Thread๋? - ๊ตฌ์ฒด์ ์ธ ์๋ ๋ฐฉ์์ ๋ํ ๊ณต๋ถ ๊ธฐ๋ก๊ฐ๋ฐ/Java 2022. 4. 23. 17:35
๐กProgram, Process, Thread๋? ํ๋ก๊ทธ๋จ(Program)์ด๋, ํ์ผ์ด ์ ์ฅ ์ฅ์น์ ์ ์ฅ๋์ด ์์ง๋ง ๋ฉ๋ชจ๋ฆฌ์๋ ์ฌ๋ผ๊ฐ ์์ง ์์ ์ ์ ์ธ ์ํ๋ฅผ ๋งํ๋ค. - ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ ์์ง ์์: ์์ง ์ด์์ฒด์ ๊ฐ ํ๋ก๊ทธ๋จ์๊ฒ ๋ ๋ฆฝ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋นํด์ฃผ์ง ์์๋ค๋ ๋ป์ด๋ค. ๋ชจ๋ ํ๋ก๊ทธ๋จ์ ์ด์์ฒด์ ๊ฐ ์คํ๋๊ธฐ ์ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋นํด ์ค์ผ ์คํ๋ ์ ์๋ค. - ์ ์ ์ธ ์ํ: ์ ์ (้็)์ด๋ผ๋ ๋จ์ด ๊ทธ๋๋ก, ์์ง์ด์ง ์๋ ์ํ๋ผ๋ ๋ป์ด๋ค. ํ ๋ง๋๋ก ์์ง ์คํ๋์ง ์๊ณ ๊ฐ๋งํ ์๋ค๋ ๋ป์ด๋ค. ์ฆ, ํ๋ก๊ทธ๋จ(Program)์ด๋ผ๋ ๋จ์ด๋ ์์ง ์คํ๋์ง ์์ ํ์ผ ๊ทธ ์์ฒด, ์ฝ๋ ๋ฉ์ด๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ง์ด๋ค. ์๋ฅผ ๋ค๋ฉด, ์๋์ฐ์ *.exe ํ์ผ์ด๋ MacOS์ *.dmg ํ์ผ ๋ฑ๋ฑ ์ฌ์ฉ์๊ฐ ๋๋ฌ์ ์คํํ๊ธฐ..