JAVA8
CompletableFuture๋ก ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ ๊ณต๋ถํ๊ธฐ!
CompletableFuture Future์์๋ ์ด๋์ ๋ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์ด ์ฃผ์์ง๋ง, ๋ถ์กฑํ ๋ถ๋ถ์ด ๋ง์๋ค. get()์ ์ฌ์ฉํ์ฌ ๋ธ๋กํน์ ํตํด์๋ง ์ฝ๋ฐฑ์ ์คํ์ํฌ ์ ์๋ค. Future๋ค์ ์กฐํฉํ๋ ๊ฒ์ ์์ด์ ์ ํ๋๋ค. (๊ณผ๋ชฉ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์จ ๋ค ๊ทธ ๊ณผ๋ชฉ์ ์๊ฐํ๋ ํ์๋ค์ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ์ ํ๋๋ค.) ์์ธ์ฒ๋ฆฌ๊ฐ ๋ถ๊ฐ๋ฅํ๋ค. ์ด๋ฌํ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ณ ์ข ๋ ์๋ฒฝํ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ํด Java8์ ์๋ก ์ถ๊ฐ๋ ์ธํฐํ์ด์ค๊ฐ CompletableFuture์ด๋ค. CompletableFuture ์์ฑ CompletableFuture future = new CompletableFuture(); future.complete("jins"); future.get(); //String jins..
Java8์ ์๊ฐ API ์์๋ณด๊ธฐ(LocalDateTime, Instant ๋ฑ)
Date/Time API ๊ณผ๊ฑฐ API์ ๋ฌธ์ ์ ์๊ฐ API๋ก๋ Date์ GregorianCalendar๊ฐ ์๋ค. ์ด๋ฆ์ด ์ด์ํ๋ค. ๋ถ๋ช Date์ธ๋ฐ, ์๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์๋ค. Date์ ์๊ฐ์ ์ถ๋ ฅํด๋ณด๋ฉด longํ์ ์ ์ซ์๊ฐ ๋์จ๋ค.(์ด๋ ์๋ฐ์ epoch๋ก1970๋ 1์ 1์ผ 00์ ๊ธฐ์ค์ผ๋ก ํ์ฌ๊น์ง์ ์ด๋ฅผ ์๋ฏธํ๋ค. -> ๋จผ๊ฐ ์ฑ๋ฅ์ ์ธก์ ํ ๋ ์ฐ์ผ ๊ฒ ๊ฐ์ ๊ธฐ๊ณ์ ์ธ ์๊ฐ์ด๋ค.) mutableํ๋ค. ์๊ฐ์ ๊ฐ์ ๋ฃ์ด ๋ณ๊ฒฝ์ํฌ ์ ์๋ค.(์๋น์ค์ ์ฅ์ ๋ฅผ ์ผ์ผํค๋ ๊ต์ฅํ ํฐ ์์ธ) ์ค๋๋ ์ API ์ค๋๋ ์ API๋ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์ผ๋ฉฐ ๋ง์ฝ ๋ณ๊ฒฝ์ ํ๋ ค๊ณ ํ๋ฉด ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ฐํํด์ฃผ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ณ๊ฒฝ์ด ์ด๋ฃจ์ด์ง๋ค. ์ฆ Immutableํ๋ค. LocalDateTime ์ฌ๋๋ค์ด ์ฃผ๋ก ์ฌ์ฉํ๋ ์๊ฐ์ ์๋ฏธํ..
Optional์ ์์๋ณด์!
Optional์ด๋? null์ ๋ฆฌํด๋ฐ์ ์ฌ์ฉํ๋ฉด nullPointException์ด ๋ฐ์ํ๋ค. if(xx != null)์ ๊ฐ์ ์กฐ๊ฑด๋ฌธ์ผ๋ก null์ ์ฒดํฌํด์ ์ฌ์ฉํ๋ฉด ํด๊ฒฐํ ์ ์์. ํ์ง๋ง ๋งค๋ฒ ๊ทธ๋ ๊ฒ ํ๊ธฐ๊ฐ ๋ฒ๊ฑฐ๋ก์. ๋๋ฒ์งธ๋ก null์ return๋ฐ์ ์ํฉ์ Exeception์ ๋์ ธ์ค ์ ์์.(์ด ๊ฒฝ์ฐ๋ ๋นํจ์จ์ ์ธ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํด์ผํจ.) Optional์ ํ์ฉํ์ฌ null์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋ค. ์ด๋์ ์ฐ๋๊ฐ? public Optional getProgress() { // Optional๋ก ๊ฐ์ธ์ ๋ณด๋ด์ค๋ค. return Optional.ofNullable(progress); } ๋๋๋ก์ด๋ฉด return๋๋ ์์น์์ ์ฌ์ฉํ๋ฉด๋๋ค. ์ฌ์ฉํ๋ฉด ์๋๋ ๊ณณ : Map์ key(Map์ key๋ n..
์ธํฐํ์ด์ค์ default์ static ๋ฉ์๋ java8
java8์ ์ธํฐํ์ด์ค default Method java8์์ ์๋ก ์ถ๊ฐ๋ ๊ธฐ๋ฅ์ผ๋ก ์ธํฐํ์ด์ค์ ๊ธฐ๋ณธ ๋ฉ์๋๋ฅผ ์ ์ํ ์ ์๊ฒ ๋์๋ค. ๊ธฐ๋ณธ๋ฉ์๋๋ฅผ ์ ์ํ๋ ์ด์ ๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ตฌํ์ฒด๋ค์ด ๊ณตํต๋ ์ญํ ์ ์ํํ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํจ์ด๋ค. default๋ก ์ถ๊ฐํด์ค์ผ๋ก์จ ์๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ์๋ ๊ตฌํ์ฒด์์ ์๋ก์ด ๋ฉ์๋๋ฅผ ์ ์ํ ํ์๊ฐ ์์ด์ง๋ค. Default Method ๊ตฌํ ๋ฐฉ๋ฒ public interface Foo { String getName(); default void printUpperName() { System.out.println(getName().toUpperCase()); } } ์ ์ฒ๋ผ default๋ฅผ ํ์ฉํด ๋ฉ์๋๋ฅผ interface์์ ๊ตฌํํด ์ค ์ ์๋ค. ์ด ์ธํฐ..
ํจ์ํ ์ธํฐํ์ด์ค์ ๋๋ค์
ํจ์ํ ์ธํฐํ์ด์ค์ ๋๋ค์ ํจ์ํ ์ธํฐํ์ด์ค๋ฉ์๋๊ฐ ํ๋๋ง ์กด์ฌํ๋ ์ธํฐํ์ด์ค๋ฅผ ์๋ฏธํ๋ค. @FunctionalInterface public interface RunSomething { //์ถ์ ๋ฉ์๋๊ฐ ํ๋๋ง ์์ผ๋ฉด ํจ์ํ ์ธํฐํ์ด์ค abstract int doIt(int number); // static void printName(){ // System.out.println("jinseop"); // } // // default void printAge(){ // System.out.println("26"); // } } @FunctionalInterface annotation์ ๋ฐ๋์ ๋ถ์ฌ์ฃผ์ด ์ ์ํ๊ณ ์ถ์๋ฉ์๋ ํ๋๋ง ์กด์ฌํ๋ฉด ๋จ(abstract๋ ์๋ต๊ฐ๋ฅ) ์ด ๋ default์ static ์ด..