Programming/Java28 28 Stream Java์์์ ์คํธ๋ฆผ(Stream)์ Java 8๋ถํฐ ๋์ ๋ ๊ธฐ๋ฅ์ผ๋ก, ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋๋ฐ ๊ฐ๋ ฅํ๊ณ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์คํธ๋ฆผ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋๋ฐ ์ค์ ์ ๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์คํ์ผ์ API๋ก์, ์ปฌ๋ ์ (๋ฆฌ์คํธ, ์ธํธ, ๋งต ๋ฑ)์ด๋ ๋ฐฐ์ด ๋ฑ์ ๋ค์ํ ๋ฐ์ดํฐ ์์ค๋ฅผ ํ์คํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ค๋ฃฐ ์ ์๊ฒ ํด์ค๋๋ค. ์คํธ๋ฆผ? ๋ค์ํ ๋ฐ์ดํฐ ์์ค(์ปฌ๋ ์ , ๋ฐฐ์ด)๋ฅผ ํ์คํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ค๋ฃจ๊ธฐ ์ํ ๊ฒ ์คํธ๋ฆผ(Stream)์ ์ค๊ฐ ์ฐ์ฐ(Intermediate Operations)๊ณผ ์ต์ข ์ฐ์ฐ(Terminal Operations)์ผ๋ก ๋๋์ด์ง๋๋ฐ, ์ค๊ฐ ์ฐ์ฐ์ ์คํธ๋ฆผ์ ๋ณํํ๊ฑฐ๋ ํํฐ๋งํ๋ ์์ ์ ์ํํ๊ณ , ์ต์ข ์ฐ์ฐ์ ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ์์ฑํ๊ฑฐ๋ ์คํธ๋ฆผ์ ๋ซ๋ ๋ฑ์ ์์ ์ ์ํํฉ๋๋ค. ์คํธ๋ฆผ ์ฃผ์ ํน์ง ๋ด๋ถ ๋ฐ๋ณต (I.. 2024. 1. 21. 27 Functional Interface (feat. Lambda) ์๋ฐ์์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ฃผ๋ก Java 8์์ ์ถ๊ฐ๋ ๋๋ค ํํ์ ๋ฐ ์คํธ๋ฆผ API๋ฅผ ํ์ฉํ์ฌ ๊ตฌํ๋ฉ๋๋ค. Java 8๋ถํฐ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ ์ด ๋์ ๋๋ฉด์ ์ฝ๋๋ฅผ ๋ ๊ฐ๊ฒฐํ๊ฒ ์์ฑํ๊ณ , ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ฝ๊ฒ ์ํํ ์ ์๊ฒ ๋์์ต๋๋ค. ๋๋ค ํํ์์ ์ต๋ช ํจ์๋ฅผ ์์ฑํ๋ ๊ฐ๊ฒฐํ ๋ฌธ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ ํจ์ํ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ฉ๋๋ค. ํจ์ํ ์ธํฐํ์ด์ค๋ ํ๋์ ์ถ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง ์ธํฐํ์ด์ค๋ฅผ ์๋ฏธํ๋ฉฐ, ๋๋ค ํํ์์ผ๋ก ํด๋น ๋ฉ์๋๋ฅผ ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์์ต๋๋ค. ์ฝ๋ ์์ 1 ์ฝ๋ ์์ 2 ๋๋ค์์ ๋ฉ์๋์ ์ด๋ฆ๊ณผ ๋ฐํํ์ ์ ์ ๊ฑฐํ๊ธฐ์ ์ต๋ช ํจ์๋ผ ํ ์ ์์ง๋ง ๋ ์ ํํ๊ฒ๋ ์ต๋ช ๊ฐ์ฒด์ ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๊ฐ์ฒด๋ฅผ ๋ค๋ฃจ๊ธฐ์ํ ์ฐธ์กฐ๋ณ์๊ฐ ํ์ํ์ฃ ? ์์ ๋๋ค์์ด ์๋ฌ๋ฅผ ๋ํ๋ด๋ ์ด์ ๋ ๋.. 2024. 1. 21. 26 Thread ์ค๋ ๋(Thread)๋ ๋์์ ์ฌ๋ฌ ์์ ์ ์ํํ๊ธฐ ์ํ ๊ธฐ๋ณธ์ ์ธ ์คํ ๋จ์์ ๋๋ค. ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋ก๊ทธ๋จ์ ์ฑ๋ฅ์ ํฅ์์ํค๊ณ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ํ ์ ์์ต๋๋ค. ์๋ฐ์์ ์ค๋ ๋๋ฅผ ๋ค๋ฃจ๋๋ฐ ์ฌ์ฉ๋๋ ์ฃผ์ ํด๋์ค๋ Thread ํด๋์ค์ Runnable ์ธํฐํ์ด์ค์ ๋๋ค. ์๋๋ ๊ฐ๋จํ ์ค๋ ๋ ๊ด๋ จ ๊ฐ๋ ๊ณผ ์์ ์ฝ๋์ ๋๋ค. ์ค๋ ๋ ์์ฑ๊ณผ ์คํ ์ค๋ ๋ ์ฐ์ ์์ ์ค๋ ๋์ ์ฐ์ ์์๋ ๊ฐ ์ค๋ ๋๊ฐ ์ผ๋ง๋ ์ค์ํ๊ฒ ๋ค๋ค์ ธ์ผ ํ๋์ง๋ฅผ ๋ํ๋ด๋ ๊ฐ์ ๋๋ค. ์ค๋ ๋์ ์ฐ์ ์์๋ ์ ์๋ก ํํ๋๋ฉฐ, ๋ฎ์ ๊ฐ์ผ์๋ก ์ฐ์ ์์๊ฐ ๋์ต๋๋ค. ์๋ฐ์์๋ Thread ํด๋์ค์ ์์๋ก ๋ค์๊ณผ ๊ฐ์ ๊ฐ๋ค์ด ์ ์๋์ด ์์ต๋๋ค. Thread.MIN_PRIORITY (1): ๊ฐ์ฅ ๋ฎ์ ์ฐ์ ์์ Thread.NORM_PRIORITY (5): ๊ธฐ๋ณธ.. 2024. 1. 21. 25 Generics ์ ๋ค๋ฆญ์ค(Generics)๋ ์๋ฐ์์ ์ปฌ๋ ์ ํด๋์ค์ ๊ด๋ จ๋ ์ฝ๋์ ํ์ ์์ ํ๊ฒ ๋ง๋ค์ด์ฃผ๋ ๊ธฐ๋ฅ์ ๋๋ค. ์ ๋ค๋ฆญ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ปดํ์ผ๋ฌ๊ฐ ์ฝ๋์์ ๋ฐ์ํ ์ ์๋ ํ์ ๊ด๋ จ ์ค๋ฅ๋ฅผ ์ฌ์ ์ ๊ฒ์ถํ ์ ์์ด ์์ ์ฑ์ ๋์ผ ์ ์์ต๋๋ค. ์ ๋ค๋ฆญ์ค ๋์ ์ด์ ์ ๋ค๋ฆญ์ค๊ฐ ์๋ ์ํฉ์์๋ ์ปฌ๋ ์ ๊ณผ ๊ด๋ จ๋ ํด๋์ค๋ฅผ ์ฌ์ฉํ ๋ ํ์ ์์ ์ฑ์ด ๋จ์ด์ง ์ ์์ต๋๋ค. ์ ๋ค๋ฆญ์ค๊ฐ ๋์ ๋๊ธฐ ์ ์๋ ์ปฌ๋ ์ ํด๋์ค๋ค์ด Object๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ์๊ธฐ ๋๋ฌธ์ ์ด๋ค ํ์ ์ ๊ฐ์ฒด๋ ์ ์ฅํ ์ ์์์ต๋๋ค. ์ด๋ก ์ธํด ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. 1) ํ์ ์์ ์ฑ์ด ๋จ์ด์ง 2) ํ๋ณํ์ ๋ฐํ์ ์๋ฌ ๋ฐ์ ์ ๋ค๋ฆญ์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ฌธ์ ์ ๋ค์ ์ดํด๋ณด๋ฉด ์ปดํ์ผ๋ฌ๋ ๋ฐ์ดํฐ์ ํ์ ์ ํ์ธํ์ง ์๋๋ค๋ ์ฌ์ค์ ์ ์ ์์ต๋๋ค. ๊ทธ์ ๋ชจ๋ O.. 2024. 1. 21. 24 Enum enum์ ์๋ฐ์์ ์ด๊ฑฐํ(Enumeration)์ ๋ํ๋ด๋ ํค์๋์ ๋๋ค. ์ด๊ฑฐํ์ ์๋ก ์ฐ๊ด๋ ์์๋ค์ ์งํฉ์ ์ ์ํ ๋ ์ฌ์ฉ๋๋ฉฐ ํด๋น ์์๋ค ์ฌ์ด์ ๊ด๊ณ๋ฅผ ๋ช ํํ๊ฒ ํํํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ฝ๋์ ๊ฐ๋ ์ฑ์ ํฅ์์ํค๊ณ ์ ์ง๋ณด์์ฑ์ ๋์ผ ์ ์์ต๋๋ค. ์ด๊ฑฐํ์ ์๋ฐ 5๋ถํฐ ๋์ ๋์์ต๋๋ค. ์ด๊ฑฐํ์ ์ฌ์ฉํ๋ ์ด์ ์ ์ฃผ์ ํน์ง ๊ฐ๋ ์ฑ ํฅ์: ์ด๊ฑฐํ์ ์ฌ์ฉํ๋ฉด ์๋ก ๊ด๋ จ๋ ์์๋ค์ ํ ๊ณณ์ ๊ทธ๋ฃนํํ ์ ์์ด ์ฝ๋์ ๊ฐ๋ ์ฑ์ด ํฅ์๋ฉ๋๋ค. ํ์ ์์ ์ฑ: ์ด๊ฑฐํ์ ํ์ ์์ ์ฑ์ ์ ๊ณตํฉ๋๋ค. enum์ผ๋ก ์ ์๋ ์์ ์ด์ธ์ ๊ฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ปดํ์ผ ํ์ ์ฒดํฌ: ์ด๊ฑฐํ์ ์ฌ์ฉํ๋ฉด ์ปดํ์ผ ํ์์์ ์ ํจํ ๊ฐ์ธ์ง ํ์ธํ ์ ์์ต๋๋ค. ์ด๊ฑฐํ ๋ฉ์๋: ์ด๊ฑฐํ์ ๋ฉ์๋์ ์์ฑ์๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. ์ด๊ฑฐํ์ .. 2024. 1. 21. 23 Annotation ์๋ฐ์ ์ด๋ ธํ ์ด์ (Annotation)์ ์์ค ์ฝ๋์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ด๋ ธํ ์ด์ ์ ์ฃผ๋ก ์ปดํ์ผ๋ฌ์๊ฒ ์ ๋ณด๋ฅผ ์ ๋ฌํ๊ฑฐ๋ ๋ฐํ์ ์์ ํ๋ก๊ทธ๋จ์ ๋์์ ์์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ ธํ ์ด์ ์ @ ๊ธฐํธ๋ฅผ ์ฌ์ฉํ์ฌ ํํ๋๋ฉฐ, ์ฌ๋ฌ ์ข ๋ฅ๊ฐ ์์ต๋๋ค. ๋ฉํ๋ฐ์ดํฐ? ์๋ฐ์ ์ด๋ ธํ ์ด์ (Annotation)์์์ ๋ฉํ๋ฐ์ดํฐ๋ ์์ค ์ฝ๋์ ๋ถ๊ฐ์ ์ธ ์ ๋ณด๋ฅผ ์ฒจ๋ถํ์ฌ ์ปดํ์ผ๋ฌ, ํ๋ ์์ํฌ, ๋ฐํ์ ํ๊ฒฝ ๋ฑ์ด ํด๋น ์ ๋ณด๋ฅผ ์ดํดํ๊ณ ํ์ฉํ ์ ์๋๋ก ํฉ๋๋ค. ์ด๋ ธํ ์ด์ ์ ์ฃผ๋ก ํด๋์ค, ๋ฉ์๋, ํ๋ ๋ฑ์ ์์์ ๋ถ๊ฐ ์ ๋ณด๋ฅผ ๋ถ์ฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. 1) @Override ์ด๋ ธํ ์ด์ : ์ปดํ์ผ๋ฌ์๊ฒ ํด๋น ๋ฉ์๋๊ฐ ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ๋ค๋ ์ ๋ณด๋ฅผ ์ ๊ณต 2) @Deprecated: ํด๋น ์์(ํด๋์ค, ๋ฉ์.. 2024. 1. 21. 22 throw & throws throw์ throws๋ ์๋ฐ์์ ์์ธ ์ฒ๋ฆฌ์ ๊ด๋ จ๋ ํค์๋๋ก, ์์ธ๋ฅผ ๋ค๋ฃจ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์์ธ ๋ฐ์์ํค๊ธฐ - throw ์์ธ๊ฐ ๋ฐ์ํ ์ํฉ์ ํ์ฌ ์์น์์ ์ง์ ์ฒ๋ฆฌํ๊ธฐ ์ด๋ ต๊ฑฐ๋ ์ฒ๋ฆฌํ ์ ์๋ ๊ฒฝ์ฐ์ throw ๋ฌธ์ ์ฌ์ฉํ์ฌ ์์ธ๋ฅผ ๋์ง๋๋ค. ์ด๊ฒ์ ์์ธ๋ฅผ ํ์ฌ ์์น์์ ๋ฐ์์ํค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ์์ธ๋ ํธ์ถ ์คํ์ ๋ฐ๋ผ ์์ ํธ์ถ์๋ก ์ ํ๋ฉ๋๋ค. ๋๋ณด๊ธฐ try { Exception e = new Exception("๊ณ ์๋ก ๋ฐ์์ํด"); // ์์ธ ํด๋์ค ์์ฑ throw e; // ์์ธ ๋ฐ์์ํค๊ธฐ // throw new Exception("๊ณ ์๋ก ๋ฐ์์ํด"); ์์ ๋ ์ค์ ํ ์ค๋ก } catch (Exception e) { System.out.println("์๋ฌ ๋ฉ์ธ์ง : " +.. 2024. 1. 21. 21 Exception handling ์์ธ ์ฒ๋ฆฌ(Exception Handling)๋ ํ๋ก๊ทธ๋จ ์คํ ์ค์ ๋ฐ์ํ๋ ์์ธ๋ฅผ ์ ์ ํ๊ฒ ์ฒ๋ฆฌํ๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ ์ ๋๋ค. ์์ธ ์ฒ๋ฆฌ๋ฅผ ํตํด ์คํ์ค์ธ ํ๋ก๊ทธ๋จ์ ์์ธ ์ํฉ์ ๋ํ ๋์ฒ ๋ฐฉ๋ฒ์ ์ ์ํ๊ณ , ์ ์์ ์ธ ํ๋ฆ์ ์ ์งํ ์ ์์ต๋๋ค. ์ฆ, ํ๋ก๊ทธ๋จ์ ๋น์ ์์ ์ธ ์ข ๋ฃ๋ฅผ ๋ง๋ ๊ฒ์ ์์ธ ์ฒ๋ฆฌ์ ๋ชฉ์ ์ด ์์ต๋๋ค. ์๋ฐ์์๋ try, catch, finally ๋ธ๋ก์ ์ฌ์ฉํ์ฌ ์์ธ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํฉ๋๋ค. 1) try block → try ๋ธ๋ก์ ์์ธ๊ฐ ๋ฐ์ํ ์ ์๋ ์ฝ๋๋ฅผ ํฌํจํ๋ ๋ธ๋ก์ ๋๋ค. try ๋ธ๋ก ์์์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ํด๋น ์์ธ๋ฅผ ์ฒ๋ฆฌํ๋ catch ๋ธ๋ก์ผ๋ก ์ ์ด๊ฐ ์ด๋ํฉ๋๋ค. 2) catch block → catch ๋ธ๋ก์ ํน์ ์์ธ ํ์ ์ ๋ํ ์ฒ๋ฆฌ ์ฝ๋๋ฅผ ํฌํจํฉ๋๋ค. ์ฌ๋ฌ ๊ฐ์ catch .. 2024. 1. 21. 20 Exceptions ์๋ฐ(Java)์์ ์์ธ(Exception)๋ ํ๋ก๊ทธ๋จ ์คํ ์ค์ ๋ฐ์ํ ์ ์๋ ์์์น ๋ชปํ ์ํฉ ๋๋ ์ค๋ฅ๋ฅผ ๋ํ๋ ๋๋ค. ์ด๋ฌํ ์์ธ๋ ํ๋ก๊ทธ๋จ์ ์ ์์ ์ธ ํ๋ฆ์ ๋ฐฉํดํ๊ฑฐ๋ ํ๋ก๊ทธ๋จ์ด ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋ ์ ์๋ ์์ธ์ด ๋ ์ ์์ต๋๋ค. ์๋ฐ์์๋ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ค์ํ ๋ฉ์ปค๋์ฆ์ด ์ ๊ณต๋ฉ๋๋ค. ์์ธ (Exception) ์์ธ๋ ์ฃผ๋ก ํ๋ก๊ทธ๋จ์ ์ธ๋ถ ์ํฉ์ด๋ ์ฌ์ฉ์ ์ ๋ ฅ์ ์ํด ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ๋ํ๋ ๋๋ค. ์์ธ๋ ์ผ๋ฐ์ ์ผ๋ก ํ๋ก๊ทธ๋จ ์ฝ๋์์ ์ฒ๋ฆฌํ ์ ์๋ ์ํฉ์ด๋ฉฐ, ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ํ๋ก๊ทธ๋จ์ ์์ธ๋ฅผ ์ ์ ํ ์ฒ๋ฆฌํ์ฌ ๊ณ์ ์คํ๋ ์ ์์ต๋๋ค. ์๋ฐ์์๋ ์์ธ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ try-catch ๋ธ๋ก์ ์ฌ์ฉํฉ๋๋ค. Checked ์์ธ์ Unchecked ์์ธ(๋ฐํ์ ์์ธ)๋ก ๋๋ฉ๋๋ค. 1) .. 2024. 1. 21. ์ด์ 1 2 3 4 ๋ค์