์ด์šฐ๋“œ์˜ ๋ธ”๋กœ๊ทธ

[java] GenerateExams.jar review

๋“œ๋””์–ด generateExams.jar (project problemshooter) ๊ฐ€ ๋์ด ๋‚ฌ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์ด์ œ ์†Œ๊ฐœํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค!

ํ”„๋กœ์ ํŠธ ๊ธฐ๊ฐ„ : Jan 10 - Feb 11 (32 days)

1) Object ๊ตฌ์„ฑ ๋งŒ๋“ค๊ธฐ

๊ฐ€์žฅ ์ดˆ๊ธฐ์—” Problem, ๋ฉ”์ธ class ( ํ›—๋‚  jar ์˜ entry-point), Iteration ์œผ๋กœ ๋งŒ๋“ค์—ˆ๋‹ค. ๋ณ€ํ™”๋ฅผ ๊ฒช์œผ๋ฉฐ Iteration ์ด IterateIndex ๋กœ ๋Œ€์ฒด๋˜์—ˆ๋‹ค. Object ์˜ Attribute ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ object ์™€ ์ „์ฒด ํ”„๋กœ์ ํŠธ๊ฐ€ lightweight ํ•ด์งˆ๊นŒ ๊ณ ๋ฏผํ–ˆ๋‹ค.

2) ์ฃผ์–ด์ง„ ์†Œ์ฃผ์ œ๋“ค ์ค‘์—์„œ ์›ํ•˜๋Š” ๋งŒํผ select ํ•˜๊ธฐ

์ด ๋ถ€๋ถ„์ด ์˜ˆ์ƒ์™ธ๋กœ ๊นŒ๋‹ค๋กœ์› ๋‹ค. instance ๋ฅผ ๋‹ค ๋งŒ๋“ค์–ด์„œ ๊ทธ ์ค‘์—์„œ ๋ฝ‘์„์ง€, ์•„๋‹˜ ์ˆซ์ž๋ฅผ ๋ฝ‘๊ณ  ๊ทธ์— ๋”ฐ๋ผ ํ•„์š”ํ•œ instance ๋งŒ ๋งŒ๋“ค์ง€. ์ˆซ์ž ๊ณ ๋ฅด๋Š” ๊ฒƒ๋„ combination ์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ๊ฝค ์• ๋จน์—ˆ๋‹ค. loop ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ„๋‹จํžˆ ๊ตฌํ˜„ํ•˜๋ ค๋‹ˆ exception handling ์ด ํ•„์ˆ˜์ ์ด์—ˆ๋‹ค.

3) ๋ฌธ์ œ ์ฝ์–ด์˜ค๊ธฐ

๋ฌธ์ œ ํŒŒ์ผ๋“ค์€ ์–ด๋–ค ์‹œ์Šคํ…œ์œผ๋กœ ๊ตฌ์ถ•ํ• ๊นŒ ๊ณ ๋ฏผํ–ˆ๋‹ค. web database ๋ฉด ์•„์ฃผ ์œ ๊ธฐ์ ์ด๊ณ  ์ข‹๊ฒ ์ง€๋งŒ ๋‚ด๊ฐ€ ํ•  ์ค„ ๋ชฐ๋ผ์„œ ๋ชปํ–ˆ๋‹ค. ํ•œ ํŒŒ์ผ๋กœ ํ•˜์ž๋‹ˆ ๋งค๋ฒˆ ํŒŒ์ผ ์ฝ์„ ๋•Œ ์‹œ๊ฐ„ ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์žก์•„๋จน์„ ๊ฒƒ ๊ฐ™์•˜๋‹ค. ๊ทธ๋ž˜์„œ, ํด๋”๋ฅผ ๋‹จ๊ณ„์ ์œผ๋กœ (cascading system์œผ๋กœ) ๋งŒ๋“ค์—ˆ๋‹ค. ์–ด์งœํ”ผ ๊ฐ ๋ฌธ์ œ๋“ค ๋‹ค ์ž…๋ ฅํ•ด์•ผ ํ•˜๋‹ˆ๊น ๊ฐ๊ฐ ํŒŒ์ผ ๋งŒ๋“œ๋Š” ์ž…์žฅ์—์„œ๋„ risk ๋„ ์ ๊ณ  ๊ตฌ์กฐ์ ์ด์–ด์งˆ ๊ฒƒ ๊ฐ™์•˜๋‹ค. ํŒŒ์ผ ํ˜•์‹์€ ํ”„๋กœ์ ํŠธ์—์„œ ๋Š์–ด ์ฝ๊ธฐ ์ข‹๊ฒŒ .csv ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค. (๋ฌผ๋ก  ๋‹ค๋ฅธ ํŒŒ์ผ ํ˜•์‹๋„ ์–ด๋А์ •๋„ ๋˜๊ฒŒ if-else ๋กœ ์งฐ๋‹ค.)

4) v1.0 ๋ฌธ์ œ CLI ์— ๋ฟŒ๋ฆฌ๊ธฐ

๋งจ์ฒ˜์Œ์— ์ฃผ๋ฌธ ๋ฐ›์„ ๋•Œ ๋ถ„๋ช… GUI ๋กœ ํด๋ฆญํด๋ฆญ ํ•˜๋“ฏ์ด(Quizlet ๋งˆ๋ƒฅ) ํ•˜๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค์–ด๋‹ฌ๋ผ ์ฃผ๋ฌธ์„ ๋ฐ›์•˜๋‹ค. ๊ทธ๋Ÿฐ๋ฐ GUI ๋ฅผ ํ•˜๋ ค๋‹ˆ AWT ๋Š” ๋„ˆ๋ฌด ๊ตฌ์‹์ด๊ณ , javafx ๋Š” goorm.ide ์—์„œ ์ž˜ ์•ˆ๋˜์—ˆ๋‹ค. ๊ตฐ๋Œ€์—์„œ ์ฝ”๋”ฉํ•˜๋Š” ๊ฒƒ์ด ์ด๋ ‡๊ฒŒ ์–ด๋ ต๋‹ค. ์ƒํ™ฉ์„ ์„ค๋ช…๋“œ๋ฆฌ๋‹ˆ ๊ทธ๋ƒฅ ์‹œํ—˜์ง€ ๋ฝ‘๋“ฏ์ด ๋งŒ๋“ค์–ด์กŒ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค๊ณ  ์ˆ˜์ •ํ•˜์…”์„œ CLI ๋กœ ๋ฌธ์ œ์™€ ๋‹ต์ด ์ž˜ ๋ฝ‘ํžˆ๋Š”์ง€ ๊ตฌํ˜„ํ•ด๋ณด์•˜๋‹ค. ์ถœ์ œ์™€ ์ฑ„์  ๋‘๊ฐ€์ง€๋ฅผ ๋ชจ๋‘ ๊ตฌํ˜„ํ•ด๋ณด์•˜๋‹ค.

5) excecutable jar ๋กœ publish ํ•˜๊ธฐ

์ฒ˜์Œ์—๋Š” ์‹คํ–‰๋งŒ ํ•˜๋ฉด (ํŒŒ์ผ ๋ชฉ๋ก์ด ์ •๋ฆฌ๋˜์–ด์žˆ๋Š”) ํ…์ŠคํŠธ ํŒŒ์ผ์„ ์ฝ์–ด์™€์„œ ๋ฌธ์ œ๋ฅผ ๋ฝ‘๋Š” ์‹์œผ๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค. ๊ทธ ํŒŒ์ผ์€ ์ด๋Ÿฐ ์‹์ด์—ˆ๋‹ค.

3,6,7,11

2,5,6,1

์ด๋ ‡๊ฒŒ ์จ์žˆ์œผ๋ฉด, 7์€ 1๋‹จ์›(์ฒซ๋ฒˆ์งธ์ค„์ด๋‹ˆ๊น) 3์†Œ๋‹จ์›(๊ทธ ์ค„์—์„œ ์„ธ๋ฒˆ์งธ ์ˆซ์ž๋‹ˆ๊น)์— ๋ฌธ์ œ๊ฐ€ 7๊ฐœ ์žˆ๋‹ค๋Š” ๋œป์ด์—ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๋ ‡๊ฒŒ ํ•˜๋‹ˆ๊น ๋ฌธ์ œ์€ํ–‰์— ๋ณ€๋™์‚ฌํ•ญ์ด ์žˆ์œผ๋ฉด ์ด ํŒŒ์ผ๋„ ์—…๋Œ€์ดํŠธ ํ•ด์ค˜์•ผ ํ•œ๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. ๋˜, ์—…๋ฐ์ดํŠธ ๋œ ํŒŒ์ผ์„ ํ”„๋กœ๊ทธ๋žจ์ด ๋‹ค์‹œ ์ฝ์–ด์™€์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์žฌ๊ฐœํ•˜๋Š” ์‹์œผ๋กœ ํ•˜๋‹ˆ, I/O ์—์„œ ๋„ˆ๋ฌด ๋น„ํšจ์œจ ์ ์ด์—ˆ๋‹ค. (๋‚ด์šฉ์„ ํŒŒ์ผ๋กœ export ํ–ˆ๋‹ค๊ฐ€ ๋‹ค์‹œ ์ฝ์–ด์˜ค๋Š” ์‹). ๊ทธ๋ž˜์„œ v2.0 ์€ ํŒŒ์ผ์„ ์œ ์ง€ํ•˜๊ณ , v3.0 ๋ถ€ํ„ฐ๋Š” ํŒŒ์ผ ์—†์ด ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

6) ํ”„๋กœ๊ทธ๋žจ flexibility exhancement

์ด์ œ ๊ฑฐ์˜ ๊ณจ๊ฒฉ์€ ์™„์„ฑ๋œ ์ƒํƒœ์˜€๋‹ค. ๋‹ค๋งŒ, ๋ฌธ์ œ ์ˆ˜๋ผ๋˜๊ฐ€ ๋ฌธ์ œ ์€ํ–‰ ๋””๋ ‰ํ† ๋ฆฌ path ๋ผ๋˜๊ฐ€ ํ•˜๋Š” ๊ฒƒ๋“ค์ด ํ”„๋กœ๊ทธ๋žจ ๋‚ด ๋ณ€์ˆ˜๋กœ ์ง€์ •๋˜์–ด ์žˆ๋‹ค ๋ณด๋‹ˆ๊น ๊ณ ์ •์ ์ด์—ˆ๋‹ค ๋ฌธ์ œ๋ฅผ ํ”„๋กœ๊ทธ๋žจ ํ…Œ์ŠคํŠธํ• ๋• 10๋ฌธ์ œ๋กœ ์ง€์ •ํ–ˆ๋Š”๋ฐ, ๋ฌธ์ œ ์€ํ–‰ ํฌ๊ธฐ์— ๋”ฐ๋ผ 40 ๋ฌธ์ œ๊ฐ€ ํ•„์š”ํ•  ์ˆ˜๋„ ์žˆ๊ณ  2-3 ๋ฌธ์ œ๋งŒ ํ•„์š”ํ•  ์ˆ˜๋„ ์žˆ๊ฒ ๋‹ค ์‹ถ์—ˆ๋‹ค. ์ด๋Ÿฐ ๊ฒƒ์„ ์‚ฌ์šฉ์ž ์ทจํ–ฅ์— ๋”ฐ๋ผ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๋„๋ก, config.txt ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์„œ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ๋•Œ ์ฝ์–ด์„œ attribute ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ๋‹ค.

Exception handling ๋„ ํ–ˆ๋‹ค. ๋‚˜์•ผ ๊ฐœ๋ฐœ์ž๋ผ์„œ ํ”„๋กœ๊ทธ๋žจ์˜ algorithm ์„ ์•„๋‹ˆ๊น ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š๊ฒŒ ์ž˜ data ๋ฅผ ์ฃผ๊ฒ ์ง€๋งŒ, ์‚ฌ์šฉ์ž๋“ค์€ ๊ทธ๋ ‡์ง€ ๋ชปํ•˜๋‹ค. ๊ทธ๋ž˜์„œ, ํ”„๋กœ๊ทธ๋žจ์ด ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•ด์„œ try-catch ๋ฅผ ๋นก์„ธ๊ฒŒ ์งฐ๋‹ค. ์ฃผ๋กœ ์ผ์–ด๋‚  ๋ฒ•ํ•œ ์—๋Ÿฌ๋“ค๋„ ๋ฏธ๋ฆฌ catch ํ•ด๋†“์•˜๋‹ค.

  • error.txt, log.txt ๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ”„๋กœ๊ทธ๋žจ์ด ์–ด๋–ป๊ฒŒ ๊ตฌ๋™๋˜์—ˆ๋Š”์ง€ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค.
  • ํ”„๋กœ๊ทธ๋žจ ์ค‘ ์–ด๋А๋ถ€๋ถ„์—์„œ ์—๋Ÿฌ๊ฐ€ ๋‚ฌ๋Š”์ง€ (์ž˜ encapsulation ํ•ด์„œ) error.txt ์— ์ถœ๋ ฅ๋˜๊ฒŒ ํ–ˆ๋‹ค. ํ˜น์‹œ ์ƒ๊ฐ์ง€ ๋ชปํ•œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ๊ฒฌ๋˜๋ฉด ์—ฐ๋ฝํ•  ๊ฐœ๋ฐœ์ž ์—ฐ๋ฝ์ฒ˜๋„ ๋‚จ๊ฒจ๋†“์•˜๋‹ค.
  • ์–ด๋–ป๊ฒŒ ๋˜๋˜๊ฐ„์— ์•ˆ์ „ํ•˜๊ฒŒ ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋„๋ก catch ํ–ˆ๋‹ค.

์ด์ œ ์‚ฌ์šฉ์ž๋“ค์„ ์œ„ํ•ด์„œ README ํŒŒ์ผ์„ (.md ๋ž‘ .txt๋กœ) ์ž‘์„ฑํ–ˆ๋‹ค. ์ด๊ฒŒ ์ •๋ง ๊ท€์ฐฎ์€ ์ž‘์—…์ด์—ˆ๋‹ค. ๋‚œ ๋‹ค ์•Œ๊ณ  ์žˆ๋Š” ๋‚ด์šฉ์ธ๋ฐ, ์ƒํŒ ๋ชจ๋ฅด๋Š” ์‚ฌ๋žŒ๋„ ์ž˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์ž‡๊ฒŒ ์‚ฌ์šฉ ์„ค๋ช…์„œ๋ฅผ ์“ด๋‹ค๋Š” ๊ฒƒ์ด ์‰ฝ์ง€ ์•Š์•˜๋‹ค. ์•„๋‹ˆ, ๋ฌด์ง€๋ง‰์ง€ํ•˜๊ฒŒ ๊ท€์ฐฎ์•˜๋‹ค. ๊ธฐ๋ณธ์€ ์˜์–ด๋กœ ์“ฐ๊ณ , ํ•œ๊ธ€ํŒ์€ ๊ฐ“ํŒŒ๊ณ ์˜ ํž˜์„ ๋นŒ๋ ธ๋‹ค.

7) ๋งˆ์ง€๋ง‰ ๋งˆ๋ฌด๋ฆฌ

๋ฌธ์ œ ์„ ๋‹ค๊ฐ€ 4๊ฐœ ๋ฐ–์— ์ฃผ์–ด์ง€์ง€ ์•Š์•„๋„ ๋Œ์•„๊ฐ€๋„๋ก(4์ง€์„ ๋‹ค) loop ๊ตฌ์กฐ๋ฅผ ๋ฐ”๊พธ์—ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋“ค์„ Arraylist ๋กœ ์ง  ๊ฒƒ๋“ค์„ ์ตœ๋Œ€ํ•œ ๋ฐฐ์—ด(Array)๋กœ ๋ฐ”๊พธ์—ˆ๋‹ค.

๊ฐ€์žฅ ์˜ค๋ž˜ ๊ฑธ๋ฆฐ ๋งˆ๋ฌด๋ฆฌ์ž‘์—…์€ ํ•œ๊ธ€ํŒจ์น˜ํ™”์˜€๋‹ค. ๊ณ„์† ์˜์–ด๋กœ ์ž‘์—…ํ•ด์„œ ๋ชฐ๋ž๋Š”๋ฐ, ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ํŒŒ์ผ ๋‚ด์šฉ๋“ค์ด ์ฃ„๋‹ค ํ•œ๊ธ€์ผ ๊ฒƒ ๊ฐ™์•„์„œ ๊ธ‰ํžˆ ํŒจ์น˜๋ฅผ ๋ƒˆ๋‹ค. ํŒŒ์ผ ๋‚ด์šฉ๋„, ์ œ๋ชฉ๋„, ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„๋„ ๋‹ค ํ•œ๊ธ€์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ์„ค์ •ํ•˜๋Š” ๋ฐ ๊ฝค ์• ๋จน์—ˆ๋‹ค. ์ฝ์–ด์˜ค๋Š” ๊ฑด ์ž˜ ํ•˜๋Š”๋ฐ ๋‹ค๋ฅธ ํ•œ์ž๋กœ ์ฝ๊ธฐ๋„ ํ•˜๊ณ , charset ๋ฐ”๊พธ๊ณ  ํ•ด๋ณด๋‹ˆ ์ตœ์ดˆ ์ฝ์–ด์˜ฌ ๋• ์ž˜ํ•˜๋Š”๋ฐ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด๋‹ˆ๊น ๊นจ์ง€๊ณ ... ์ด๊ฒƒ ๋•Œ๋ฌธ์— ๋งˆ์ง€๋ง‰ ํŒจ์น˜์— 3-4์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๋‹ค.

๋งบ์Œ๋ง

์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์„œ ๊ณ ๊ฐ ์•ž์—์„œ ์‹œ์—ฐํ•ด๋“œ๋ฆฌ๋‹ˆ๊น ๊ฒ๋‚˜ ์ข‹์•„ํ•˜์…จ๋‹ค. ํ•œ๋ฒˆ์€ ๊ทธ๊ฑฐ ๊ณ ๋ง™๋‹ค๊ณ  ๋นต๋„ ์‚ฌ์ฃผ๊ณ  ์ดˆ์ฝœ๋ฆฟ๋„ ๋ฐœ๋ Œํƒ€์ธ๋ฐ์ด๋ผ๊ณ  ์‚ฌ๋‹ค์ฃผ์…จ๋‹ค.

์—ฌ๋‹ด์œผ๋กœ, ์‚ฌ์‹ค ์ถœ๋ ฅ๋˜๋Š” ํŒŒ์ผ์„ .pdf ๋กœ ํ•˜๊ณ  ์‹ถ์–ด์„œ ์—ด์‹ฌํžˆ pdf ํŒŒ์ผ ๋‚ด๋ถ€๊ตฌ์กฐ๋„ ๊ณต๋ถ€ํ•˜๊ณ  ์—ด์‹ฌํžˆ ๋งŒ๋“ค์–ด๋ณด๊ธฐ๋„ ํ–ˆ๋Š”๋ฐ, ๋ญ”๊ฐ€ ๊น”๋”ํ•˜๊ฒŒ ์ด์˜๊ฒŒ ๋งŒ๋“œ๋ ค๋ฉด ๋„ˆ๋ฌด ๋งŽ์€ ๊ฒƒ์„ ์•Œ์•„์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•„๋ฒ„๋ ธ๋‹ค. ๊ทธ๋ž˜์„œ java api ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์„ ์ฐพ์•„๋ดค๋Š”๋ฐ, ํ•œ๋ฒˆ๋„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ ๊ฒƒ์„ import ํ•ด์„œ ์“ด ์ ์ด ์—†์–ด์„œ ์“ฐ์ง€๋„ ๋ชปํ–ˆ๋‹ค. ์ด๊ฒƒ๋„ ๋ฐฐ์›Œ๋ด์•ผ๊ฒ ๋‹ค.

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋กœ jar ํŒŒ์ผ๋„ ์ฒ˜์Œ ๋งŒ๋“ค์–ด๋ณด๊ณ , ๋ฐฐํฌ๋„ ์ฒ˜์Œ ํ•ด๋ณด์•˜๋‹ค. exception handling ๊ณผ version control, efficiency ํ–ฅ์ƒ๋„ ์‹ ๊ฒฝ์จ๋ณด์•˜๋‹ค.

์ด๊ฒƒ์„ ๊ณ„๊ธฐ๋กœ,java์˜ ๋‹ค๋ฅธ ์‹ค๋ฌด์  ์‚ฌ์šฉ์„ ๋ฐฐ์›Œ๋ณด๊ณ  ์‹ถ์€ ๋งˆ์Œ์ด ์ƒ๊ฒผ๋‹ค. ์˜์–ด๋กœ ๋น„๊ตํ•˜์ž๋ฉด, ์ƒ์กด์˜์–ด๋Š” ํ•  ์ค„ ์•Œ์•˜์ง€๋งŒ ์จ๋จน์ง€๋ฅผ ์•Š์•˜๋˜ ๋‚ด๊ฐ€ ์ฒ˜์Œ์œผ๋กœ ๋‹จํŽธ ์ด์•ผ๊ธฐ๋ฅผ ์“ด ์…ˆ์ด๋‹ค. ์ด์ œ ๋…ธ๋ž˜ ๊ฐ€์‚ฌ๋„ ์จ๋ณด๊ณ , ์‹œ๋„ ์จ๋ณด๊ณ , ์†Œ์„ค๋„ ์จ๋ณด๊ณ , ๊ธฐ์‚ฌ๋„ ์จ๋ณด๊ณ  ์—ฌ๋Ÿฌ๊ฐ€์ง€๋กœ ํ•ด๋ณด๊ณ  ์‹ถ๋‹ค.

Comments

์ฒซ ๋Œ“๊ธ€์„ ๋‚จ๊ฒจ๋ณด์„ธ์š”!