๐ Java&Spring (19) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ QueryDSL์์ join()๊ณผ innerJoin() ์ฐจ์ด QueryDSL ์ฌ์ฉ ์ค, ์๋ชป ์๊ณ ์๋ ๋ด์ฉ์ด ์์๋ค. ์๋์ ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํ๋ค.-- JOIN SELECT * FROM AJOIN B ON A.id = B.a_id;-- INNER JOINSELECT * FROM AINNER JOIN B ON A.id = B.a_id; ์ผ๋ฐ์ ์ผ๋ก SQL ๋ฌธ ์์ฑ ์, JOIN์ ์ฌ์ฉํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก INNER JOIN์ ์ฌ์ฉํ๋ค๊ณ ์๊ณ ์์๋ค.ํ์ง๋ง QueryDSL์์๋ join()๊ณผ innerJoin()์ด ๋ฐ๋ก ์กด์ฌํ๋ค. โ๏ธjoin()์กฐ์ธํ ๋์์ด @OneToMany ํน์ @ManyToMany ๊ด๊ณ์ผ ๋ ์ฌ์ฉJPQL์์๋ ๊ธฐ๋ณธ์ ์ผ๋ก LEFT JOIN์ผ๋ก ์ฒ๋ฆฌ๋จ๊ฒฐ๊ณผ๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ๊ธฐ์ค ํ ์ด๋ธ(A)์ ๋ฐ์ดํฐ๋ ์ ์ง๋จ.QMember member = QM.. [๋ชจ๋์๋ฐ์ธ์ก์ ] Stream ์คํธ๋ฆผ ํ์ฉ ์คํธ๋ฆผ ํ์ฉ ๋ช ์์ ๋ฐ๋ณต ๋์ filter์ collect ์ฐ์ฐ์ ์ง์ํ๋ ์คํธ๋ฆผ API๋ฅผ ์ด์ฉํด์ ๋ฐ์ดํฐ ์ปฌ๋ ์ ๋ฐ๋ณต์ ๋ด๋ถ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค. @Test void streamSample() { List nameList = new ArrayList(); nameList.add("๋ญ์ค"); nameList.add("๋ฃฐ๋ฃจ"); nameList.add("์ ์ฌ"); nameList.add("ํธ๋ฆฐ๋ค๋ฏธ์ด"); // ์ธ๋ถ ๋ฐ๋ณต List longNameList = new ArrayList(); for (String s : nameList) { if(s.length() > 5) { longNameList.add(s); } } // ๋ด๋ถ ๋ฐ๋ณต List longNameStreamList = nameList.stream.. [๋ชจ๋์๋ฐ์ธ์ก์ ] Stream ์คํธ๋ฆผ ์คํธ๋ฆผ (Stream) ์ปฌ๋ ์ (collections)๋ก ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃนํํ๊ณ ์ฒ๋ฆฌํ ์ ์๋ค. ์ปฌ๋ ์ ์ ๋ชจ๋ ์๋ฐ ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ฒ๋ฆฌํ๊ณ , ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ์์ ์ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ์ค์ํ๋ค.ํ์ง๋ง ์์ง ์๋ฒฝํ ์ปฌ๋ ์ ์ฐ์ฐ์ ์ง์ํ๋ ค๋ฉด ๋ถ์กฑํ๋ค. ์คํธ๋ฆผ์ด๋ ๋ฌด์์ธ๊ฐ ์คํธ๋ฆผ๋ ์๋ฐ 8 API์ ์๋ก ์ถ๊ฐ๋ ๊ธฐ๋ฅ์ด๋ค. ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์ฝ๋๋ฅผ ์ง์๋ก ํํํ์ฌ ์ ์ธํ์ผ๋ก ์ปฌ๋ ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค. ์คํธ๋ฆผ์ ์ฌ์ฉํ๋ฉด ๋ฉํฐ์ค๋ ๋ ์ฝ๋๋ฅผ ๊ตฌํํ์ง ์์๋ ๋ฐ์ดํฐ๋ฅผ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ ์ ์๋ค. @Test @DisplayName("์๋ฆฌ ํด๋์ค ์ ๋ ฌํ๊ธฐ") void sortExample() { List menuList = new ArrayList(); menuList.add(new Dish(100,"๋ญ๊ฐ์ด์ด")); m.. [๋ชจ๋์๋ฐ์ธ์ก์ ] ๋๋ค (Lambda) ๋๋คํํ์์ ์ต๋ช ํด๋์ค์ฒ๋ผ ์ด๋ฆ์ด ์๋ ํจ์์ด๋ค. ๋ฉ์๋๋ฅผ ์ธ์๋ก ์ ๋ฌํ ์ ์๋ ์น๊ตฌ์ ๋๋ค. ๋๋ค ์ฉ์ด ์์ฒด๋ ๋ฏธ์ ๋ถํ ํ๊ณ์์ ์ ๋๋์๋ต๋๋ค. ์ค๋์ ๋๋ค ๋๋คํ๋ ๊ทธ ๋๋ค์ ๋ํด์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค. ๋ชจ๋์๋ฐ์ธ์ก์ ์ฑ ์ฌ๋ํด์ 1. ๋๋ค๋ ๋ฌด์์ธ๊ฐ? ๋๋ค ํํ์: ๋ฉ์๋๋ก ์ ๋ฌํ ์ ์๋ ์ต๋ช ํจ์๋ฅผ ๋จ์ํํ ๊ฒ. ๋๋ค ํน์ง 1) ์ต๋ช ์ด๋ค. ๋ฉ์๋์ ๋ค๋ฅด๊ฒ ์ด๋ฆ์ด ์๋ค. 2) ํจ์์ด๋ค. ํน์ ํด๋์ค์ ์ข ์๋์ง ์๋๋ค. ๊ทธ๋์ ํจ์๋ผ๊ณ ๋ ๋ถ๋ฆผ. ํ์ง๋ง ๋ฉ์๋์ ํน์ง ๋ํ ๊ฐ์ง. 3) ์ ๋ฌ์ด ๊ฐ๋ฅํ๋ค. ๋๋ค ํํ์์ ๋ฉ์๋ ์ธ์๋ก ์ ๋ฌํ๊ฑฐ๋ ๋ณ์๋ก ์ ์ฅ ๊ฐ๋ฅ. 4) ๊ฐ๊ฒฐํ๋ค. ์ต๋ช ํด๋์ค์ฒ๋ผ ์ค๋ณต๋๊ฑฐ๋ ํด๋์ค ์์ฑ์ ์ํ ์ฝ๋๋ฅผ ๊ตฌํํ ํ์ ์์. cf) ๋ฉ์๋์ ํน์ง์? - ํ๋ผ๋ฏธํฐ ๋ฆฌ์คํธ, ๋ฐ๋,.. ํจ์ํ ์ธํฐํ์ด์ค (Functional Interface) Java์์ ํจ์ํ ์ธํฐํ์ด์ค๋ ๋จ์ผ ์ถ์ ๋ฉ์๋(Single Abstract Method, SAM)๋ฅผ ๊ฐ์ง ์ธํฐํ์ด์ค๋ค. Java 8 ์ด์์์๋ ๋๋ค ํํ์ ๋ฐ ํจ์ํ ์ธํฐํ์ด์ค๋ฅผ ์ง์ํ๋ค. ํจ์ํ ์ธํฐํ์ด์ค์ ์ถ์ ๋ฉ์๋ ์๊ทธ๋์ฒ๋ ๋๋ค ํํ์๊ณผ ์ฐ๊ด์ด ์๋ค. (์ถ์ ๋ฉ์๋ ์๊ทธ๋์ฒ๋ ํด๋น ํจ์ํ ์ธํฐํ์ด์ค๊ฐ ๋ํ๋ด๋ ํจ์์ ํํ๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ) java.util.function ํจํค์ง์๋ ๋ค์ํ ํจ์ํ ์ธํฐํ์ด์ค๊ฐ ํฌํจ๋์ด ์์. Consumer ์ธํฐํ์ด์ค์ ์ถ์ ๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ๋ค. @FunctionalInterface public interface Consumer { void accept(T t); } ์ฌ๊ธฐ์ accept๊ฐ ์ถ์ ๋ฉ์๋์ด๋ค. ์ด ๋ฉ์๋๋ ํ๋์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ๊ณ ๋ฐํ๊ฐ์ด ์์ธฐ. .. [๋ชจ๋์๋ฐ์ธ์ก์ ] ๋์ ํ๋ผ๋ฏธํฐ(Behavior Parameter) ๋์ ํ๋ผ๋ฏธํฐ๋ฅผ ์์ญ๋๊น? ํ๋ก๊ทธ๋๋ฐ ์ ์ฌ์ฉํ๋ "๋์"์ ์๋์ ๊ฐ์ ๊ฒ์ ์๋ฏธํฉ๋๋ค. a์ b๋ฅผ ๊ณฑํ๋ ํจ์๊ฐ ์๋ค๊ณ ํด๋ด ์๋ค. def multiply_numbers(a, b): result = a * b return result ์ด ํจ์๋ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ ๊ณฑํ๋ "๋์"์ ํ๋๋ฐ์ฉ, a์ b์ ๊ฐ์ ๋ฐ๋ผ์ multiply_numbers ํจ์์ ๊ฒฐ๊ณผ ๊ฐ์ ๋ฌ๋ผ์ง๊ฒ ๋ฉ๋๋ค. ์ด๋, a์ b๋ฅผ ๋์ ํ๋ผ๋ฏธํฐ๋ผ๊ณ ํ๋ ๊ฑฐ์์ด~ result1 = multiply_numbers(2, 3) # a=2, b=3์ ์ ๋ฌํ์ฌ 2 * 3 = 6์ด ๋ฐํ๋จ result2 = multiply_numbers(5, 7) # a=5, b=7์ ์ ๋ฌํ์ฌ 5 * 7 = 35๊ฐ ๋ฐํ๋จ ์ด๋ ๊ฒ ๋ง์ด์ ธ. a์ b์ ๊ฐ์ ๋ฐ๋ผ resul.. NonNull ์ฌ๋...์ฌ...์ฌ...๋... ๊ทธ๋ฅ ์ข์ํฉ๋๋ค. @NonNull์ ์ฌ์ฉ์์๊ฒ null ์ฒดํฌ ์ํ์ญ์ผ ํ๊ณ ์๋ ค์ค ์ ์๋ ์ด๋ ธํ ์ด์ ์ ๋๋ค ๋ณดํต ์ฌ์ฉํ ์ ์๋ ์ฉ๋๋ ์๋์ ๊ฐ์ต๋๋ค Record component / ํจ์์ ํ๋ผ๋ฏธํฐ / ์์ฑ์์ ํ๋ผ๋ฏธํฐ ์๋ ๊ฒ ์ธ ์ ์์ต๋๋ค public void doSomething(@NonNull String input) { // input์ null์ผ ์ ์์ // ์ฌ๊ธฐ์ ์์ ํ๊ฒ input์ ์ฌ์ฉํ ์ ์์!! } @NonNull์ ์ ์ฐ๋ฉด ์๋์ ๊ฐ์ด ํ๊ฒ ์ฅฌ? ์ฌ์ค ์จ์์ด๋ ์๋์ ์ฝ๋๊ฐ ๋ ์ต์ํ์ง๋ง ๐ ํ๋ผ๋ฏธํฐ๋ง ๋ณด๋ฉด if ๋ฌธ ๋ง๋ค์ด์ผ ์ง์ฑ์ด ํ๋ฆฌ๋ ํธ. public void doSomething(String input) { // input์ null์ด๋ฉด ์๋๋๋ค.. if( input == null ) {.. Intellij) JUnit5 ์ค์ ํ ์ฌ๋ ๊ด ์์ฆ ์ผํ๋ฉด์ ๋ด๊ฐ ์ ์ผ ์ ๊ฒฝ ์ฐ๊ณ ์๋ ๊ฒ์ ํ์คํ ๋ฆฌ๋ฅผ ์ ๋จ๊ธฐ๋ ๊ฒ์ด๋ค ๋ชจ๋ ์ผ์ ๋๊ตฌ๋ ํ ์ ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ง๋ง ์ฝ๋๋ง๋ค ์๋ ์ฌ์ฐ์... ๊ทธ ์ฌ๋๋ฐ์ ์ ์๊ฐ ์๋ค๋ ๊ฒ์ด๋ค ๐ฅน ์ ๊ทธ๋ ๊ฒ ์๊ฐํ๊ฒ ๋๋๊ตฌ์? ์ ๋ ๊ทธ๋ฌ๊ณ ์ถ์ง ์์์ต๋๋ค ๊ทธ๋์!! ํ ์คํธ ์ฝ๋๋ฅผ ์ฌ๋๋์ ๋ค๋ฆ์์ด ์์ฑํ๋ ์ค... ๊ธฐ์กด์๋ JUnit4 ๋ฒ์ ์ผ๋ก ์ฌ์ฉํ๊ณ ์์๋๋ฐ ๋ค๋ฅธ ๋ด๋น์๊ฐ ํ ์คํธ ์ฝ๋ ์คํ ์ ๋น ๋ฅด๊ฒ ๋ด์ฉ์ ํ์ ํ์๋ฉด ์ข๊ฒ ๋ค๊ณ ์๊ฐ์ด ๋ค์๋ค ๊ฒฐ๋ก ๋ถํฐ ๋จผ์ ๋งํ์๋ฉด.. ํ ์คํธ ์ฝ๋๋ฅผ ์คํํ์ ๋ ์ ์ด๋ฐ ํ ์คํธ~๋ฅผ ์ฝ๊ฒ ํ์ ํ๊ธธ ์ํ๋ค ๊ทธ๋ฌ๊ธฐ ์ํด์๋ @DisplayName ๊ฐ์ ์ด๋ ธํ ์ด์ ์ฌ์ฉ์ด ํ์ํ๊ณ , ์ด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ JUnit ๋ฒ์ ์ ์ ๊ทธ๋ ์ด๋ ํด์ผํ๋ค 1. JUnit5 ์์กด์ฑ ์ถ๊ฐ (1) bu.. ์ด์ 1 2 3 ๋ค์