๐Ÿ”  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์–ธ์–ด/โ˜•๏ธ Java

    Java :: LocalDateTime ์„ Epoch Time ์œผ๋กœ ๋ฐ”๊พธ๊ธฐ

    Java :: LocalDateTime ์„ Epoch Time ์œผ๋กœ ๋ฐ”๊พธ๊ธฐ

    ๋‚ ์งœ ์ •๋ณด๋ฅผ API ๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „์†กํ•˜๋Š” ์ค‘ ๋‚ ์งœ ๋ฐ์ดํ„ฐ๋ฅผ Epoch Millisecond ํ˜•์‹์œผ๋กœ ๋‹ฌ๋ผ๋Š” ์š”์ฒญ์„ ๋ฐ›์•˜๋‹ค. Java8 LocalDateTime ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฅผ Epoch ์‹œ๊ฐ„์œผ๋กœ ๋ณ€๊ฒฝํ•ด๋ณด์ž. LocalDateTime โ†’ Epoch Second long toEpochSecond(ZoneOffset offset) ์„ ์‚ฌ์šฉํ•˜์ž. long timeInSeconds = localDateTime.toEpochSecond(ZoneOffset.UTC); LocalDateTime โ†’ Epoch Milliseconds Instant instant = localDateTime.atZone(ZoneId.systemDefault()).toInstant(); long timeInMillis = inst..

    Java :: ๊ฐ์ฒด์ง€ํ–ฅ ํŒจ๋Ÿฌ๋‹ค์ž„

    Java :: ๊ฐ์ฒด์ง€ํ–ฅ ํŒจ๋Ÿฌ๋‹ค์ž„

    ์ ์ ˆํ•œ ๊ฐ์ฒด์—๊ฒŒ ์ ์ ˆํ•œ ์ฑ…์ž„์„ ํ• ๋‹นํ•˜์—ฌ ์„œ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›์œผ๋ฉฐ ํ˜‘๋ ฅํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ ์ ์  ์ฆ๊ฐ€ํ•˜๋Š” SW ๋ณต์žก๋„๋ฅผ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•ด ๊ฐ์ฒด์ง€ํ–ฅ ํŒจ๋Ÿฌ๋‹ค์ž„ ๋Œ€๋‘ ์ค‘์š”ํ•œ ๋‘ ๊ฐ€์ง€ ํฌ์ธํŠธ 1. ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ ๊ฐ์ฒด์— ์ดˆ์ ์„ ๋งž์ถ”๋Š” ๊ฒƒ 2. ๊ฐ์ฒด๋“ค์—๊ฒŒ ์–ผ๋งˆ๋‚˜ ์ ์ ˆํ•œ ์—ญํ• ๊ณผ ์ฑ…์ž„์„ ํ• ๋‹นํ•˜๋Š”๊ฐ€ ์ ˆ์ฐจ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ฐจ์ด ์ฑ…์ž„์ด ํ•œ ๊ณณ์— ์ง‘์ค‘๋˜์–ด ์žˆ๋Š” ๋ฐฉ์‹์ธ๊ฐ€ โ†’ ์ ˆ์ฐจ์ง€ํ–ฅ ์ฑ…์ž„์ด ์—ฌ๋Ÿฌ ๊ฐ์ฒด๋กœ ์ ์ ˆํžˆ ๋ถ„์‚ฐ๋˜์–ด ์žˆ๋Š” ๋ฐฉ์‹์ธ๊ฐ€ โ†’ ๊ฐ์ฒด์ง€ํ–ฅ High cohesion, loose coupling ๋†’์€ ์‘์ง‘๋„์™€ ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„์„ฑ๊ฒฉ์ด ๋‹ค๋ฅธ ๊ฒƒ๋“ค์€ ๋ถ„๋ฆฌ๋ฅผ ์‹œํ‚ค๋Š” ๊ฒƒ ! ์‘์ง‘๋„๊ฐ€ ๋†’์€, ๋น„์Šทํ•œ ๊ฒƒ๋ผ๋ฆฌ๋Š” ํ•˜๋‚˜๋กœ ๋ชจ์•„๋‘๊ณ , ๋˜ํ•œ ๋ณ€ํ™”๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ, ๋‹ค๋ฅธ ๊ณณ์—๋Š” ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š”๋‹ค. ์žฅ์ ์ด ๋ฌด์—‡์ผ๊นŒ ? ๋ณ€๊ฒฝ์ด ์ƒ๊ฒผ์„ ๋•Œ ๋ณ€๊ฒฝ์˜ ..

    Java :: ๊ฐ์ฒด์ง€ํ–ฅ์˜ 5๊ฐ€์ง€ ์„ค๊ณ„์›์น™ SOLID

    Java :: ๊ฐ์ฒด์ง€ํ–ฅ์˜ 5๊ฐ€์ง€ ์„ค๊ณ„์›์น™ SOLID

    SRP : Single Responsibility Principle (๋‹จ์ผ ์ฑ…์ž„์˜ ์›์น™) OCP : Open/Closed Principle (๊ฐœ๋ฐฉ ํ์‡„์˜ ์›์น™) ํ™•์žฅ์—๋Š” ์—ด๋ ค์žˆ๊ณ  ๋ณ€๊ฒฝ์—๋Š” ๋‹ซํ˜€์žˆ๋‹ค. ์ฆ‰, ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. LSP : Liskovโ€™s Subsititution Principle (๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜์˜ ์›์น™) ์ƒ์œ„ ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ํ•˜์œ„ ํƒ€์ž…์˜ ๊ฐ์ฒด๋กœ ์น˜ํ™˜ํ•ด๋„ ๋™์ž‘์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์–ด์•ผ ํ•œ๋‹ค. ISP : Interface Segregation Principle (์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ์˜ ์›์น™) ๋งŽ์€ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ž‘์€ ๊ธฐ๋Šฅ ๋‹จ์œ„์˜ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ํ•„์š”ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•ด์„œ๋งŒ ๊ตฌํ˜„์ฒด๋ฅผ ๋งŒ๋“ ๋‹ค. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด์„œ ์˜์กด์„ฑ..

    Java :: Stream์œผ๋กœ Random ์ˆ˜ ์ƒ์„ฑ

    Java :: Stream์œผ๋กœ Random ์ˆ˜ ์ƒ์„ฑ

    ๋‚œ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” Random ํด๋ž˜์Šค ์—๋Š” ์•„๋ž˜ ์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œ๋“ค์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. ์ด ๋ฉ”์†Œ๋“œ๋“ค์€ ํ•ด๋‹น ํƒ€์ž…์˜ ๋‚œ์ˆ˜๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ์ŠคํŠธ๋ฆผ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. IntStream ints() LongStream longs() DoubleStream doubles() ์ด ๋ฉ”์†Œ๋“œ๋“ค์ด ๋ฐ˜ํ™˜ํ•˜๋Š” ์ŠคํŠธ๋ฆผ์€ ํฌ๊ธฐ๊ฐ€ ์ •ํ•ด์ง€์ง€ ์•Š์€ ๋ฌดํ•œ ์ŠคํŠธ๋ฆผ ์ด๋ฏ€๋กœ limit() ๋„ ๊ฐ™์ด ์‚ฌ์šฉํ•ด์„œ ์ŠคํŠธ๋ฆผ์˜ ํฌ๊ธฐ๋ฅผ ์ œํ•œํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. limit() ์€ ์ŠคํŠธ๋ฆผ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๊ณ  ๋ฌดํ•œ ์ŠคํŠธ๋ฆผ์„ ์œ ํ•œ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค. IntStream intStream = new Random().ints(); //๋ฌดํ•œ ์ŠคํŠธ๋ฆผ intStream.limit(5).forEach(System.out::println); //5๊ฐœ์˜ ์š”์†Œ๋งŒ ์ถœ๋ ฅ ๋งค๊ฐœ๋ณ€์ˆ˜..

    Java :: ๋žŒ๋‹ค์™€ ์ŠคํŠธ๋ฆผ (2/2)

    Java :: ๋žŒ๋‹ค์™€ ์ŠคํŠธ๋ฆผ (2/2)

    ๋‚จ๊ถ์„ฑ ์ €์ž์˜ Java์˜ ์ •์„ 3ํŒ ์Šคํ„ฐ๋”” ์ŠคํŠธ๋ฆผ์ด๋ž€ ? ๋งŽ์€ ์ˆ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ, ์ปฌ๋ ‰์…˜์ด๋‚˜ ๋ฐฐ์—ด์— ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ , for ๋ฌธ์ด๋‚˜ Iterator ๋ฅผ ์ด์šฉํ•ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ๋ฐฉ์‹์˜ ์ฝ”๋“œ๋Š” ๋„ˆ๋ฌด ๊ธธ๊ณ  ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง„๋‹ค. (์žฌ์‚ฌ์šฉ์„ฑ๋„) ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” ๋ฐ์ดํ„ฐ ์†Œ์Šค๋งˆ๋‹ค ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๋‹ค๋ค„์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด List ๋ฅผ ์ •๋ ฌํ•  ๋•Œ๋Š” Collections.sort() ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๊ณ , ๋ฐฐ์—ด์„ ์ •๋ ฌํ•  ๋•Œ๋Š” Arrays.sort() ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ์ด๋Ÿฐ ๋ฌธ์ œ์ ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋งŒ๋“  ๊ฒƒ์ด ์ŠคํŠธ๋ฆผ(stream) ์ด๋‹ค ! ์ŠคํŠธ๋ฆผ์€ ๋ฐ์ดํ„ฐ ์†Œ์Šค๋ฅผ ์ถ”์ƒํ™”ํ•˜๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š”๋ฐ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”์†Œ๋“œ๋“ค์„ ์ •์˜ํ•ด๋†“์•˜๋‹ค. ๋ฐ์ดํ„ฐ ์†Œ์Šค๊ฐ€ ๋ฌด์—‡์ด๋˜ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๊ณ , ์ฝ”๋“œ์˜ ์žฌ์‚ฌ..

    Java :: ๋žŒ๋‹ค์™€ ์ŠคํŠธ๋ฆผ (1/2)

    Java :: ๋žŒ๋‹ค์™€ ์ŠคํŠธ๋ฆผ (1/2)

    ๋‚จ๊ถ์„ฑ ์ €์ž์˜ Java์˜ ์ •์„ 3ํŒ ์Šคํ„ฐ๋”” ์ž๋ฐ”๋Š” ์ž๋ฐ”8 (JDK1.8) ์—์„œ ๋žŒ๋‹ค์‹์ด ์ถ”๊ฐ€๋˜๋ฉด์„œ ๊ฐ์ฒด์ง€ํ–ฅ์–ธ์–ด์ธ ๋™์‹œ์— ํ•จ์ˆ˜ํ˜• ์–ธ์–ด๊ฐ€ ๋˜์—ˆ๋‹ค. ๋žŒ๋‹ค์‹์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž ๐Ÿ˜Š ๋žŒ๋‹ค์‹์ด๋ž€ ? ๋žŒ๋‹ค์‹์€ ๊ฐ„๋‹จํžˆ ๋งํ•ด method ๋ฅผ ํ•˜๋‚˜์˜ ์‹(expression)์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ฒƒ์ด๋‹ค. method ๋ฅผ ๋žŒ๋‹ค์‹์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด method์˜ ์ด๋ฆ„๊ณผ ๋ฐ˜ํ™˜๊ฐ’์ด ์‚ฌ๋ผ์ง€๋ฏ€๋กœ, ๋žŒ๋‹ค์‹์„ ์ต๋ช…ํ•จ์ˆ˜(anonymous function) ์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค. int[] arr = new int[5]; Arrays.setAll(arr, (i) -> (int)(Math.random() * 5) + 1); // ์œ„ ๋žŒ๋‹ค์‹์„ method ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค. int method() { return (int)(Math.random() * 5) + ..

    Java :: Collection Class

    Java :: Collection Class

    ๋‚จ๊ถ์„ฑ ์ €์ž์˜ Java์˜ ์ •์„ 3ํŒ ์Šคํ„ฐ๋”” ์ด์ „ ๊ธ€์—์„œ Collections Framework ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜๋‹ค. ์ด๋ฒˆ์—๋Š” Collections Framework ์˜ ํด๋ž˜์Šค๋“ค์„ ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค. ๋‹ค๋ฃฐ ํด๋ž˜์Šค โฌ‡๏ธ ArrayList LinkedList Stack, Queue Iterator, ListIterator, Enumeration Arrays Comparator, Comparable HashSet TreeSet HashMap, Hashtable TreeMap Properties Collections ArrayList List ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ–ˆ๊ณ , ๊ธฐ์กด์˜ Vector ๋ฅผ ๊ฐœ์„ ํ•œ ํด๋ž˜์Šค. ๐Ÿ’ก Vector ๋Š” ๊ธฐ์กด์— ์ž‘์„ฑ๋œ ์†Œ์Šค์™€์˜ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ๋‚จ๊ฒจ๋‘๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— Vector ๋ณด๋‹ค๋Š” Ar..

    Java :: Collections Framework

    Java :: Collections Framework

    ๋‚จ๊ถ์„ฑ ์ €์ž์˜ Java์˜ ์ •์„ 3ํŒ ์Šคํ„ฐ๋”” Collections Framework ๋Š” ๋ฐ์ดํ„ฐ ๊ทธ๋ฃน์„ ๋‹ค๋ฃจ๊ณ  ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ๋‹จ์ผํ™”๋œ ๊ตฌ์กฐ ๋ผ๊ณ  ์ •์˜ํ•˜๊ณ  ์žˆ๋‹ค (Java API docs) ๋ฌด์Šจ ๋ง์ธ์ง€๋Š” ์ฒœ์ฒœํžˆ ์ฝ์–ด๊ฐ€๋‹ค๋ณด๋ฉด ์ดํ•ด๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค ๐Ÿ™‚ Collections Framework ๋ž€ Collections Framework ์€ ์ปฌ๋ ‰์…˜์ด๋‚˜ ๋‹ค์ˆ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐ์— ํ•„์š”ํ•œ ๋‹ค์–‘ํ•œ ํด๋ž˜์Šค๋“ค์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค. ๊ฐ์ฒด์ง€ํ–ฅ์  ์„ค๊ณ„๋ฅผ ํ†ตํ•ด ํ‘œ์ค€ํ™”๋˜์–ด ์žˆ์–ด์„œ ์‚ฌ์šฉ๋ฒ• ์ตํžˆ๊ธฐ์—๋„ ํŽธ๋ฆฌํ•˜๊ณ  ์žฌ์‚ฌ์šฉ์„ฑ ๋†’์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•ต์‹ฌ ์ธํ„ฐํŽ˜์ด์Šค Collections Framework ์—์„œ๋Š” Collection Data ๊ทธ๋ฃน์„ ํฌ๊ฒŒ 3๊ฐ€์ง€ ํƒ€์ž…์œผ๋กœ ๋ณด๊ณ  ๊ฐ ์ปฌ๋ ‰์…˜์„ ๋‹ค๋ฃจ๋Š”๋ฐ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„, 3๊ฐœ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ •์˜ํ–ˆ๋‹ค. ..