JAVA8

    CompletableFuture๋กœ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ณต๋ถ€ํ•˜๊ธฐ!

    CompletableFuture๋กœ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ณต๋ถ€ํ•˜๊ธฐ!

    CompletableFuture Future์—์„œ๋„ ์–ด๋Š์ •๋„ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์ฃผ์—ˆ์ง€๋งŒ, ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์ด ๋งŽ์•˜๋‹ค. get()์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ธ”๋กœํ‚น์„ ํ†ตํ•ด์„œ๋งŒ ์ฝœ๋ฐฑ์„ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์—†๋‹ค. Future๋“ค์„ ์กฐํ•ฉํ•˜๋Š” ๊ฒƒ์— ์žˆ์–ด์„œ ์ œํ•œ๋œ๋‹ค. (๊ณผ๋ชฉ์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ ๋’ค ๊ทธ ๊ณผ๋ชฉ์„ ์ˆ˜๊ฐ•ํ•˜๋Š” ํ•™์ƒ๋“ค์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด ์ œํ•œ๋œ๋‹ค.) ์˜ˆ์™ธ์ฒ˜๋ฆฌ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ณ  ์ข€ ๋” ์™„๋ฒฝํ•œ ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•ด Java8์— ์ƒˆ๋กœ ์ถ”๊ฐ€๋œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ CompletableFuture์ด๋‹ค. CompletableFuture ์ƒ์„ฑ CompletableFuture future = new CompletableFuture(); future.complete("jins"); future.get(); //String jins..

    Java8์˜ ์‹œ๊ฐ„ API ์•Œ์•„๋ณด๊ธฐ(LocalDateTime, Instant ๋“ฑ)

    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์„ ์•Œ์•„๋ณด์ž!

    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

    ์ธํ„ฐํŽ˜์ด์Šค์˜ 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 ์–ด..