Amenable
Amenable's Blog
Amenable
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (189)
    • ๐Ÿ“‚ JAVA (87)
      • ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” (65)
      • ์ฃผ์š” ๊ฐœ๋… (22)
    • ๐Ÿ“‚ ๊ฐœ๋ฐœ ์„œ์  (22)
      • ์‹ค์šฉ์ฃผ์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ (1)
      • ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์‚ฌ์‹ค๊ณผ ์˜คํ•ด (2)
      • ํด๋ฆฐ ์ฝ”๋“œ (8)
      • ํ•จ๊ป˜ ์ž๋ผ๊ธฐ (1)
      • ๊ทธ๋ฆผ์œผ๋กœ ๋ฐฐ์šฐ๋Š” HTTP&Network Basic (10)
    • ๐Ÿ“‚ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (8)
      • ๊ฐœ๋… (8)
      • ๋ฌธ์ œํ’€์ด (0)
    • ๐Ÿ“‚ ๋„คํŠธ์›Œํฌ (14)
      • ๊ฐœ๋… (6)
      • ์„ฑ๊ณต๊ณผ ์‹คํŒจ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” 1%์˜ ๋„คํŠธ์›Œํฌ ์›๋ฆฌ (8)
    • ๐Ÿ“‚ ์Šคํ”„๋ง (13)
      • ๊ธฐ๋ณธ ๊ฐœ๋… (13)
    • ๐Ÿ“‚ WEB (5)
    • ๐Ÿ“‚ ์ž๋ฃŒ๊ตฌ์กฐ (12)
      • ๊ฐœ๋… (2)
      • ์ •๋ ฌ (8)
      • ํŠธ๋ฆฌ (2)
    • ๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (10)
      • ์ตœ์†Œ์‹ ์žฅํŠธ๋ฆฌ (2)
      • ์ตœ๋‹จ ๊ฒฝ๋กœ (2)
      • ๋ฌธ์ž์—ด (2)
      • ETC (4)
    • ๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜_๋ฌธ์ œํ’€์ด (4)
      • BOJ_๋ฐฑ์ค€ (4)
    • ๐Ÿ“‚ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (3)
    • ๐Ÿ“‚ DevOps (2)
      • ๋ฐฐํฌ (2)
    • ๐Ÿ“‚ ํ›„๊ธฐ (8)
      • ์šฐ์•„ํ•œ ํ…Œํฌ์ฝ”์Šค(ํ”„๋ฆฌ์ฝ”์Šค) (4)
      • 2023๋…„ (3)
      • 2024๋…„ (1)
    • ๐Ÿ“‚ ํšŒ๊ณ  (1)
      • 2023๋…„ (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๐Ÿš€ GitHub

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
Amenable

Amenable's Blog

ํด๋ฆฐ ์ฝ”๋“œ(Clean Code) - 14์žฅ, 15์žฅ, 16์žฅ, 17์žฅ
๐Ÿ“‚ ๊ฐœ๋ฐœ ์„œ์ /ํด๋ฆฐ ์ฝ”๋“œ

ํด๋ฆฐ ์ฝ”๋“œ(Clean Code) - 14์žฅ, 15์žฅ, 16์žฅ, 17์žฅ

2023. 1. 14. 12:23

14์žฅ. ์ ์ง„์ ์ธ ๊ฐœ์„  ๐Ÿ“Œ

  ๋‚˜์œ ์ฝ”๋“œ๋ณด๋‹ค ๋” ์˜ค๋žซ๋™์•ˆ ๋” ์‹ฌ๊ฐํ•˜๊ฒŒ ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ์— ์•…์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์š”์ธ๋„ ์—†๋‹ค. ๋‚˜์œ ์ผ์ •์€ ๋‹ค์‹œ ์งœ๋ฉด ๋œ๋‹ค. ๋‚˜์œ ์š”๊ตฌ์‚ฌํ•ญ์€ ๋‹ค์‹œ ์ •์˜ํ•˜๋ฉด ๋œ๋‹ค. ๋‚˜์œ ํŒ€ ์—ญํ•™์€ ๋ณต๊ตฌํ•˜๋ฉด ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๋‚˜์œ ์ฝ”๋“œ๋Š” ์ฉ์–ด ๋ฌธ๋“œ๋Ÿฌ์ง„๋‹ค. ์ ์  ๋ฌด๊ฒŒ๊ฐ€ ๋Š˜์–ด๋‚˜ ํŒ€์˜ ๋ฐœ๋ชฉ์„ ์žก๋Š”๋‹ค. ์†๋„๊ฐ€ ์ ์  ๋А๋ ค์ง€๋‹ค ๋ชปํ•ด ๊ธฐ์–ด๊ฐ€๊ธฐ๋„ ํ•œ๋‹ค. ๋„ˆ๋ฌด ์„œ๋‘๋ฅด๋‹ค๊ฐ€ ์ดํ›„๋กœ ์˜์›ํžˆ ์ž์‹ ๋“ค์˜ ์šด๋ช…์„ ์ง€๋ฐฐํ•  ์•…์„ฑ ์ฝ”๋“œ๋ผ๋Š” ๊ตด๋ ˆ๋ฅผ ์งŠ์–ด์ง„๋‹ค.

  ๋ฌผ๋ก  ๋‚˜์œ ์ฝ”๋“œ๋„ ๊นจ๋—ํ•œ ์ฝ”๋“œ๋กœ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋น„์šฉ์ด ์—„์ฒญ๋‚˜๊ฒŒ ๋งŽ์ด ๋“ ๋‹ค. ์ฝ”๋“œ๊ฐ€ ์ฉ์–ด๊ฐ€๋ฉฐ ๋ชจ๋“ˆ์€ ์„œ๋กœ์„œ๋กœ ์–ฝํžˆ๊ณ ์„ค์ผœ ๋’ค์—‰ํ‚ค๊ณ  ์ˆจ๊ฒจ์ง„ ์˜์กด์„ฑ์ด ์ˆ˜๋„ ์—†์ด ์ƒ๊ธด๋‹ค. ์˜ค๋ž˜๋œ ์˜์กด์„ฑ์„ ์ฐพ์•„๋‚ด ๊นจ๋ ค๋ฉด ์ƒ๋‹นํ•œ ์‹œ๊ฐ„๊ณผ ์ธ๋‚ด์‹ฌ์ด ํ•„์š”ํ•˜๋‹ค. ๋ฐ˜๋ฉด ์ฒ˜์Œ๋ถ€ํ„ฐ ์ฝ”๋“œ๋ฅผ ๊นจ๋—ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ๋ž€ ์ƒ๋Œ€์ ์œผ๋กœ ์‰ฝ๋‹ค. ์•„์นจ์— ์—‰๋ง์œผ๋กœ ๋งŒ๋“  ์ฝ”๋“œ๋ฅผ ์˜คํ›„์— ์ •๋ฆฌํ•˜๊ธฐ๋Š” ์–ด๋ ต์ง€ ์•Š๋‹ค. ๋”์šฑ์ด 5๋ถ„ ์ „์— ์—‰๋ง์œผ๋กœ ๋งŒ๋“  ์ฝ”๋“œ๋Š” ์ง€๊ธˆ ๋‹น์žฅ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์•„์ฃผ ์‰ฝ๋‹ค.

  ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ฝ”๋“œ๋Š” ์–ธ์ œ๋‚˜ ์ตœ๋Œ€ํ•œ ๊น”๋”ํ•˜๊ณ  ๋‹จ์ˆœํ•˜๊ฒŒ ์ •๋ฆฌํ•˜์ž. ์ ˆ๋Œ€๋กœ ์ฉ์–ด๊ฐ€๊ฒŒ ๋ฐฉ์น˜ํ•˜๋ฉด ์•ˆ ๋œ๋‹ค. 

(ํ•ด๋‹น ์žฅ์—์„œ๋Š” Args.java๋ผ๋Š” ์ฝ”๋“œ๋ฅผ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•œ๋‹ค. ์ฑ…์„ ํ†ตํ•ด ์–ด๋–ป๊ฒŒ ์ ์ฐจ์ ์œผ๋กœ ๊ฐœ์„ ํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด๊ธธ ๋ฐ”๋ž€๋‹ค.)

 

15์žฅ. JUnit ๋“ค์—ฌ๋‹ค๋ณด๊ธฐ ๐Ÿ‘‘

  ํ•ด๋‹น ์žฅ์—์„œ๋Š” ComparisonCompactorTest.java๋กœ ComparisonCompactor ๋ชจ๋“ˆ์— ๋Œ€ํ•ด์„œ 100% ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€ ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•œ ๊ฒƒ์„ ๋ณด์—ฌ์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋””ํŒฉํ„ฐ๋ง(= ๋ฆฌํŒฉํ„ฐ๋ง์˜ ๋ฐ˜๋Œ€ ๊ณผ์ •)๋œ ComparisonCompactor ์ฝ”๋“œ์—์„œ ์ถœ๋ฐœํ•˜์—ฌ ์–ด๋–ป๊ฒŒ  ์–ด๋А ์ •๋„ ์ˆ˜์ค€์— ์ด๋ฅด๋Š” ComparisonCompactor๋ฅผ ๋งŒ๋“ค์—ˆ๋Š”์ง€ ๋ณด์—ฌ์ค€๋‹ค. (์ฑ…์— ๋‚˜์˜จ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค.)

 

16์žฅ. SerialDate ๋ฆฌํŒฉํ„ฐ๋ง ๐Ÿ‘“

  16์žฅ์—์„œ๋Š” http://www.jfree.org/jcommon/index.php์—์„œ ์ œ๊ณต๋ฐ›์€ JCommon ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์žˆ๋Š” org.jfree.date ํŒจํ‚ค์ง€์˜ SerialDate๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ๋ฆฌํŒฉํ„ฐ๋ง์„ ์ง„ํ–‰ํ•œ๋‹ค. 

 

17์žฅ. ๋ƒ„์ƒˆ์™€ ํœด๋ฆฌ์Šคํ‹ฑ ๐Ÿคฟ

  Refactoring์˜ ์ €์ž์ธ ๋งˆํ‹ด ํŒŒ์šธ๋Ÿฌ๊ฐ€ ๋งก์€ ์ฝ”๋“œ ๋ƒ„์ƒˆ์— ์ด ์ฑ…์˜ ์ €์ž๊ฐ€ ๋งก์€ ๋ƒ„์ƒˆ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ƒ„์ƒˆ๋“ค์„ ์†Œ๊ฐœํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ €์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ์งœ๋ฉด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๊ต์™€ ํœด๋ฆฌ์Šคํ‹ฑ๋„ ํฌํ•จํ•œ๋‹ค.

  • ์ฃผ์„์œผ๋กœ ์ฒ˜๋ฆฌ๋œ ์ฝ”๋“œ๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด ์ฆ‰๊ฐ ์ง€์›Œ๋ฒ„๋ ค๋ผ!
      ๊ฑฑ์ •ํ•  ํ•„์š” ์—†๋‹ค. ์†Œ์Šค ์ฝ”๋“œ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ด ๊ธฐ์–ตํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋ˆ„๊ตฐ๊ฐ€ ์ •๋ง๋กœ ํ•„์š”ํ•˜๋‹ค๋ฉด ์ด์ „ ๋ฒ„์ „์„ ๊ฐ€์ ธ์˜ค๋ฉด ๋œ๋‹ค. ์ฃผ์„์œผ๋กœ ์ฒ˜๋ฆฌ๋œ ์ฝ”๋“œ๋ฅผ ๋‚ด๋ฒ„๋ ค ๋‘์ง€ ๋งˆ๋ผ.
  • ๋นŒ๋“œ๋Š” ๊ฐ„๋‹จํžˆ ํ•œ ๋‹จ๊ณ„๋กœ ๋๋‚˜์•ผ ํ•œ๋‹ค.
      ์†Œ์Šค ์ฝ”๋“œ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์—์„œ ์ด๊ฒƒ์ €๊ฒƒ ๋”ฐ๋กœ๋”ฐ๋กœ ์ฒดํฌ์•„์›ƒํ•  ํ•„์š”๊ฐ€ ์—†์–ด์•ผ ํ•œ๋‹ค. ๋ถˆ๊ฐ€ํ•ดํ•œ ๋ช…๋ น์ด๋‚˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‡๋‹ฌ์•„ ์‹คํ–‰ํ•ด ๊ฐ ์š”์†Œ๋ฅผ ๋”ฐ๋กœ ๋นŒ๋“œํ•  ํ•„์š”๊ฐ€ ์—†์–ด์•ผ ํ•œ๋‹ค. ์˜จ๊ฐ– JAR ํŒŒ์ผ, XML ํŒŒ์ผ, ๊ธฐํƒ€ ์‹œ์Šคํ…œ์— ํ•„์š”ํ•œ ํŒŒ์ผ์„ ์ฐพ๋А๋ผ ์—ฌ๊ธฐ์ €๊ธฐ ๋’ค์ ์ผ ํ•„์š”๊ฐ€ ์—†์–ด์•ผ ํ•œ๋‹ค. ํ•œ ๋ช…๋ น์œผ๋กœ ์ „์ฒด๋ฅผ ์ฒดํฌ์•„์›ƒํ•ด์„œ ํ•œ ๋ช…๋ น์œผ๋กœ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • ์ถœ๋ ฅ ์ธ์ˆ˜๋Š” ์ง๊ด€์„ ์ •๋ช…์œผ๋กœ ์œ„๋ฐฐํ•œ๋‹ค. 
      ์ผ๋ฐ˜์ ์œผ๋กœ ๋…์ž๋Š” ์ธ์ˆ˜๋ฅผ (์ถœ๋ ฅ์ด ์•„๋‹ˆ๋ผ) ์ž…๋ ฅ์œผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค. ํ•จ์ˆ˜์—์„œ ๋ฌด์–ธ๊ฐ€์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค๋ฉด (์ถœ๋ ฅ ์ธ์ˆ˜๋ฅผ ์“ฐ์ง€ ๋ง๊ณ ) ํ•จ์ˆ˜๊ฐ€ ์†ํ•œ ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•œ๋‹ค. ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๋‚˜์˜ค๊ธฐ ์ „์—๋Š” ์ถœ๋ ฅ ์ธ์ˆ˜๊ฐ€ ๋ถˆ๊ฐ€ํ”ผํ•œ ๊ฒฝ์šฐ๋„ ์žˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด์—์„œ๋Š” ์ถœ๋ ฅ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ๊ฑฐ์˜ ์—†๋‹ค. ์ถœ๋ ฅ ์ธ์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๋ผ๊ณ  ์„ค๊ณ„ํ•œ ๋ณ€์ˆ˜๊ฐ€ ๋ฐ”๋กœ this์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋‹ค์‹œ ๋งํ•ด, append Footer๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์ด ์ข‹๋‹ค.
    (์ถœ๋ ฅ ์ธ์ˆ˜์™€ ๊ด€๋ จํ•ด์„œ ๋‹ค์Œ ๊ธ€์„ ์ฝ์–ด๋ณด๊ธฐ๋ฅผ ๋ฐ”๋ž€๋‹ค. https://lordofkangs.tistory.com/m/194)
  • ๋‹น์—ฐํ•˜๊ฒŒ ์—ฌ๊ธธ ๋งŒํ•œ ๋™์ž‘๊ณผ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค.
      ์ตœ์†Œ ๋†€๋žŒ์˜ ์›์น™(The Principle of Least Surprise)์— ์˜๊ฑฐํ•ด ํ•จ์ˆ˜๋‚˜ ํด๋ž˜์Šค๋Š” ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋‹น์—ฐํ•˜๊ฒŒ ์—ฌ๊ธธ ๋งŒํ•œ ๋™์ž‘๊ณผ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค. ๋‹น์—ฐํ•˜๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋Š” ๋™์ž‘๊ณผ ๊ธฐ๋Šฅ์˜ ์˜ˆ์‹œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ์š”์ผ ๋ฌธ์ž์—ด์—์„œ ์š”์ผ์„ ๋‚˜ํƒ€๋‚ด๋Š” enum์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž. ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ํ•จ์ˆ˜๊ฐ€ 'Monday'๋ฅผ Day.MONDAY๋กœ ๋ณ€ํ™˜ํ•˜๋ฆฌ๋ผ ๊ธฐ๋Œ€ํ•˜๊ณ , ์ผ๋ฐ˜์ ์œผ๋กœ ์“ฐ๋Š” ์š”์ผ ์•ฝ์–ด๋„ ์˜ฌ๋ฐ”๋กœ ๋ณ€ํ™˜ํ•˜๋ฆฌ๋ผ ๊ธฐ๋Œ€ํ•˜๊ณ , ๋Œ€์†Œ๋ฌธ์ž๋Š” ๋‹น์—ฌํžŒ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์œผ๋ฆฌ๋ผ ๊ธฐ๋Œ€ํ•œ๋‹ค.
Day day = DayDate.StringToDay(String dayName);
  • DRY (Don't Repeat Yourself)
      ์ฝ”๋“œ์—์„œ ์ค‘๋ณต์„ ๋ฐœ๊ฒฌํ•  ๋•Œ๋งˆ๋‹ค ์ถ”์ƒํ™”ํ•  ๊ธฐํšŒ๋กœ ๊ฐ„์ฃผํ•˜๋ผ. ์ค‘๋ณต๋œ ์ฝ”๋“œ๋ฅผ ํ•˜์œ„ ๋ฃจํ‹ด์ด๋‚˜ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋กœ ๋ถ„๋ฆฌํ•˜๋ผ.
      ๊ฐ€์žฅ ๋ป”ํ•œ ์œ ํ˜•์€ ๋˜‘๊ฐ™์€ ์ฝ”๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ์ฐจ๋ก€ ๋‚˜์˜ค๋Š” ์ค‘๋ณต์ด๋‹ค. ์ด๋Ÿฐ ์ค‘๋ณต์€ ๊ฐ„๋‹จํ•œ ํ•จ์ˆ˜๋กœ ๊ต์ฒดํ•œ๋‹ค.
      ์ข€ ๋” ๋ฏธ๋ฌ˜ํ•œ ์œ ํ˜•์€ ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์—์„œ ์ผ๋ จ์˜ switch/case๋‚˜ if/else ๋ฌธ์œผ๋กœ ๋˜‘๊ฐ™์€ ์กฐ๊ฑด์„ ๊ฑฐ๋“ญ ํ™•์ธํ•˜๋Š” ์ค‘๋ณต์ด๋‹ค. ์ด๋Ÿฐ ์ค‘๋ณต์€ ๋‹คํ˜•์„ฑ(polymorphism)์œผ๋กœ ๋Œ€์ฒดํ•ด์•ผ ํ•œ๋‹ค.
      ๋”๋”์šฑ ๋ฏธ๋ฌ˜ํ•œ ์œ ํ˜•์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์œ ์‚ฌํ•˜๋‚˜ ์ฝ”๋“œ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ์ค‘๋ณต์ด๋‹ค. ์ค‘๋ณต์€ ์ค‘๋ณต์ด๋ฏ€๋กœ TEMPLATE METHOD ํŒจํ„ด์ด๋‚˜ STRATEGY ํŒจํ„ด์œผ๋กœ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•œ๋‹ค.
  • ์„ ํƒ์ž ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ๋ผ
      
    ์„ ํƒ์ž(selector) ์ธ์ˆ˜๋Š” ๋ชฉ์ ์„ ๊ธฐ์–ตํ•˜๊ธฐ ์–ด๋ ค์šธ ๋ฟ ์•„๋‹ˆ๋ผ ๊ฐ ์„ ํƒ์ž ์ธ์ˆ˜๊ฐ€ ์—ฌ๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ํ•˜๋‚˜๋กœ ์กฐํ•ฉํ•œ๋‹ค. ์„ ํƒ์ž ์ธ์ˆ˜๋Š” ํฐ ํ•จ์ˆ˜๋ฅผ ์ž‘์€ ํ•จ์ˆ˜ ์—ฌ๋Ÿฟ์œผ๋กœ ์ชผ๊ฐœ์ง€ ์•Š์œผ๋ ค๋Š” ๊ฒŒ์œผ๋ฆ„์˜ ์†Œ์‚ฐ์ด๋‹ค. ๋ฌผ๋ก  ๋ถ€์šธ ์ธ์ˆ˜๋งŒ์ด ๋ฌธ์ œ๋ผ๋Š” ๋ง์€ ์•„๋‹ˆ๋‹ค. enum, int ๋“ฑ ํ•จ์ˆ˜ ๋™์ž‘์„ ์ œ์–ดํ•˜๋ ค๋Š” ์ธ์ˆ˜๋Š” ํ•˜๋‚˜ ๊ฐ™์ด ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ, ์ธ์ˆ˜๋ฅผ ๋„˜๊ฒจ ๋™์ž‘์„ ์„ ํƒํ•˜๋Š” ๋Œ€์‹  ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“œ๋Š” ํŽธ์ด ์ข‹๋‹ค. 
  • ๋ถ€์ ์ ˆํ•œ static ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ๋ผ
Math.max(double a, double b) // ์ข‹์€ static ํ•จ์ˆ˜
HourlyPayCalculator.calculatePay(employee, overtimeRate); // ์ ์ ˆํ•˜์ง€ ์•Š์€ static ํ•จ์ˆ˜

  ๋‘ ๋ฒˆ์งธ ์ค„์˜ ํ•จ์ˆ˜๋Š” ์ ์ ˆํ•˜์ง€ ์•Š์€ static ํ•จ์ˆ˜์ด๋‹ค. ํ•จ์ˆ˜๋ฅผ ์žฌ์ •์˜ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์กด์žฌํ•˜๊ณ  ์ˆ˜๋‹น์„ ๊ณ„์‚ฐํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์—ฌ๋Ÿฌ ๊ฐœ์ผ์ง€๋„ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  ์ผ๋ฐ˜์ ์œผ๋กœ static ํ•จ์ˆ˜๋ณด๋‹ค ์ธ์Šคํ„ด์Šค ํ•จ์ˆ˜๊ฐ€ ๋” ์ข‹๋‹ค. ์กฐ๊ธˆ์ด๋ผ๋„ ์˜์‹ฌ์Šค๋Ÿฝ๋‹ค๋ฉด ์ธ์Šคํ„ด์Šค ํ•จ์ˆ˜๋กœ ์ •์˜ํ•œ๋‹ค. ๋ฐ˜๋“œ์‹œ static ํ•จ์ˆ˜๋กœ ์ •์˜ํ•ด์•ผ๊ฒ ๋‹ค๋ฉด ์žฌ์ •์˜ํ•  ๊ฐ€๋Šฅ์„ฑ์€ ์—†๋Š”์ง€ ๊ผผ๊ผผํžˆ ๋”ฐ์ ธ๋ณด์ž.

  • If/Else ํ˜น์€ Switch/Case ๋ฌธ๋ณด๋‹ค ๋‹คํ˜•์„ฑ์„ ์‚ฌ์šฉํ•˜๋ผ
      ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์ฒซ์งธ, ๋Œ€๋‹ค์ˆ˜ ๊ฐœ๋ฐœ์ž๊ฐ€ switch ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๊ทธ ์ƒํ™ฉ์—์„œ ๊ฐ€์žฅ ์˜ฌ๋ฐ”๋ฅธ ์„ ํƒ์ด๊ธฐ๋ณด๋‹ค๋Š” ๋‹น์žฅ ์†์‰ฌ์šด ์„ ํƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ switch๋ฅผ ์„ ํƒํ•˜๊ธฐ ์ „์— ๋‹คํ˜•์„ฑ์„ ๋จผ์ € ๊ณ ๋ คํ•˜๋ผ.
      ๋‘˜์งธ, ์œ ํ˜•๋ณด๋‹ค ํ•จ์ˆ˜๊ฐ€ ๋” ์‰ฝ๊ฒŒ ๋ณ€ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ทนํžˆ ๋“œ๋ฌผ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋ชจ๋“  switch ๋ฌธ์„ ์˜์‹ฌํ•ด์•ผ ํ•œ๋‹ค. 
  • ์กฐ๊ฑด์„ ์บก์Аํ™”ํ•˜๋ผ
if (shouldBeDeleted(timer)) // ์ข‹๋‹ค.
if (timer.hasExpired() && !timer.isRecurrent()) // ๋‚˜์˜๋‹ค.
  • ๋ถ€์ • ์กฐ๊ฑด์€ ํ”ผํ•˜๋ผ
if (buffer.shouldCompact()) // ์ข‹๋‹ค.
if (!buffer.shouldNotCompact()) // ๋‚˜์˜๋‹ค.
  • ์ˆจ๊ฒจ์ง„ ์‹œ๊ฐ„์ ์ธ ๊ฒฐํ•ฉ
      ๋•Œ๋กœ๋Š” ์‹œ๊ฐ„์ ์ธ ๊ฒฐํ•ฉ์ด ํ•„์š”ํ•˜๋‹ค. ํ•˜์ง€๋งŒ ์‹œ๊ฐ„์ ์ธ ๊ฒฐํ•ฉ์„ ์ˆจ๊ฒจ์„œ๋Š” ์•ˆ ๋œ๋‹ค. ํ•จ์ˆ˜๋ฅผ ์งค ๋•Œ๋Š” ํ•จ์ˆ˜ ์ธ์ˆ˜๋ฅผ ์ ์ ˆํžˆ ๋ฐฐ์น˜ํ•ด ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ์ˆœ์„œ๊ฐ€ ๋ช…๋ฐฑํžˆ ๋“œ๋Ÿฌ๋‚ธ๋‹ค. ์•„๋ž˜๋Š” ์‹œ๊ฐ„์ ์ธ ๊ฒฐํ•ฉ์„ ๊ฐ•์ œํ•˜์ง€ ์•Š์€ ์ฝ”๋“œ์™€ ์ผ์ข…์˜ ์—ฐ๊ฒฐ ์†Œ์ž๋ฅผ ์ƒ์„ฑํ•ด ์‹œ๊ฐ„์ ์ธ ๊ฒฐํ•ฉ์„ ๋…ธ์ถœํ•œ ์ฝ”๋“œ์ด๋‹ค.
// ์‹œ๊ฐ„์ ์ธ ๊ฒฐํ•ฉ์„ ๊ฐ•์ œํ•˜์ง€ ์•Š์€ ์ฝ”๋“œ
public class MoogDiver {
    Gradient gradient;
    List<Spline> splines;
    
    public void dive(String reason) {
        saturateGradient();
        reticulateSplines();
        diveForMoog(reason);
    }
    ...
}
// ์ผ์ข…์˜ ์—ฐ๊ฒฐ ์†Œ์ž๋ฅผ ์ƒ์„ฑํ•ด ์‹œ๊ฐ„์ ์ธ ๊ฒฐํ•ฉ์„ ๋…ธ์ถœํ•œ ์ฝ”๋“œ
public class MoogDiver {
    Gradient gradient;
    List<Spline> splines;
    
    public void dive(String reason) {
        Gradient gradient = saturateGradient();
        List<Spline> splines = reticulateSplines(gradient);
        diveForMoog(splines, reason);
    }
    ...
}
  • ์ถ”์ด์  ํƒ์ƒ‰์„ ํ”ผํ•˜๋ผ
      ์ผ๋ฐ˜์ ์œผ๋กœ ํ•œ ๋ชจ๋“ˆ์€ ์ฃผ๋ณ€ ๋ชจ๋“ˆ์„ ๋ชจ๋ฅผ์ˆ˜๋ก ์ข‹๋‹ค. ์ข€ ๋” ๊ตฌ์ฒด์ ์œผ๋กœ, A๊ฐ€ B๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  B๊ฐ€ C๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค ํ•˜๋”๋ผ๋„ A๊ฐ€ C๋ฅผ ์•Œ์•„์•ผ ํ•  ํ•„์š”๋Š” ์—†๋‹ค๋Š” ๋œป์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด a.getB(),getC().doSomething();์€ ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š๋‹ค.
      ์ด๋ฅผ ๋””๋ฏธํ„ฐ์˜ ๋ฒ•์น™(Law of Demeter)์ด๋ผ ๋ถ€๋ฅธ๋‹ค. ์ด๊ฒƒ์€ ์ž์‹ ์ด ์ง์ ‘ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“ˆ๋งŒ ์•Œ์•„์•ผ ํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค. ๋‚ด๊ฐ€ ์•„๋Š” ๋ชจ๋“ˆ์ด ์—ฐ์ด์–ด ์ž์‹ ์ด ์•„๋Š” ๋ชจ๋“ˆ์„ ๋”ฐ๋ผ๊ฐ€๋ฉฐ ์‹œ์Šคํ…œ ์ „์ฒด๋ฅผ ํœ˜์ €์„ ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ์˜๋ฏธ๋‹ค.
      ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ์—์„œ a.getB().getC()๋ผ๋Š” ํ˜•ํƒœ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์„ค๊ณ„์™€ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋ฐ”๊ฟ” B์™€ C ์‚ฌ์ด์— Q๋ฅผ ๋„ฃ๊ธฐ๊ฐ€ ์‰ฝ์ง€ ์•Š๋‹ค. a.getB().getC()๋ฅผ ๋ชจ๋‘ ์ฐพ์•„ a.getB().getQ().getC()๋กœ ๋ฐ”๊ฟ”์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋„ˆ๋ฌด ๋งŽ์€ ๋ชจ๋“ˆ์ด ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ์•ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ๊ตณ์–ด์ง„๋‹ค.
      ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“ˆ์ด ๋‚ด๊ฒŒ ํ•„์š”ํ•œ ์„œ๋น„์Šค๋ฅผ ๋ชจ๋‘ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค. ์›ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ฐพ๋А๋ผ ๊ฐ์ฒด ๊ทธ๋ž˜ํ”„๋ฅผ ๋”ฐ๋ผ ์‹œ์Šคํ…œ์„ ํƒ์ƒ‰ํ•  ํ•„์š”๊ฐ€ ์—†์–ด์•ผ ํ•œ๋‹ค. ๋‹ค์‹œ ๋งํ•ด, myCollaborate.doSomething();๊ณผ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋กœ ์ถฉ๋ถ„ํ•ด์•ผ ํ•œ๋‹ค.
  • ๊ธด import ๋ชฉ๋ก์„ ํ”ผํ•˜๊ณ  ์™€์ผ๋“œ์นด๋“œ๋ฅผ ์‚ฌ์šฉํ•ด๋ผ
      ํŒจํ‚ค์ง€์—์„œ ํด๋ž˜์Šค๋ฅผ ๋‘˜ ์ด์ƒ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์™€์ผ๋“œ์นด๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ํŒจํ‚ค์ง€ ์ „์ฒด๋ฅผ ๊ฐ€์ ธ์˜ค๋ผ. ๊ธด import ๋ชฉ๋ก์€ ์ฝ๊ธฐ์— ๋ถ€๋‹ด์Šค๋Ÿฝ๋‹ค. ์‚ฌ์šฉํ•˜๋Š” ํŒจํ‚ค์ง€๋ฅผ ๊ฐ„๋‹จํžˆ ๋ช…์‹œํ•˜๋ฉด ์ถฉ๋ถ„ํ•˜๋‹ค.
      ๋ช…์‹œ์ ์ธ import ๋ฌธ์€ ๊ฐ•ํ•œ ์˜์กด์„ฑ์„ ์ƒ์„ฑํ•˜์ง€๋งŒ ์™€์ผ๋“œ์นด๋“œ๋Š” ๊ทธ๋ ‡์ง€ ์•Š๋‹ค. ๋ช…์‹œ์ ์œผ๋กœ ํด๋ž˜์Šค๋ฅผ import ํ•˜๋ฉด ๊ทธ ํด๋ž˜์Šค๊ฐ€ ๋ฐ˜๋“œ์‹œ ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์™€์ผ๋“œ์นด๋“œ๋กœ ํŒจํ‚ค์ง€๋ฅผ ์ง€์ •ํ•˜๋ฉด ํŠน์ • ํด๋ž˜์Šค๊ฐ€ ์กด์žฌํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. import ๋ฌธ์€ ํŒจํ‚ค์ง€๋ฅผ ๋‹จ์ˆœํžˆ ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ์— ์ถ”๊ฐ€ํ•˜๋ฏ€๋กœ ์ง„์ •ํ•œ ์˜์กด์„ฑ์ด ์ƒ๊ธฐ์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋ชจ๋“ˆ ๊ฐ„์— ๊ฒฐํ•ฉ์„ฑ์ด ๋‚ฎ์•„์ง„๋‹ค.
      ๋ช…์‹œ์ ์œผ๋กœ import ๋ฌธ์„ ๊ธธ๊ฒŒ ๋‚˜์—ดํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ํ…Œ์ŠคํŠธ์šฉ ๋ชจ๋“ˆ์ด๋‚˜ ์Šคํ…์„ ๋นŒ๋“œํ•  ํด๋ž˜์Šค๋ฅผ ์ฐพ์œผ๋ ค ํ•œ๋‹ค๋ฉด, ๊ธฐ๋‹ค๋ž€ import ๋ฌธ์„ ํ•˜๋‚˜์”ฉ ์งš์–ด๊ฐ€๋ฉฐ ํด๋ž˜์Šค ์ „์ฒด ์ด๋ฆ„์„ ์ฐพ์€ ํ›„ ์ ์ ˆํ•œ ์Šคํ…์„ ๋ฐฐ์น˜ํ•ด์•ผ ํ•˜๋ฆฌ๋ผ. ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ๋ช…์‹œ์ ์œผ๋กœ import ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ทนํžˆ ๋“œ๋ฌผ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ์š”์ฆ˜ IDE ๋Œ€๋‹ค์ˆ˜๋Š” ๊ฐ„๋‹จํ•œ ๋ช…๋ น ํ•˜๋‚˜๋กœ ์™€์ผ๋“œ์นด๋“œ import ๋ฌธ์„ ๋ช…์‹œ์ ์ธ import ๋ฌธ ๋ชฉ๋ก์œผ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋ ˆ๊ฑฐ์ง€ ์ฝ”๋“œ๋ผ๋„ ์™€์ผ๋“œ์นด๋“œ import ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ด ์ข‹๋‹ค.
      ์™€์ผ๋“œ์นด๋“œ import ๋ฌธ์€ ๋•Œ๋กœ ์ด๋ฆ„ ์ถฉ๋Œ์ด๋‚˜ ๋ชจํ˜ธ์„ฑ์„ ์ดˆ๋ž˜ํ•œ๋‹ค. ์ด๋ฆ„์ด ๊ฐ™์œผ๋‚˜ ํŒจํ‚ค์ง€๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋Š” ๋ช…์‹œ์ ์ธ import ๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์•„๋‹ˆ๋ฉด ์ฝ”๋“œ์—์„œ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ „์ฒด ๊ฒฝ๋กœ๋ฅผ ๋ช…์‹œํ•œ๋‹ค. ๋‹ค์†Œ ๋ฒˆ๊ฑฐ๋กญ์ง€๋งŒ ์ž์ฃผ ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์—ฌ์ „ํžˆ ์™€์ผ๋“œ์นด๋“œ import ๋ฌธ์ด ๋ช…์‹œ์ ์ธ import ๋ฌธ๋ณด๋‹ค ์ข‹๋‹ค.
  • Enum์„ ๋งˆ์Œ๊ป ํ™œ์šฉํ•˜๋ผ!
      public static final int๋ผ๋Š” ์˜›๋‚  ๊ธฐ๊ต๋ฅผ ๋” ์ด์ƒ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. int ์ฝ”๋“œ์—์„œ ์˜๋ฏธ๋ฅผ ์žƒ์–ด๋ฒ„๋ฆฌ๊ธฐ๋„ ํ•œ๋‹ค. ๋ฐ˜๋ฉด enum์€ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค. enum์€ ์ด๋ฆ„์ด ๋ถ€์—ฌ๋œ ์—ด๊ฑฐ์ฒด(enumeration)์— ์†ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
      ํ•œ ๊ฐ€์ง€ ๋ง๋ถ™์ด์ž๋ฉด, enum ๋ฌธ๋ฒ•์„ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๊ธฐ ๋ฐ”๋ž€๋‹ค. ๋ฉ”์„œ๋“œ์™€ ํ•„๋“œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. int๋ณด๋‹ค ํ›จ์”ฌ ๋” ์œ ์—ฐํ•˜๊ณ  ์„œ์ˆ ์ ์ธ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๋‹ค.
  • ์ด๋ฆ„์œผ๋กœ ๋ถ€์ˆ˜ ํšจ๊ณผ๋ฅผ ์„ค๋ช…ํ•˜๋ผ
      ํ•จ์ˆ˜, ๋ณ€์ˆ˜, ํด๋ž˜์Šค๊ฐ€ ํ•˜๋Š” ์ผ์„ ๋ชจ๋‘ ๊ธฐ์ˆ ํ•˜๋Š” ์ด๋ฆ„์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋ฆ„์— ๋ถ€์ˆ˜ ํšจ๊ณผ๋ฅผ ์ˆจ๊ธฐ์ง€ ์•Š๋Š”๋‹ค.
public ObjectOutputStream getOos() throws IOException {
    if (m_oos == null) {
        m_oos = new ObjectOutputStream(m_socket.getOutputStream());
    }
    return m_oos;
}

  ์œ„ ํ•จ์ˆ˜๋Š” ๋‹จ์ˆœํžˆ "oos"๋งŒ ๊ฐ€์ ธ์˜ค์ง€ ์•Š๋Š”๋‹ค. ๋งŒ์•ฝ ๊ธฐ์กด์— "oos"๊ฐ€ ์—†์œผ๋ฉด ์ƒ์„ฑํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ createOrReturnOos๋ผ๋Š” ์ด๋ฆ„์ด ๋” ์ข‹๋‹ค.

  • ์ปค๋ฒ„๋ฆฌ์ง€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ!
      ์ปค๋ฒ„๋ฆฌ์ง€ ๋„๊ตฌ๋Š” ํ…Œ์ŠคํŠธ๊ฐ€ ๋น ๋œจ๋ฆฌ๋Š” ๊ณต๋ฐฑ์„ ์•Œ๋ ค์ค€๋‹ค. ์ปค๋ฒ„๋ฆฌ์ง€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ…Œ์ŠคํŠธ๊ฐ€ ๋ถˆ์ถฉ๋ถ„ํ•œ ๋ชจ๋“ˆ, ํด๋ž˜์Šค, ํ•จ์ˆ˜๋ฅผ ์ฐพ๊ธฐ๊ฐ€ ์‰ฌ์›Œ์ง„๋‹ค.

17์žฅ ๊ฒฐ๋ก 

  ์ด ์žฅ์—์„œ ์†Œ๊ฐœํ•œ ํœด๋ฆฌ์Šคํ‹ฑ๊ณผ ๋ƒ„์ƒˆ ๋ชฉ๋ก์ด ์™„์ „ํ•˜๋‹ค ๋งํ•˜๊ธฐ๋Š” ์–ด๋ ต๋‹ค. ์•„๋‹ˆ, ์™„์ „ํ•œ ๋ชฉ๋ก์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ ๋„ ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š”๋‹ค. ํ•˜์ง€๋งŒ ์™„์ „ํ•œ ๋ชฉ๋ก์ด ๋ชฉํ‘œ๊ฐ€ ์•„๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์†Œ๊ฐœํ•œ ๋ชฉ๋ก์€ ๊ฐ€์น˜ ์ฒด๊ณ„๋ฅผ ํ”ผ๋ ฅํ•  ๋ฟ์ด๋‹ค.

  ์ผ๊ตฐ์˜ ๊ทœ์น™๋งŒ ๋”ฐ๋ฅธ๋‹ค๊ณ  ๊นจ๋—ํ•œ ์ฝ”๋“œ๊ฐ€ ์–ป์–ด์ง€์ง€ ์•Š๋Š”๋‹ค. ํœด๋ฆฌ์Šคํ‹ฑ ๋ชฉ๋ก์„ ์ตํžŒ๋‹ค๊ณ  ์†Œํ”„ํŠธ์›จ์–ด ์žฅ์ธ์ด ๋˜์ง€๋Š” ๋ชปํ•œ๋‹ค. ์ „๋ฌธ๊ฐ€ ์ •์‹ ๊ณผ ์žฅ์ธ ์ •์‹ ์€ ๊ฐ€์น˜์—์„œ ๋‚˜์˜จ๋‹ค. ๊ทธ ๊ฐ€์น˜์— ๊ธฐ๋ฐ˜ํ•œ ๊ทœ์œจ๊ณผ ์ ˆ์ œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. 

'๐Ÿ“‚ ๊ฐœ๋ฐœ ์„œ์  > ํด๋ฆฐ ์ฝ”๋“œ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

ํด๋ฆฐ ์ฝ”๋“œ(Clean Code) - 13์žฅ  (2) 2023.01.12
ํด๋ฆฐ ์ฝ”๋“œ(Clean Code) - 11์žฅ, 12์žฅ  (0) 2023.01.11
ํด๋ฆฐ ์ฝ”๋“œ(Clean Code) - 10์žฅ  (0) 2023.01.11
ํด๋ฆฐ ์ฝ”๋“œ(Clean Code) - 8์žฅ, 9์žฅ  (0) 2023.01.10
ํด๋ฆฐ ์ฝ”๋“œ(Clean Code) - 7์žฅ  (0) 2023.01.10
    '๐Ÿ“‚ ๊ฐœ๋ฐœ ์„œ์ /ํด๋ฆฐ ์ฝ”๋“œ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • ํด๋ฆฐ ์ฝ”๋“œ(Clean Code) - 13์žฅ
    • ํด๋ฆฐ ์ฝ”๋“œ(Clean Code) - 11์žฅ, 12์žฅ
    • ํด๋ฆฐ ์ฝ”๋“œ(Clean Code) - 10์žฅ
    • ํด๋ฆฐ ์ฝ”๋“œ(Clean Code) - 8์žฅ, 9์žฅ
    Amenable
    Amenable
    CS, ์ž๋ฐ”, ์ž๋ฃŒ๊ตฌ์กฐ, ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์Šคํ”„๋ง, ์Šคํ”„๋ง ๋ถ€ํŠธ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐœ๋ฐœ์— ๊ด€ํ•œ ๋‚ด์šฉ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”