๋ชฉ๋ก๐Ÿ–ฅ BE ๋ฐฑ์—”๋“œ (118)

Bibi's DevLog ๐Ÿค“๐ŸŽ

TDD, ํ…Œ์ŠคํŠธ์ฝ”๋“œ ๊ฐœ๋… ๋ฐ Gradle, JUnit ์ดˆ๊ธฐ์„ค์ • ํ•˜๊ธฐ

TDD์™€ ํ…Œ์ŠคํŠธ์ฝ”๋“œ TDD (Test-Driven Development, ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ). ์ž๋ฐ” main๋ฉ”์†Œ๋“œ : ํ”„๋กœ๊ทธ๋žจ์„ ์‹œ์ž‘ํ•˜๊ณ , ๊ตฌํ˜„ํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•œ๋‹ค. production code : ํ”„๋กœ๊ทธ๋žจ ๊ตฌํ˜„์„ ๋‹ด๋‹นํ•˜๋Š” ์ฝ”๋“œ test code : production code๊ฐ€ ์ •์ƒ ๋™์ž‘ํ•˜๋Š”์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ์ฝ”๋“œ but.. main๋ฉ”์†Œ๋“œ๋กœ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒฝ์šฐ์˜ ๋ฌธ์ œ์  ํด๋ž˜์Šค ๋ฐ main๋ฉ”์†Œ๋“œ๊ฐ€ ์ปค์ ธ์„œ ๋ณต์žก๋„๊ฐ€ ์ฆ๊ฐ€ํ•œ๋‹ค ํ•œ ๋ฉ”์†Œ๋“œ์— ์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ์ฝ”๋“œ๊ฐ€ ์žˆ์–ด ์–ด๋–ค ํ…Œ์ŠคํŠธ๊ฐ€ ์ด๋ฃจ์–ด์ง„ ๊ฒƒ์ธ์ง€ ์•Œ๊ธฐ ์–ด๋ ต๋‹ค ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ์ฝ˜์†”์—์„œ ์ผ์ผ์ด ์‚ฌ๋žŒ์ด ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค ํ…Œ์ŠคํŠธ์ฝ”๋“œ๊ฐ€ pruduction code์™€ ํ•จ๊ป˜ ๋ฐฐํฌ๋  ์ˆ˜ ์žˆ๋‹ค JUnit๊ณผ AssertJ JUnit : ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฐ” ..

[Java - ์ž๋ฐ”์˜ ์‹ ] 26์žฅ. ํŒŒ์ผ I/O ๊ธฐ์ดˆ (Fileํด๋ž˜์Šค)

์ž๋ฐ”์˜ ์‹  26์žฅ ํŒŒ์ผ I/O I/O๋ž€? I๋Š” input, O๋Š” output์˜ ์•ฝ์ž. ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์„ ํ†ต์นญํ•จ. ์šฉ๋„ ํŒŒ์ผ์„ ์ฝ๊ฑฐ๋‚˜ ์ €์žฅํ•  ๋•Œ(์“ธ ๋•Œ) ๋‹ค๋ฅธ ์„œ๋ฒ„/๋””๋ฐ”์ด์Šค๋กœ ํŒŒ์ผ์„ ๋ณด๋‚ผ ๋•Œ JVM๊ธฐ์ค€์œผ๋กœ input๊ณผ output์„ ์ƒ๊ฐํ•˜๋ฉด ๋จ. ์ฝ์„ ๋•Œ๋Š” input ํŒŒ์ผ๋กœ ์“ฐ๊ฑฐ๋‚˜ ์™ธ๋ถ€๋กœ ์ „์†กํ•  ๋•Œ๋Š” output java.ioํŒจํ‚ค์ง€์™€ ์ŠคํŠธ๋ฆผ ๋ฐ”์ดํŠธ ๊ธฐ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ŠคํŠธ๋ฆผ ํด๋ž˜์Šค ์ œ๊ณต. *์ž๋ฐ”์—์„œ ์ŠคํŠธ๋ฆผ์ด๋ž€ ''๋Š๊ธฐ์ง€ ์•Š๊ณ  ์—ฐ์†์ ์ธ ๋ฐ์ดํ„ฐ''๋ฅผ ๋งํ•จ InputStream,OutputStream Reader, Writer ํด๋ž˜์Šค char๊ธฐ๋ฐ˜์˜ ๋ฌธ์ž์—ด ํŒŒ์ผ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค. File ํด๋ž˜์Šค (java.io.File)์™€ Files ํด๋ž˜์Šค(java.nio.File.Files) F..

[Java AWT] GUIํ”„๋กœ๊ทธ๋ž˜๋ฐ - ์› ๊ทธ๋ž˜ํ”„ ๊ทธ๋ฆฌ๊ธฐ Pie chart

[Java - AWT] ์› ๊ทธ๋ž˜ํ”„ Pie Chart ๊ทธ๋ฆฌ๊ธฐ ์› ๊ทธ๋ž˜ํ”„, ์› ๊ทธ๋ž˜ํ”„ ๋งŒ๋“ค๊ธฐ ๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์› ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆฌ๋ ค๊ณ  ๊ตฌ๊ธ€๋ง์„ ์—ด์‹ฌํžˆ ํ•ด๋„ ์ž˜ ์•ˆ ๋‚˜์™€์„œ, ๋‚ด ๋Šฅ๋ ฅ์ด ๋˜๋Š” ๋งŒํผ(?) ์ง์ ‘ ๊ตฌํ˜„ํ•ด ๋ณด์•˜๋‹ค. *Java AWT ๊ธฐ์ดˆ๋Š” ์ž๋ฐ”์˜์ •์„2ํŒ ์ž๋ฃŒ๋ฅผ ์ฐธ๊ณ ํ•˜๋ฉฐ ๊ณต๋ถ€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์› ๊ทธ๋ž˜ํ”„ ๊ทธ๋ฆฌ๊ธฐ ๊ฐ ํ•ญ๋ชฉ์ด ์ฐจ์ง€ํ•˜๋Š” ๋ฐฑ๋ถ„์œจ(%)์„ ๊ตฌํ•œ๋‹ค. 100%๋Š” ์› ๊ทธ๋ž˜ํ”„์—์„œ 360๋„ ์ด๋ฏ€๋กœ, 1%๋‹น 3.6๋„ ๋กœ ๋ถ€์ฑ„๊ผด์˜ ์ค‘์‹ฌ๊ฐ์„ ๊ณ„์‚ฐํ•œ๋‹ค. 0๋„(์ˆ˜ํ‰์„ )์—์„œ g.fillArc()๋ฅผ ์‚ฌ์šฉํ•ด ํ•ญ๋ชฉ๋‹น ๋ถ€์ฑ„๊ผด์„ ํ•˜๋‚˜์”ฉ ๊ทธ๋ฆฐ๋‹ค. *drawArc(), fillArc() ๋ถ€์ฑ„๊ผด ๊ทธ๋ฆฌ๊ธฐ๋Š” ์ด์ „ ๊ฒŒ์‹œ๋ฌผ์— ์„ค๋ช…ํ•ด ๋†“์•˜์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์งœ๋ฉด ๋ฉ๋‹ˆ๋‹ค. public void paint(Graphics g) { // ์›..

[Java] CSV ํŒŒ์ผ ์ž…์ถœ๋ ฅ (์ฝ๊ธฐ, ์“ฐ๊ธฐ, ์ด์–ด์“ฐ๊ธฐ)

Java CSV ํŒŒ์ผ ์ž…์ถœ๋ ฅ (์ฝ๊ธฐ, ์“ฐ๊ธฐ, ์ด์–ด์“ฐ๊ธฐ) ๋งํฌ1์—์„œ ์ฝ๊ธฐ๋ฅผ, ๋งํฌ2์—์„œ ์“ฐ๊ธฐ๋ฅผ, ๋งํฌ3 ์—์„œ ์ด์–ด์“ฐ๊ธฐ๋ฅผ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. CSV๋ž€? : Comma-Separated Values์˜ ์•ฝ์ž๋กœ, ๊ฐ ํ•„๋“œ๋ฅผ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„ํ•œ ํ…์ŠคํŠธ ํŒŒ์ผ์ด๋‹ค. ๋ณดํ†ต ๋งจ ์ฒซ ์ค„์—๋Š” ์ปฌ๋Ÿผ ์ด๋ฆ„์ด ๋ถ™์–ด ์žˆ๋‹ค. name,height,weight AA,180,80 BB,170,65.csvํŒŒ์ผ์€ ๊ธฐ๋ณธ ๋ฉ”๋ชจ์žฅ์—์„œ๋„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์ €์žฅ์‹œ ํ™•์žฅ์ž๋ฅผ .csv๋กœ ์ง€์ •ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค. (ํŒŒ์ผ์— ํ•œ๊ธ€์ด ํฌํ•จ๋œ ๊ฒฝ์šฐ, ์ €์žฅ์‹œ ์ธ์ฝ”๋”ฉ์„ UTF-8๋กœ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค) Java CSVํŒŒ์ผ ์ฝ๊ธฐ import java.io.*; import java.util.*; public class CSVReader { public static void main(..

[Java AWT] drawArc(), fillArc() - ํ˜ธ, ๋ถ€์ฑ„๊ผด ๊ทธ๋ฆฌ๊ธฐ

Java drawArc() ์ „์— ๊ณต๋ถ€ํ–ˆ์„ ๋•Œ๋„ ๋‹ค๋ฅธ ๋„ํ˜•์€ ๋ฉ”์„œ๋“œ๋งŒ ๋ณด๊ณ  ์‰ฝ๊ฒŒ ๋”ฐ๋ผํ–ˆ๋Š”๋ฐ, drawArc() ์€ ํ—ท๊ฐˆ๋ ธ์—ˆ๋‹ค. ์œ„์˜ ๋งํฌ ์„ค๋ช…์„ ๋ณด๋‹ˆ ์ด์ œ ์ดํ•ด๊ฐ€ ๋˜์—ˆ๋‹ค. ํ˜ธ๋Š” ํ˜ธ ์ž์ฒด์˜ ํฌ๊ธฐ๊ฐ€ ์•„๋‹Œ, ํ˜ธ๋ฅผ ๊ฐ€์ง€๊ณ  ์™„์„ฑํ•œ ์›์„ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ ค์•ผ ํ•œ๋‹ค๋Š” ๊ฒŒ ํ•ต์‹ฌ์ด์—ˆ๋‹ค. (๋ถ€์ฑ„๊ผด๋„ ๋งˆ์ฐฌ๊ฐ€์ง€) drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) *fillArc()๋„ ๋งˆ์ฐฌ๊ฐ€์ง€ int x : x์ขŒํ‘œ - ํ˜ธ๋ฅผ ๊ฐ€์ง€๊ณ  ์™„์„ฑํ•œ ์›์ด ์œ„์น˜ํ•  x์ขŒํ‘œ (๋ถ€์ฑ„๊ผด์˜ x์ขŒํ‘œ๊ฐ€ ์•„๋‹˜) int y : y์ขŒํ‘œ - ํ˜ธ๋ฅผ ๊ฐ€์ง€๊ณ  ์™„์„ฑํ•œ ์›์ด ์œ„์น˜ํ•  y์ขŒํ‘œ (๋ถ€์ฑ„๊ผด์˜ y์ขŒํ‘œ๊ฐ€ ์•„๋‹˜) int width : ๋„ˆ๋น„ - ํ˜ธ๋ฅผ ๊ฐ€์ง€๊ณ  ์™„์„ฑํ•œ ์›์˜ ๋„ˆ๋น„ (๋ถ€์ฑ„๊ผด์˜ ๋„ˆ๋น„๊ฐ€ ..

[TCP/IP ์‰ฝ๊ฒŒ, ๋” ์‰ฝ๊ฒŒ] 1. ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ - ๋„คํŠธ์›Œํฌ, ์ธํ„ฐ๋„ท, ์„œ๋ฒ„&ํด๋ผ์ด์–ธํŠธ, ํŒจํ‚ท ๊ตํ™˜ ๋ฐฉ์‹, ๋„คํŠธ์›Œํฌ์˜ ๊ณ„์ธต ๋ชจ๋ธ(TCP/IP), ํ”„๋กœํ† ์ฝœ

์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ *'TCP/IP ์‰ฝ๊ฒŒ, ๋” ์‰ฝ๊ฒŒ' ์ฑ…์„ ๋ณด๋ฉฐ ์š”์•ฝ์ •๋ฆฌํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ๋„คํŠธ์›Œํฌ ์ดํ•ด๋ฅผ ์œ„ํ•ด TCP/IP๋ฅผ ์„ค๋ช…ํ•  ๊ฒƒ์ด๋‹ค. ์˜ค๋Š˜๋‚  ๋„คํŠธ์›Œํฌ ๊ธฐ์ˆ ์€ TCP/IP๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํ†ตํ•ฉ๋˜๊ณ  ํ‘œ์ค€ํ™”๋˜์—ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ํ†ต์‹  ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ์˜ ๋™์ž‘์€ ํฌ๊ฒŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต- ํŠธ๋žœ์ŠคํฌํŠธ ๊ณ„์ธต - ์ธํ„ฐ๋„ท ๊ณ„์ธต - ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค ๊ณ„์ธต ์˜ 4 ๊ณ„์ธต์œผ๋กœ ๋ถ„๋ฅ˜๋œ๋‹ค. ์œ„์•„๋ž˜๋กœ ์ธ์ ‘ํ•œ ๊ณ„์ธต๋ผ๋ฆฌ ์ •๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ›์œผ๋ฉฐ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ํ•œ๋‹ค. ๊ฐ ๊ณ„์ธต์˜ ์—ญํ• ์„ ์ƒ์„ธํ•˜๊ฒŒ ๋ณด๋Š” ๊ฒƒ๋„ ์ข‹์ง€๋งŒ, ์ „์ฒด ๋„คํŠธ์›Œํฌ์—์„œ ๊ฐ ๊ณ„์ธต ๊ฐ„ ์ƒํ˜ธ์ž‘์šฉ์„ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์ด ๋” ์ค‘์š”ํ•˜๋‹ค. ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ์˜ ์ข…๋ฅ˜ ์—ฐ๊ฒฐ๋ฐฉ์‹ / ์—ฐ๊ฒฐ๋˜๋Š” ์ปดํ“จํ„ฐ ๊ทœ๋ชจ์— ๋”ฐ๋ผ ์•„๋ž˜์™€ ๊ฐ™์€ ์œ ํ˜•์œผ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค. ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ๋ž€? : ๋‘ ๋Œ€ ์ด์ƒ์˜ ์ปดํ“จํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•ด ..

[MySQL] CRUD - INSERT, SELECT, UPDATE, DELETE / JOIN

์ด ๊ธ€์€ ์ธํ”„๋Ÿฐ ์ƒํ™œ์ฝ”๋”ฉ-DATABASE 1&2๋ฅผ ๋ณด๊ณ  ์ •๋ฆฌํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. MySQL CRUD CRUD = ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ฃผ์š” 4๊ฐ€์ง€ ๊ธฐ๋Šฅ. → Create ๋ฐ์ดํ„ฐ ์ƒ์„ฑ, Read ๋ฐ์ดํ„ฐ ์กฐํšŒ, Update ๋ฐ์ดํ„ฐ ์ˆ˜์ •, Delete ๋ฐ์ดํ„ฐ ์‚ญ์ œ ์ด ์ค‘์—์„œ๋„ DB๋ผ๋ฉด ๋ฐ˜๋“œ์‹œ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์€? Create์™€ Read. ์–ด๋–ค ๋ถ„์•ผ(ํšŒ๊ณ„, ์—ญ์‚ฌ ๋“ฑ)์—์„œ๋Š” ๋ฐ์ดํ„ฐ ์ˆ˜์ •๊ณผ ์‚ญ์ œ ๊ธฐ๋Šฅ์„ ์ „ํ˜€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ธฐ๋„ ํ•œ๋‹ค. โ€ป DESC ํ…Œ์ด๋ธ”์ด๋ฆ„; : ํ•ด๋‹น ํ…Œ์ด๋ธ”์˜ ๊ตฌ์กฐ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋ช…๋ น์–ด. Create : SQL์˜ INSERT ๊ตฌ๋ฌธ ํ‘œ์— ํ–‰์„ '์‚ฝ์ž…'ํ•œ๋‹ค๋Š” ์ ์—์„œ INSERT๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. auto_increment ์ธ ๊ฐ’๋งŒ ์ œ์™ธํ•˜๊ณ  ํ•ญ๋ชฉ๋“ค์„ ์ ์–ด๋„ฃ์œผ๋ฉด ๋œ๋‹ค. → INSERT INTO ํ…Œ์ด๋ธ”์ด๋ฆ„ (..