๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“– 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..