JAVA/study(9)
-
[JAVA] ๋ ์๋ฐ, Java 8 ์ ๋ ธํ ์ด์ ๋ณํ, ๋ฐฐ์ด Parallel ์ ๋ ฌ, Metaspace
1๏ธโฃ ์ ๋ ธํ ์ด์ ๋ณํ ์๋ฐ8 ๋ถํฐ ์ ๋ ธํ ์ด์ ์ ํ์ ์ ์ธ๋ถ์๋ ์ฌ์ฉํ ์ ์๊ฒ ๋จ ์๋ฐ8๋ถํฐ ์ ๋ ธํ ์ด์ ์ ์ค๋ณตํด์ ์ฌ์ฉํ ์ ์๊ฒ ๋จ ํ์ ์ ์ธ๋ถ -> ์ ๋ค๋ฆญ ํ์ , ๋ณ์ ํ์ , ๋งค๊ฐ๋ณ์ ํ์ , ์์ธ ํ์ .. ํ์ ์ ์ฌ์ฉํ ์ ์์ผ๋ ค๋ฉด TYPE_PRARMETER : ํ์ ๋ณ์์๋ง ์ฌ์ฉํ ์ ์๋ค. TYPE_USE : ํ์ ๋ณ์๋ฅผ ํฌํจํด์ ๋ชจ๋ ํ์ ์ ์ธ๋ถ์ ์ฌ์ฉํ ์ ์๋ค. ์ค๋ณต ์ ๋ ธํ ์ด์ ๋ง๋ค๊ธฐ -> ์ค๋ณต ์ฌ์ฉํ ์ ๋ ธํ ์ด์ ๋ง๋ค๊ธฐ -> ์ค๋ณต ์ ๋ ธํ ์ด์ ์ปจํ ์ด๋ ๋ง๋ค๊ธฐ : ์ปจํ ์ด๋ ์ ๋ ธํ ์ด์ ์ ์ค๋ณต ์ ๋ ธํ ์ด์ ๊ณผ @Retention๊ณผ @Target์ด ๊ฐ๊ฑฐ๋ ๋ ๋์ด์ผ ํ๋ค. 2๏ธโฃ ๋ฐฐ์ด Parallel ์ ๋ ฌ Arrays.parallelSort() : Fork/join ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํด์ ๋ฐฐ์ด์ ๋ณ๋ ฌ๋ก ..
2022.04.11 -
[JAVA] ๋ ์๋ฐ, Java 8 CompletableFuture
1๏ธโฃ Concurrent ์ํํธ์จ์ด ๋? ๋์์ ์ฌ๋ฌ ์์ ์ ํ ์ ์๋ ์ํํธ์จ์ด ์) ์น ๋ธ๋ผ์ฐ์ ๋ก ์ ํ๋ธ๋ฅผ ๋ณด๋ฉด์ ํค๋ณด๋๋ก ๋ฌธ์์ ํ์ดํ์ ํ ์ ์๋ค. ์) ๋ นํ๋ฅผ ํ๋ฉด์ IntelliJ๋ก ์ฝ๋ฉ์ ํ๊ณ ์๋์ ์ ์ด๋ ๋ฌธ์๋ฅผ ๋ณด๊ณ ๋ ์์ ํ ์ ์๋ค. 2๏ธโฃ ์๋ฐ์์ ์ง์ํ๋ Concurrent ํ๋ก๊ทธ๋๋ฐ : ๋ฉํฐ ํ๋ก์ธ์ฑ(ProcessBuilder), ๋ฉํฐ ์ฐ๋ ๋ 3๏ธโฃ ์๋ฐ ๋ฉํฐ์ฐ๋ ๋ ํ๋ก๊ทธ๋๋ฐ Thread/ Runnable - ์ฐ๋ ๋๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ Thread ์์๋ฐ์์ ๊ตฌํ Runnable ๊ตฌํ ๋๋ ๋๋ค - ์ฐ๋ ๋์ ์ฃผ์ ๊ธฐ๋ฅ ํ์ฌ ์ฐ๋ ๋ ๋ฉ์ถฐ๋๊ธฐ (sleep) ๋ค๋ฅธ ์ฐ๋ ๋ ๊นจ์ฐ๊ธฐ (interrupt) ๋ค๋ฅธ ์ฐ๋ ๋ ๊ธฐ๋ค๋ฆฌ๊ธฐ (join) 4๏ธโฃ Executors : ๊ณ ์์คHigh-Level..
2022.04.11 -
[JAVA] ๋ ์๋ฐ, Java 8 Date์ Time API
1๏ธโฃ ์ด์ Date์ Time java 8 ์ ์๋ก์ด ๋ ์ง์ ์๊ฐ API๊ฐ ์๊ธด ์ด์ -> ๊ทธ์ ๊น์ง ์ฌ์ฉํ๋ java.util.Date ํด๋์ค๋ mutuable(๋ณ๊ฒฝ์ด ์ฌ์ด) ๋๋ฌธ์ Thread safeํ์ง ์์๋ค. -> ํด๋์ค ์ด๋ฆ์ด ๋ช ํํ์ง ์๋ค. (Date์ธ๋ฐ ์๊ฐ์ ๋ค๋ฃจ๊ธฐ๋ ํ๊ณ ์ด๋ฆ์ด ์ข ํท๊ฐ๋ฆฐ๋ค.) -> ๋ฒ๊ทธ ๋ฐ์ํ ์ฌ์ง๊ฐ ๋ง๋ค. (ํ์ ์์ ์ฑ์ด ์๊ณ , ์์ด 0๋ถํฐ ์์..) -> ๋ ์ง ์๊ฐ ์ฒ๋ฆฌ๊ฐ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ๋ณดํต joda time์ ์ฌ์ฉํ๊ณค ํ๋ค. 2๏ธโฃ ์ฃผ์ API - ๊ธฐ๊ณ์ฉ ์๊ฐ machine Time ๊ณผ ์ธ๋ฅ์ฉ ์๊ฐ human time์ผ๋ก ๋๋ ์ ์๋ค. - ๊ธฐ๊ณ์ฉ ์๊ฐ epoke (1970๋ 1์ 1์ผ 0์ 0๋ถ 0์ด)๋ถํฐ ํ์ฌ๊น์ง์ ํ์ ์คํฌํ๋ฅผ ํํํ ์ ์๋ค. -..
2022.04.11 -
[JAVA] ๋ ์๋ฐ, Java 8 Optional
1๏ธโฃ Optional ํ๋ก๊ทธ๋๋ฐ์ ํ๋ค๋ณด๋ฉด ๊ฐ๋ฐ์์ ์ค์๋ก ์ธํด null์ ๋ฆฌํดํ๊ฑฐ๋ null ์ฒดํฌ๋ฅผ ๊น๋นกํด์ NPE(NullPointerExecption)์ ์ข ์ข ๋ณด๊ฒ ๋๋ค. ๋ฉ์๋์์ ์์ ํ๋ค๋ณด๋ฉด ํน๋ณํ ์ํฉ์์ ๊ฐ์ ์ ๋๋ก ๋ฆฌํดํ ์ ์๋ ๊ฒฝ์ฐ์๋ ์์ธ๋ฅผ ๋์ง๊ฑฐ๋ , null์ ๋ฆฌํดํด ํด๋ผ์ด์ธํธ ์ฝ๋์์ ์ฃผ์ํ๊ฑฐ๋, Optional(java8๋ถํฐ!)์ ๋ฆฌํดํ๋ค. Optional์ด๋? ์ค์ง ๊ฐ ํ ๊ฐ๊ฐ ๋ค์ด์์์๋ ์์์๋ ์๋ ์ปจํ ์ด๋ Optional ์ฌ์ฉ์ ์ฃผ์ํ ์ - Optional์ ๋ฆฌํด๊ฐ์ผ๋ก๋ง ์ฐ๊ธฐ๋ฅผ ๊ถ์ฅํ๋ค. -> ๋ฉ์๋ ๋งค๊ฐ๋ณ์ ํ์ , ๋งต์ ํค ํ์ , ์ธ์คํด์ค ํ๋ ํ์ ์ผ๋ก ์ฐ์ง๋ง๊ธฐ - Optional์ ๋ฆฌํดํ๋ ๋ฉ์๋์์ null์ ๋ฆฌํดํ์ง ๋ง์. - Primitive ํ์ ์ฉ Opt..
2022.04.11 -
[JAVA] ๋ ์๋ฐ, Java 8 Stream
1๏ธโฃ Stream ์คํธ๋ฆผ์ ๋ฐ์ดํฐ๋ฅผ ๋ด๊ณ ์๋ ์ ์ฅ์(Collection) ์ด ์๋๋ค! Functional in nature, ์คํธ๋ฆผ์ด ์ฒ๋ฆฌํ๋ ๋ฐ์ดํฐ ์์ค๋ฅผ ๋ณ๊ฒฝํ์ง ์๋๋ค. ์คํธ๋ฆผ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐ์ดํฐ๋ ์ค์ง ํ๋ฒ๋ง ์ฒ๋ฆฌํ๋ค! ๋ฌด์ ํ์ผ ์๋ ์๋ค. -> ๊ทผ๋ฐ Short Circuit ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ์ ํํ ์ ์๋ค. ์ค๊ฐ ์คํผ๋ ์ด์ ์ ๊ทผ๋ณธ์ ์ผ๋ก lazyํ๋ค. ์์ฝ๊ฒ ๋ณ๋ ฌ์ฒ๋ฆฌํ ์ ์๋ค. 2๏ธโฃ ์คํธ๋ฆผ ํ์ดํ๋ผ์ธ 0 ๋๋ ๋ค์์ ์ค๊ฐ ์คํผ๋ ์ด์ (Intermediate operation) ๊ณผ ํ๊ฐ์ ์ข ๋ฃ ์คํผ๋ ์ด์ (Terminal operation)์ผ๋ก ๊ตฌ์ฑํ๋ค. ์คํธ๋ฆผ์ ๋ฐ์ดํฐ ์์ค๋ ์ค์ง ํฐ๋ฏธ๋ ์คํผ๋ ์ด์ ์ ์คํํ ๋์๋ง ์ฒ๋ฆฌํ๋ค. 3๏ธโฃ ์ค๊ฐ ์คํผ๋ ์ด์ Stream์ ๋ฆฌํดํ๋ค. Stateless/..
2022.04.06 -
[JAVA] ๋ ์๋ฐ, Java 8 ์ธํฐํ์ด์ค ๋ณํ
1๏ธโฃ ๊ธฐ๋ณธ ๋ฉ์๋ Default Methods ์ธํฐํ์ด์ค์ ๋ฉ์๋ ์ ์ธ์ด ์๋๋ผ ๊ตฌํ์ฒด๋ฅผ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ ํด๋น ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค๋ฅผ ๊นจํธ๋ฆฌ์ง ์๊ณ ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ์ ์๋ค. ๊ธฐ๋ณธ ๋ฉ์๋๋ ๊ตฌํ์ฒด๊ฐ ๋ชจ๋ฅด๊ฒ ์ถ๊ฐ๋ ๊ธฐ๋ฅ์ผ๋ก ๊ทธ ๋งํผ ๋ฆฌ์คํฌ๊ฐ ์๋ค. -> ์ปดํ์ผ ์๋ฌ๋ ์๋์ง๋ง ๊ตฌํ์ฒด์ ๋ฐ๋ผ ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์๋ค. -> ๋ฐ๋์ ๋ฌธ์ํํ ๊ฒ!! (@ImpleSpec ์๋ฐ๋ ํ๊ทธ ์ฌ์ฉ!) Object๊ฐ ์ ๊ณตํ๋ ๊ธฐ๋ฅ(equals, hasCode)๋ ๊ธฐ๋ณธ ๋ฉ์๋๋ก ์ ๊ณตํ ์ ์๋ค. -> ๊ตฌํ์ฒด๊ฐ ์ฌ์ ์ํด์ผํ๋ค. ๋ณธ์ธ์ด ์์ ํ ์ ์๋ ์ธํฐํ์ด์ค์๋ง ๊ธฐ๋ณธ ๋ฉ์๋๋ฅผ ์ ๊ณตํ ์ ์๋ค. ์ธํฐํ์ด์ค๋ฅผ ์์๋ฐ๋ ์ธํฐํ์ด์ค์์ ๋ค์ ์ถ์ ๋ฉ์๋๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค. ์ธํฐํ์ด์ค ๊ตฌํ์ฒด๊ฐ ์ฌ์ ์ํ ์๋ ์๋ค. de..
2022.04.06 -
[JAVA] ๋ ์๋ฐ, Java 8 ํจ์ํ ์ธํฐํ์ด์ค์ ๋๋ค ํํ์
1๏ธโฃ ํจ์ํ ์ธํฐํ์ด์ค (Functional Interface) ํจ์ํ ์ธํฐํ์ด์ค๋ ์ถ์ ๋ฉ์๋๋ฅผ ๋ฑ ํ๋๋ง ๊ฐ์ง๊ณ ์๋ ์ธํฐํ์ด์ค๋ฅผ ๋งํ๋ค. SAM(Single Abstract Method) ์ธํฐํ์ด์ค @FunctionalInterface ์ ๋ ธํ ์ด์ ์ ๊ฐ์ง๊ณ ์๋ ์ธํฐํ์ด์ค์ด๋ค. 2๏ธโฃ ๋๋ค ํํ์ (Lambda Expression) ํจ์ํ ์ธํฐํ์ด์ค์ ์ธ์คํด์ค๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ผ๋ก ์ฐ์ผ ์ ์๋ค. ์ฝ๋๋ฅผ ์ค์ผ ์ ์๋ค!! ๋งค์๋ ๋งค๊ฐ๋ณ์, ๋ฆฌํด ํ์ , ๋ณ์๋ก ๋ง๋ค์ด ์ฌ์ฉํ ์๋ ์๋ค. -> ์ด๋ ๊ฒ ์ต๋ช ๋ด๋ถ ํจ์๋ก ํจ์ํ ์ธํฐํ์ด์ค์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค ์ ์๋๋ฐ ์ฌ๊ธฐ์ ๋๋ค๋ฅผ ์ฌ์ฉํด์ ์ฝ๋๋ฅผ ์ข ๋ ์ค์ผ ์ ์๋ค. 3๏ธโฃ ์๋ฐ์์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ํจ์๋ฅผ First Class Object๋ก ์ฌ์ฉํ ์ ์..
2022.04.06 -
[JAVA] 1. ์๋ฐ 8, LTS์ ๋น LTS ์ฐจ์ด, ์๋ฐ8 ์ฃผ์ ๊ธฐ๋ฅ
1๏ธโฃ ์๋ฐ 8 ์๋ฐ 8์ ์ถ์๋ 2014๋ 3์์ ๋์๊ณ , LTS ๋ฒ์ ์ด์๊ณ ๋ค์ LTS ๋ฒ์ ์ ์๋ฐ 17์ด๋ผ๊ณ ํ๋ค. 2๏ธโฃ LTS(Long-Term-Support)์ ๋น LTS์ ์ฐจ์ด์ - ๋น LTS๋ ์ ๊ณต๊ธฐ๊ฐ์ด ์งง๋ค. - ๋น LTS๋ ๋ฐฐํฌ ์ฃผ๊ธฐ๊ฐ 6๊ฐ์๋ก ์ง์ ๊ธฐ๊ฐ๋ ๋ฐฐํฌ ์ดํ 6๊ฐ์์ด๋ค. - LTS ๋ฐฐํฌ ์ฃผ๊ธฐ๋ 3๋ ์ผ๋ก LTS ์ง์ ๊ธฐ๊ฐ์ 5๋ ์ด์์ผ๋ก JDK๋ฅผ ์ ๊ณตํ๋ ๋ฒค๋์ ์ด์ฉํ๋ ์๋น์ค์ ๋ฐ๋ผ ๋ค๋ฅด๋ค. - ์ค์ ์๋น์ค ์ด์ ํ๊ฒฝ์์๋ LTS ๋ฒ์ ์ ๊ถ์ฅํ๋๋ฐ ๊ทธ ์ด์ ๋ ๋น LTS๋ ์์์ ๋งํ๋๊ฒ๊ณผ ๊ฐ์ด ์ ๊ณต๊ธฐ๊ฐ์ด ์งง๊ณ ๋ค์ ๋ฒ์ ์ด ๋์ค๋ฉด ๊ทธ ๋ค์๋ถํฐ๋ ๊ด๋ฆฌ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ด๋ค. 3๏ธโฃ ์๋ฐ8์ ์ฃผ์ ๊ธฐ๋ฅ - ๋๋ค ํํ์ - ๋ฉ์๋ ๋ ํผ๋ฐ์ค - Stream API - Optional ...
2022.04.06 -
[JAVA] Map- getOrDefault() ๋?
https://hyejin.tistory.com/508 [JAVA] ํ๋ก๊ทธ๋๋จธ์ค ๋ ๋ฒจ2. ์์ฅ ์คํ์ด๋ค์ ๋งค์ผ ๋ค๋ฅธ ์ท์ ์กฐํฉํ์ฌ ์ ์ด ์์ ์ ์์ฅํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์คํ์ด๊ฐ ๊ฐ์ง ์ท์ด ์๋์ ๊ฐ๊ณ ์ค๋ ์คํ์ด๊ฐ ๋๊ทธ๋ ์๊ฒฝ, ๊ธด ์ฝํธ, ํ๋์ ํฐ์ ์ธ ๋ฅผ ์ ์๋ค๋ฉด ๋ค ์๋ ์ ์ฒญ๋ฐ์ง๋ฅผ hyejin.tistory.com ํ๋ก๊ทธ๋๋จธ์ค ๋ ๋ฒจ2. ์์ฅ ๋ฌธ์ ๋ฅผ ํ๊ธฐ์ํด HashMap์ ์ฌ์ฉํ๋๋ฐ HashMap์ ๊ธฐ๋ณธํค๊ฐ์ด ๊ฐ์ผ๋ฉด value ๊ฐ์ ๋ฎ์ด๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ ๊ทธ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ด๋ป๊ฒ ํ ๊น ํ๋ค๊ฐ getOrDefault()๋ฉ์๋๋ฅผ ๋ฐ๊ฒฌํ๋ค. getOrDefault(Object key, V defaultValue) key: ๊ฐ์ ๊ฐ์ ธ์์ผํ๋ ์์์ ํค defaultValue : ์ง์ ๋ ํค๋ก ๋งคํ๋ ๊ฐ์ด ์๋ ..
2022.04.05