BackEnd๐ฑ/Java27 [Java] CompletableFuture๋ก ๋น๋๊ธฐ ๋ฐ ๋ณ๋ ฌ ์ฒ๋ฆฌํ๊ธฐ Future vs CompletableFuture Future์ CompletableFuture๋ ๋ชจ๋ Java์์ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํ๊ธฐ ์ํ ๋๊ตฌ์ ๋๋ค. Java 5์์ ๋์ ๋ Future๋ ๋น๋๊ธฐ ์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ฅผ ํํํ๋ ๋ฐ ์ฌ์ฉ๋๋ฉฐ, Java 8์์ ๋์ ๋ CompletableFuture๋ Future๋ฅผ ํ์ฅํ์ฌ ๋ ๋ง์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. CompletableFuture์ Future์ฐจ์ด๋ ๋ฌด์์ผ๊น์? Future์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ด๋ฒ ํฌ์คํ ์ ์ฃผ์ ์์ ๋ฒ์ด๋ ๊ฒ ๊ฐ์ ๊ฐ๋จํ๊ฒ CompletableFuture์์ ์ฐจ์ด์ ๋ง ๋น๊ตํด ๋ณด์์ต๋๋ค. Blocking vs Non-Blocking Future๋ get() ๋ฉ์๋๋ฅผ ํตํด ๋น๋๊ธฐ ์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ต๋๋ค. ํ์ง๋ง ์ด ๋ฉ์๋๋ ์ฐ์ฐ์ด ์๋ฃ.. 2023. 12. 12. [JVM ๋งค๊ฐ๋ณ์] InitialRAMPercentage, MinRAMPercentage, MaxRAMPercentage ๊ฐ์ Java 8๋ถํฐ, InitialRAMPercentage, MinRAMPercentage, ๊ทธ๋ฆฌ๊ณ MaxRAMPercentage ์ธ ๊ฐ์ง JVM ํ๋ผ๋ฏธํฐ๊ฐ ๋์ ๋์ด ์ฌ์ฉ์์๊ฐ Java ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ํฌ๊ธฐ๋ฅผ ๋ ์ ์ฐํ๊ฒ ์ค์ ํ ์ ์๊ฒ ๋์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก JVM์ ๋ฌผ๋ฆฌ์ ๋ฉ๋ชจ๋ฆฌ์ ๊ธฐ๋ฐํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ์ง๋ง, ์ปจํ ์ด๋ ํ๊ฒฝ์ด ๋ฐ์ ํ๋ฉด์ JVM๋ ์ปจํ ์ด๋์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ฒ ๊ฐ์ ๋์์ต๋๋ค. InitialRAMPercentage -XX:InitialRAMPercentage ํ๋ผ๋ฏธํฐ๋ Java ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๊ธฐ ํ ํฌ๊ธฐ๋ฅผ ์ค์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ๊ฐ์ ์๋ฒ๋ ์ปจํ ์ด๋์ ์ ์ฒด ๋ฉ๋ชจ๋ฆฌ ๋ฐฑ๋ถ์จ๋ก ์ค์ ๋๋ฉฐ, double ๊ฐ์ผ๋ก ์ ๋ฌ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, 1GB ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๋ ์๋ฒ์์ -.. 2023. 10. 1. Java์์ assert์ exception ์๋ก Java์์ ๊ฐ๋ฐ์๋ ๋ฒ๊ทธ ๋๋ ์์์น ๋ชปํ ์ํฉ์ ๊ฒ์ถํ๊ณ ์ ์ ํ ๋์ํ๊ธฐ ์ํ ๋ค์ํ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ ์ ์๋๋ฐ, ๋ํ์ ์ผ๋ก assert์ exception์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ ๊ฐ์ง ๊ธฐ๋ฅ์ ๋น์ทํด ๋ณด์ด์ง๋ง, ์ฌ์ฉ ๋ชฉ์ , ์ ์ฉ ์๋๋ฆฌ์ค, ๊ทธ๋ฆฌ๊ณ ํน์ฑ์์ ์ค์ํ ์ฐจ์ด์ ์ด ์์ต๋๋ค. Exception exception์ ํ๋ก๊ทธ๋จ์ ์ผ๋ฐ์ ์ธ ์คํ ํ๋ฆ์์ ์์์น ๋ชปํ ์ํฉ์ด ๋ฐ์ํ์ ๋, ์ด๋ฅผ ์ ์ ํ ์ฒ๋ฆฌํ๊ธฐ ์ํ Java์ ๊ธฐ๋ณธ ๋ฉ์ปค๋์ฆ์ ๋๋ค. Java์ ์์ธ๋ ํฌ๊ฒ ๋ ๊ฐ์ง๋ก ๊ตฌ๋ถ๋ฉ๋๋ค. 1. Uncheked Exception(๋๋ RuntimeException) int x = 0; int y = 5 / x; // ArithmeticException ๋ฐ์ ์คํ ์๊ฐ์ ๋ฐ๊ฒฌ๋๋ ์์ธ๋ก, Ru.. 2023. 8. 11. ์ผ๊ธ ์ปฌ๋ ์ (First-Class Collection)์ด๋? ์ผ๊ธ ์ปฌ๋ ์ (First-Class Collection)์ด๋? Java์์ ์ผ๊ธ ์ปฌ๋ ์ (First-Class Collection)์ ๋ค๋ฅธ ๊ฐ์ฒด์ ๋๋ฑํ ์ง์๋ฅผ ๊ฐ๋ ์ปฌ๋ ์ ๊ฐ์ฒด๋ฅผ ๋งํฉ๋๋ค. ์ผ๊ธ ์ปฌ๋ ์ ์ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ ๊ฐ์ง๋๋ค. ์ปฌ๋ ์ ๊ฐ์ฒด๋ ๋ณ์๋ ๋งค๊ฐ๋ณ์์ ํ ๋นํ ์ ์๋ค. ์ปฌ๋ ์ ๊ฐ์ฒด๋ ๋ค๋ฅธ ๊ฐ์ฒด์ ๋๋ฑํ ์ง์๋ฅผ ๊ฐ์ง๋ค. ์ปฌ๋ ์ ๊ฐ์ฒด๋ ๋ฐํ๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค. ์ปฌ๋ ์ ๊ฐ์ฒด๋ ํ์ํ ๊ฒฝ์ฐ ๋ฉ์๋์์ ์์ฑํ ์ ์๋ค. ๊ทธ๋ฅ ๊ฐ๋จํ๊ฒ ํ ๋ฌธ์ฅ์ผ๋ก ๋งํ๋ฉด Collection์ Wrapping ํ๋ฉด์, ๊ทธ ์ธ ๋ค๋ฅธ ๋ฉค๋ฒ ๋ณ์๊ฐ ์๋ ์ํ๋ฅผ ์ผ๊ธ ์ปฌ๋ ์ ์ด๋ผ ํฉ๋๋ค. ์์ ์ฝ๋ ์ฝ๋๋ก ์ดํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๋จผ์ ์ผ๊ธ ์ปฌ๋ ์ ์ ์ฌ์ฉํ์ง ์์ ์ฝ๋์ ๋๋ค. public class Student { pri.. 2023. 4. 12. Java์ ๊ธฐ๋ณธ ํจ์ํ ์ธํฐํ์ด์ค ์๋ก ์ฌ๋ด ์ฝ๋๋ฅผ ์ดํด๋ณด๋ค๊ฐ ํจ์ํ ์ธํฐํ์ด์ค, ๊ทธ์ค์์๋ BiFunction์ ์ฌ์ฉํ ๋ก์ง์ ์์ฃผ ๋ณผ ์ ์์๋๋ฐ, ์ค์ ๋ก ๋ณด๋ ์์ํ๊ธฐ๋ ํ๊ณ , ์ ๋ ๋ก์ง์ ํ๋ฒ ๋ น์ฌ๋ณด๊ณ ์ถ์ด์ ์ด๋ฒ ๊ธฐํ์ ์ ๋ฆฌ๋ฅผ ํด๋ณด๋ ค๊ณ ํฉ๋๋ค. ํจ์ํ ์ธํฐํ์ด์ค ์ข ๋ฅ Java์ ํจ์ํ ์ธํฐํ์ด์ค๋ JAVA 8๋ถํฐ ๋์ ๋ ๊ธฐ๋ฅ์ผ๋ก, ํ๋์ ์ถ์ ๋ฉ์๋๋ง ๊ฐ์ง๋ ์ธํฐํ์ด์ค๋ฅผ ์๋ฏธํฉ๋๋ค. ์ด๋ฌํ ์ธํฐํ์ด์ค๋ค์ ๋๋ค ํํ์์ด๋ ๋ฉ์๋ ์ฐธ์กฐ๋ฅผ ํตํด ๊ฐ๋จํ๊ฒ ํํํ ์ ์์ผ๋ฉฐ, Java์์๋ java.util.function ํจํค์ง๋ฅผ ํตํด ๋ฏธ๋ฆฌ ์ ์๋ ๋ค์ํ ํจ์ํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. Java์์ ๋ฏธ๋ฆฌ ์ ์ํด ๋ ์ฃผ์ ํจ์ํ ์ธํฐํ์ด์ค๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. Function: ์ ๋ ฅ ์ธ์ T๋ฅผ ๋ฐ์ ๊ฒฐ๊ณผ R์ ๋ฐํํ๋ ํจ์๋ฅผ ๋ํ๋ธ๋ค. ์ฃผ.. 2023. 3. 20. Java์ ์์ธ ์์ฑ ๋น์ฉ์ ๋น์ธ๋ค ์๋ก ๋ณดํต ํ๋ก์ ํธ๋ฅผ ์งํํ ๋, ์๋์ ๊ฐ์ ์ฅ์ ๋๋ฌธ์ ์๋ฐ์์ ์ ๊ณตํ๋ ์์ธ ํด๋์ค ์ธ์ ๊ฐ๋ฐ์๊ฐ ์ง์ Custom Exception ํด๋์ค๋ฅผ ์ ์ํ์ฌ ์์ฃผ ์ฌ์ฉํฉ๋๋ค. ์๋ฌ ์ฒ๋ฆฌ์ ์ผ๊ด์ฑ๊ณผ ๊ฐ๋ ์ฑ ์ ์ง: ๊ฐ๋ฐ์๊ฐ ์ง์ ์์ ํด๋์ค๋ฅผ ์ ์ํ๋ฏ๋ก, ์๋ฌ ๋ฉ์์ง๋ฅผ ๋ณด๋ค ๋ช ํํ๊ฒ ์ ์ํ ์ ์๊ณ , ๊ฐ๋ฐ์๊ฐ ์ง์ ์ผ๊ด์ฑ ์๊ฒ ์๋ฌ์ฒ๋ฆฌ๋ฅผ ์ ์ํ ์ ์๋ค. ๋ก๊น ๋ฐ ๋๋ฒ๊น ์ ์ฉ์ด: ๊ฐ๋ฐ์๊ฐ ์์ธ ํด๋์ค์ ๋๋ฒ๊น ์ ๋ณด๋ฅผ ์ถ๊ฐํ์ฌ ์์ธ๊ฐ ๋ฐ์ํ์ ๋ ๋๋ฒ๊น ์ ์ฉ์ดํ๊ฒ ํ ์ ์๋ค. ์์ธ ์ฒ๋ฆฌ์ ์ ์ฐ์ฑ: ์์ธ ํด๋์ค๋ฅผ ์์ํ์ฌ ์ฌ์ฉํ๋ ๋ฑ ๋ค์ํ ์์ธ ์ฒ๋ฆฌ ๋ฐฉ์์ ์ ์ฉํ ์ ์๋ค. ํ์ง๋ง ์ด๋ฌํ ์ฅ์ ์ธ์๋, ์๋ฐ์์๋ Exception์ ์ฒ๋ฆฌ ๋น์ฉ์ด ๋งค์ฐ ๋น์ธ๋ค๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ด๋ฒ ๊ฒ์๊ธ์์๋ JVM์์ E.. 2023. 3. 10. ๋๋ฏธํฐ ๋ฒ์น (Law of Demeter)์ด๋? ์ต๊ทผ ํด๋ฆฐ์ฝ๋๋ฅผ ์ฝ๋ ์ค ๋๋ฏธํฐ ๋ฒ์น์ ๋ํด ์๊ฒ ๋์์ต๋๋ค. ์ฉ์ด ์์ฒด๋ ์์ํ๊ธด ํ๋ฐ ๋ฒ์น์ ๋ด์ฉ ์์ฒด๋ ํฌ๊ฒ ์ด๋ ต์ง ์๊ณ , ํ์์ ๊ฐ๋ฐ์์ ํํ ๋ง์ฃผ์น ์ ์๋ ๋ด์ฉ์ ๋ค๋ฃฌ ๋ฒ์น์ด๊ธฐ ๋๋ฌธ์ ํ๋ฒ ์ ๋ฆฌ๋ฅผ ํด๋ณด๋ ค๊ณ ํฉ๋๋ค. ๋๋ฏธํฐ ๋ฒ์น์ด๋? ๋๋ฏธํฐ ๋ฒ์น(Law of Demeter)์ ๋ฐ๋ฉํ ๋ฅด ๋ฒ์น์ด๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ฉฐ ์ค์ฌ์ LoD๋ผ๊ณ ๋ ๋ถ๋ฆฝ๋๋ค. ์ด ๋ฒ์น์ "์ต์ํ์ ์ง์ ์์น(The Principle of Least Knowledge)์ผ๋ก ์๋ ค์ ธ ์์ผ๋ฉฐ, ๋ชจ๋์ ์์ ์ด ์กฐ์ํ๋ ๊ฐ์ฒด์ ์์ฌ์ ์ ๋ชฐ๋ผ์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ค์ ๋ก Demeter๋ผ๋ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ ๊ฐ๋ฐ์๋ค์ ์ด๋ค ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์ ๋ํด ์ง๋์น๊ฒ ๋ง์ ์ ๋ณด๋ฅผ ์๊ณ ์๋ค ๋ณด๋, ์๋ก์ ๋ํ ๊ฒฐํฉ๋๊ฐ ๋์์ง๊ณ ์ด๋ก ์ธํด ์ข์ง ๋ชปํ ์ค๊ณ๋ฅผ.. 2023. 2. 1. ์๋ฐ์์ ๋์์ฑ์ ํด๊ฒฐํ๋ ๋ค์ํ ๋ฐฉ๋ฒ๊ณผ Redis์ ๋ถ์ฐ๋ฝ ์ด๋ฒ ํฌ์คํ ์ ์ฌ์ ์ง์์ผ๋ก ์ด์์ฒด์ ์ ๋๊ธฐํ ์ด๋ก ์ ๋ํด ์๊ณ ์์ด์ผ ์์ฝ๊ฒ ์ดํดํ ์ ์์ผ๋ฏ๋ก, ํท๊ฐ๋ฆฌ์๋ ๋ถ๋ค์ ์๋ ํฌ์คํ ์ ๋จผ์ ์ฝ๊ณ ์ด๋ฒ ํฌ์คํ ์ ์ฝ์ด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค. [OS] ํ๋ก์ธ์ค ๋๊ธฐํ(Process Synchronization) ์๋ก ํ๋ ฅ์ ํ๋ก์ธ์ค๋ ์์คํ ๋ด์์ ์คํ ์ค์ธ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์คํ์ ์ํฅ์ ์ฃผ๊ฑฐ๋ ์ํฅ์ ๋ฐ๋ ํ๋ก์ธ์ค์ ๋๋ค. ํ๋ ฅ์ ํ๋ก์ธ์ค๋ ๋ ผ๋ฆฌ ์ฃผ์ ๊ณต๊ฐ(์ฆ, ์ฝ๋ ๋ฐ ๋ฐ์ดํฐ)์ ์ง์ ๊ณต์ ํ๊ฑฐ dkswnkk.tistory.com ๊ณต์ ์์์ ๋ํด ๋์์ ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ์ ๊ทผํ์ฌ ์๊ธฐ๋ ๊ฒฝ์ ์ํฉ(race condition)์ ์ฐ๋ฆฌ๋ ๋์์ฑ ๋ฌธ์ ๋ผ๊ณ ๋ ํ๋ฉฐ, ๋ ์์ธํ๋ ๋์ผํ ํ๋์ ๋ฐ์ดํฐ์ ๋ ๊ฐ ์ด์์ ์ค๋ ๋, ํน์ ์ธ์ ์์ ๊ฐ๋ณ ๋ฐ์ดํฐ๋ฅผ ๋์์ ์ ์ดํ .. 2023. 1. 8. ํด์ ์๋ฃ๊ตฌ์กฐ์, ํด์ ์ถฉ๋ ๊ทธ๋ฆฌ๊ณ Java์ HashMap ๋์ ๋ฐฉ๋ฒ ๋ชฉ์ฐจ ํด์๋? ํด์ํจ์๋? ํด์ ์ถฉ๋ ์ํ ๋ฐฉ๋ฒ Java์์ HashMap ๋์ ๋ฐฉ๋ฒ ํด์(Hash)๋? ํด์(Hash) ๊ตฌ์กฐ๋, key-value์์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก์จ, ํด์ ๊ตฌ์กฐ์์๋ key๋ฅผ ์ด์ฉํ์ฌ value๋ฅผ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค. ํ์ด์ฌ์ Dicitionary, ๋ฃจ๋น์ Hash, Java์ HashMap, C++์ unordered_map์ด ํด์ ํ ์ด๋ธ์ ๋ํ์ ์ธ ์์ ๋๋ค. ํด์ ํจ์(Hash Function)์ด๋? ํด์ ํจ์๋, ์์ ๊ธธ์ด์ ์ ๋ ฅ ๊ฐ์ ๊ณ ์ ๊ธธ์ด์ ์ํธํ๋ ์ถ๋ ฅ์ผ๋ก ๋ณํํด์ฃผ๋ ํจ์์ ๋๋ค. key๋ฅผ ํด์ ํจ์์ ๋ฃ์ด์ ๋์ค๋ ๊ฒฐ๊ณผ๊ฐ hash์ด๋ฉฐ, ๊ฒฐ๊ตญ ํด์ ํจ์๋ key๋ฅผ hash๋ก ๋ง๋ค์ด๋ด๋ ํจ์์ ๋๋ค. ํด์ ํจ์๋ ๋ค์๊ณผ ๊ฐ์ ํฌ๊ฒ ์ธ ๊ฐ์ง์ ํน์ง.. 2022. 12. 30. ์ด์ 1 2 3 ๋ค์