๐Ÿ“œ CleanCode

[CleanCode]ํด๋ž˜์Šค 2

๋‰ด์ด NUEY 2024. 10. 8. 18:00
๋ฐ˜์‘ํ˜•

 

์‘์ง‘๋„
Cohesion
: ํด๋ž˜์Šค ๋งค์„œ๋“œ๋Š” ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋ฅผ ํ•˜๋‚˜ ์ด์ƒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

์‘์ง‘๋„๊ฐ€ ๋†’์€ ํด๋ž˜์Šค

  • ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฉ”์„œ๋“œ๊ฐ€ ์ „์—ญ๋ณ€์ˆ˜๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ• ์ˆ˜๋ก ํด๋ž˜์Šค์˜ ์‘์ง‘๋„๊ฐ€ ๋†’๋‹ค.
  • ๋ชจ๋“  ์ „์—ญiv๋ฅผ ๋ฉ”์„œ๋“œ๋งˆ๋‹ค ์‚ฌ์šฉํ•˜๋Š” ํด๋ž˜์Šค๋Š” ์‘์ง‘๋„๊ฐ€ ๊ฐ€์žฅ ๋†’๋‹ค.
    → ํ•˜์ง€๋งŒ ์ด๋Š” ๊ฐ€๋Šฅํ•˜์ง€๋„ ๋ฐ”๋žŒ์ง ํ•˜์ง€๋„ ์•Š๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ์ด๋ฅผ ์ง€ํ–ฅํ•œ๋‹ค.
๋ณ€์ˆ˜ ์ฐธ์กฐ ์„ค๋ช…๊ธ€

2023.01.08 - [โ˜• ์ž๋ฐ” JAVA/โ˜• ๋ณ€์ˆ˜์™€ ์ž๋ฃŒํ˜• Variables & Data Type] - [JAVA]์„ ์–ธ์œ„์น˜์™€ static์œ ๋ฌด๋กœ ๊ตฌ๋ถ„ํ•œ ๋ณ€์ˆ˜์ข…๋ฅ˜

์ฑ…์—์„œ ๋งํ•˜๋Š” ๋ฉ”์„œ๋“œ๋งˆ๋‹ค ์‚ฌ์šฉํ•˜๋Š” ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋Š”
non-static์ด์ž global variable(์ „์—ญ ๋ณ€์ˆ˜)๋ฅผ ๋งํ•œ๋‹ค.
  • 'ํ•จ์ˆ˜๋ฅผ ์ž‘๊ฒŒ, ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ชฉ๋ก์„ ์งง๊ฒŒ'๋ผ๋Š” ์ „๋žต์„ ๋”ฐ๋ฅด๋‹ค ๋ณด๋ฉด
    ๋ช‡๋ช‡ ๋ฉ”์„œ๋“œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ์ „์—ญiv๊ฐ€ ๋งŽ์•„์ง„๋‹ค.
    → ์ด๋Š” ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ชผ๊ฐœ์•ผ ํ•œ๋‹ค๋Š” ์‹ ํ˜ธ๋‹ค.

์‘์ง‘๋„๋ฅผ ์œ ์ง€ํ•˜๋ฉด ์ž‘์€ ํด๋ž˜์Šค ์—ฌ๋Ÿฟ์ด ๋‚˜์˜จ๋‹ค.
  • ํฐ ํ•จ์ˆ˜๋ฅผ ์ž‘์€ ํ•จ์ˆ˜ ์—ฌ๋Ÿฟ์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ๋งŒ ํ•ด๋„ ํด๋ž˜์Šค ์ˆ˜๊ฐ€ ๋งŽ์•„์ง„๋‹ค.

ํ•จ์ˆ˜๋ฅผ ๋‘˜๋กœ ๋‚˜๋ˆ„๊ณ  ์‹ถ์€๋ฐ lv๋ฅผ ์—ฌ๋Ÿฟ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด
ํ•จ์ˆ˜๋ฅผ ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค๊ณ  ์ „์—ญ๋ณ€์ˆ˜์™€ ์—ฌ๋Ÿฌ ๋ฉ”์„œ๋“œ๋กœ ์‚ฌ์šฉํ•ด๋ผ.

์ด๋ ‡๊ฒŒ ๋งŒ๋“ค๋‹ค๋ณด๋ฉด ์ „์ฒด์ ์ธ ์ฝ”๋“œ ์ˆ˜๋Š” ๊ธธ์–ด์ง„ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ
์ด๋Š ์ข€ ๋” ์„œ์ˆ ์ ์ธ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉฐ ๊ฐ€๋…์„ฑ์ด ๋†’์•„์ง„๋‹ค.

๋ณ€๊ฒฝํ•˜๊ธฐ ์‰ฌ์šด ํด๋ž˜์Šค

์ผ๋ฐ˜์ ์œผ๋กœ ํ•œ ํด๋ž˜์Šค์— select/update๋ฌธ ๋“ฑ์„ ๋ชฐ์•„๋„ฃ๋Š”๋‹ค

SQL์€ ๊ตฌ์กฐ์ ์ธ ๊ด€์ ์—์„œ SRP๋ฅผ ์œ„๋ฐ˜ํ•œ๋‹ค.
class์™€ sql file์ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
→ sql์„ ์ˆ˜์ •ํ•˜๋ฉด classํŒŒ์ผ๋„ ์ˆ˜์ •ํ•ด์•ผ๋งŒ ํ•œ๋‹ค.
→ ๋งŒ์•ฝ update๋ฌธ์„ ์ˆ˜์ •ํ–ˆ๋Š”๋ฐ ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธด๋‹ค๋ฉด select๋ฌธ๋„ ๊ฐ™์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

์ด๋ฅผ ์ตœ๋Œ€ํ•œ ํด๋ฆฐํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๋ ค๋ฉด
ํŒŒ์ƒ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค.

์ด๋Ÿฐ ์‹์œผ๋กœ ํŒŒ์ƒ ํด๋ž˜์Šค ์—ฌ๋Ÿฟ์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด update๋ฌธ์„ ์ถ”๊ฐ€ํ•  ๋•Œ
UpdateSql extends Sql ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค.
๋‹ค๋ฅธ create/insert/select ๋ฌธ์— ์˜ค๋ฅ˜๊ฐ€ ์˜ํ–ฅ์„ ๋ฏธ์น˜ ์•Š๊ฒŒ ๋œ๋‹ค.

ํ™•์žฅ์— ๊ฐœ๋ฐœ์ ์ด๊ณ  ์ˆ˜์ •์— ํ์‡„์ ์ด์–ด์•ผ ํ•œ๋‹ค๋Š”OCP Open-Closed Principle ๋ฐฉ์‹์ด๋‹ค.

๋ณ€๊ฒฝ์œผ๋กœ๋ถ€ํ„ฐ ๊ฒฉ๋ฆฌ
  • ์š”๊ตฌ์‚ฌํ•ญ์€ ๋ณ€ํ•˜๊ธฐ ๋งˆ๋ จ์ด๋‹ค.
    → ๋”ฐ๋ผ์„œ ์ฝ”๋“œ๋„ ๋ณ€ํ•˜๊ธฐ ๋งˆ๋ จ์ด๋‹ค.
  • ์ƒ์„ธํ•œ ๊ตฌํ˜„(ํด๋ž˜์Šค์™€ ๋ฉ”์†Œ๋“œ๊ฐ€ ํฐ ๊ฒฝ์šฐ)์— ์˜์กดํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ตฌํ˜„์ด ๋ฐ”๋€Œ๋ฉด ์œ„ํ—˜์— ์ฒ˜ํ•œ๋‹ค.

  • class Portfolio์—์„œ TockyoStockExchange API๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ
    ํด๋ž˜์Šค์—์„œ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋Š” ๋Œ€์‹ 
  • interface StockExchange์—์„œ API๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์‹œ์Šคํ…œ์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ˜๋‹ค.
  • ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋Š” class PortfolioTest๋ฅผ ๋งŒ๋“ค์–ด ํ…Œ์ŠคํŠธํ•˜๊ธฐ๋„ ์ข‹๋‹ค.
  • ์ด๋ ‡๊ฒŒ ๊ฒฐํ•ฉ๋„๋ฅผ ์ค„์ด๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋˜ ๋‹ค๋ฅธ ํด๋ž˜์Šค ์„ค๊ณ„์›์น™์ธ DIP Dependency Inversion Principle ์˜์กด์—ญ์ „์›์น™์„ ๋”ฐ๋ฅด๋Š” ํด๋ž˜์Šค๊ฐ€ ๋‚˜์˜จ๋‹ค.
  • ์ด์™€ ๊ฐ™์€ ์ถ”์ƒํ™”๋Š” ์‹ค์ œ๋กœ ์ฃผ๊ฐ€๋ฅผ ์–ป์–ด์˜ค๋Š” ์ถœ์ฒ˜๋‚˜ ๋ฐฉ์‹์„ ๋ชจ๋‘ ์ˆจ๊ธด๋‹ค.

 

๋ฐ˜์‘ํ˜•

'๐Ÿ“œ CleanCode' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[CleanCode]์‹œ์Šคํ…œ 2  (2) 2024.10.10
[CleanCode]์‹œ์Šคํ…œ 1  (0) 2024.10.10
[CleanCode]ํด๋ž˜์Šค 1  (0) 2024.10.08
[CleanCode]๋‹จ์œ„ ํ…Œ์ŠคํŠธ  (2) 2024.10.03
[CleanCode]๊ฒฝ๊ณ„ 2  (1) 2024.10.01