๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿคท๐Ÿผ‍โ™€๏ธ Etc.../- ๊ธฐํƒ€

[๊ฐœ๋ฐœ์ž ์ฑ…์ฝ๊ธฐ] ํด๋ฆฐ ์ฝ”๋“œ-์• ์ž์ผ ์†Œํ”„ํŠธ์›จ์–ด ์žฅ์ธ ์ •์‹  (7์žฅ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ)

by Wonit 2022. 2. 22.

ํ•ด๋‹น ๊ธ€์€ Robert C.Martin ํด๋ฆฐ ์ฝ”๋“œ ๋ผ๋Š” ์ฑ…์„ ์ฝ๊ณ  ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌ ๋ฐ ํšŒ๊ณ ํ•˜๋Š” ๊ธ€ ์ž…๋‹ˆ๋‹ค. ์ž์„ธํ•œ ์‚ฌํ•ญ์€ YES 24 ํด๋ฆฐ ์ฝ”๋“œ - ์• ์ž์ผ ์†Œํ”„ํŠธ์›จ์–ด ์žฅ์ธ ์ •์‹  ์—์„œ ํ™•์ธํ•ด์ฃผ์„ธ์š”.

ํด๋ฆฐ ์ฝ”๋“œ - ์• ์ž์ผ ์†Œํ”„ํŠธ์›จ์–ด ์žฅ์ธ ์ •์‹  (Uncle Bob)

  • ์œ„ํ‚ค๋ถ์Šค
  • ์ง€์€์ด: Robert C.Martin (Uncle Bob)
  • ์˜ฎ๊ธด์ด: ๋ฐ•์žฌํ˜ธ, ์ดํ•ด์˜


 

์ด๋ฒˆ ์žฅ์—์„œ ์ด์•ผ๊ธฐํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒƒ

 

์ด๋ฒˆ ์žฅ์—์„œ๋Š” ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ (Exception Handling) ์— ๋Œ€ํ•ด์„œ ๋งํ•œ๋‹ค.

 

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์˜ค๋ฅ˜๋ฅผ ์ •์˜ํ•  ๋•Œ ํ”„๋กœ๊ทธ๋ž˜๋ฉ”์—๊ฒŒ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ด€์‹ฌ์‚ฌ๋Š” ์˜ค๋ฅ˜๋ฅผ ์žก์•„๋‚ด๋Š” ๋ฐฉ๋ฒ•์ด ๋˜์–ด์•ผ ํ•œ๋‹ค

 

  • ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ณด๋‹จ ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ
    • ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์€ ํ•œ ๋ฒˆ์— ํ•œ ๊ฐ€์ง€๋ฅผ ํ•˜์ง€ ์•Š์„ ํ™•๋ฅ ์ด ๋†’๋‹ค.
    • ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ณด๋‹จ ์˜ˆ์™ธ๋ฅผ ํ†ตํ•ด์„œ ํ•œ ๋ฒˆ์— ํ•œ ๊ฐ€์ง€๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์ž
  • Unckecked Exception ์„ ์‚ฌ์šฉํ•˜๋ผ
    • Checked Exception ์€ Compile ์‹œ์ ์— ์ฒ˜๋ฆฌํ•  ์˜ˆ์™ธ๋ฅผ handling ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.
    • ํ•˜์ง€๋งŒ Checked Exception ์€ OCP ๋ฅผ ์œ„๋ฐ˜ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค.
      • ๋ฉ”์„œ๋“œ์—์„œ Checked Exception ์„ throw ํ•œ๋‹ค๋ฉด ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ์—์„œ๋Š” ๋ชจ๋‘ Checked Exception ์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ OCP๋ฅผ ์œ„๋ฐ˜ํ•œ๋‹ค
    • C#, C++ ์€ Checked Exception ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์˜ˆ์™ธ์— ์˜๋ฏธ๋ฅผ ์ œ๊ณตํ•˜๋ผ
    • ์˜ˆ์™ธ๋ฅผ ๋˜์งˆ ๋•Œ์—๋Š” ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์— ์ •๋ณด๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜์ž
    • catch ์—์„œ ์˜ค๋ฅ˜๋ฅผ ๊ธฐ๋กํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ผ
  • ์™ธ๋ถ€ API ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” Wrapper ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ
    • ์™ธ๋ถ€ API ๋ฅผ ์ด์šฉํ•  ๋•Œ๋Š” ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์‹œ์Šคํ…œ ์‚ฌ์ด์˜ ์˜์กด์„ฑ์„ ์ค„์ด๊ธฐ ์œ„ํ•ด Wrapper ๋ฅผ ์ •์˜ํ•˜๊ณ  Wrapper ์—์„œ ๊ทธ์™€ ๊ด€๋ จ๋œ ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ผ
    • ์ด๋ ‡๊ฒŒ ๋œ๋‹ค๋ฉด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋„ ์ข‹์€ ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค
  • Null ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ
    • Null ์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ๋ง์•„๋ผ
      • Null ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค๋Š” ๊ฒƒ์€ Caller ์—๊ฒŒ ๋ฌธ์ œ๋ฅผ ๋– ๋„˜๊ธฐ๋Š” ๊ฒƒ์ด๋‹ค.
    • Null ์„ ์ „๋‹ฌํ•˜์ง€ ๋ง์•„๋ผ
      • ์–ด๋– ํ•œ ํ˜‘๋ ฅ์—์„œ Null ์„ ์ „๋‹ฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ทœ์น™์ด ์—†๋‹ค๋ฉด ์•ˆ์‹ฌํ•˜๊ณ  ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.
        • ๋งค๋ฒˆ Null Check ๋ฅผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์—
      • ๊ทธ๋ ‡๋‹ค๋ฉด ํ˜‘๋ ฅ์˜ ๋ฉ”์‹œ์ง€๋Š” ์ ˆ๋Œ€๋กœ Null ์ด ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ •์ฑ…์„ ๋‚ด๋ถ€์ ์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ๊ณ ๋ฏผํ•ด์•ผ ํ•  ๋Œ€์ƒ์ด ์ ์–ด์ง€๊ฒŒ ๋œ๋‹ค.

 

๊นจ๋—ํ•œ ์ฝ”๋“œ๋Š” ์ฝ๊ธฐ๋„ ์ข‹์•„์•ผ ํ•˜์ง€๋งŒ ์•ˆ์ •์„ฑ๋„ ๋†’์•„์•ผ ํ•œ๋‹ค. ์ด ๋‘˜์€ ์ƒ์ถฉํ•˜๋Š” ๋ชฉํ‘œ๊ฐ€ ์•„๋‹ˆ๋‹ค.

 

๋‚˜์˜ ํ•ด์„๊ณผ ํšŒ๊ณ 

 

์ด๋ฒˆ ์ฑ•ํ„ฐ์—์„œ ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์› ๋˜ ๋ถ€๋ถ„์€ ๋ฐ”๋กœ Checked Exception ๊ณผ Unckecked Exception ์ด ์•„๋‹๊นŒ ์‹ถ๋‹ค.

 

Checked Exception ๊ณผ Unckecked Exception ๋Š” ์ฒ˜์Œ ์ž๋ฐ”๋ฅผ ๋ฐฐ์› ์„ ๋•Œ ๋‹ค๋ค˜๋˜ ๋‚ด์šฉ์ด๊ณ  ๊ฐ๊ฐ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€ ์ดํ•ด๋งŒ ํ•˜๊ณ  ๋„˜์–ด๊ฐ”๋˜๊ฒƒ ๊ฐ™๋‹ค.

 

Checked Exception ์€ Compile ์‹œ์ ์— Exception Handling ์„ ๊ฐ•์ œํ™” ํ•œ๋‹ค. ๊ทธ์— ๋ฐ˜ํ•ด UnChecked Exception ์€ Runtime ์‹œ์ ์— ๋ฐœ์ƒํ•˜๋ฏ€๋กœ Exception ์„ ์ ์ ˆํžˆ handling ํ•ด์•ผ ํ•œ๋‹ค.

 

์ •๋„๋งŒ ์•Œ๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ์ด๋“ค ์‚ฌ์ด์— ์—ฌ๋Ÿฌ ๋…ผ์Ÿ์ด ์žˆ์—ˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์ด๋ฒˆ ์ฑ•ํ„ฐ์—์„œ ์ฒ˜์Œ ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค.

 

์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ Checked Exception ์ด OCP ์— ์œ„๋ฐฐ๋œ๋‹ค๋Š” ์ƒˆ๋กœ์šด ์‚ฌ์‹ค์— ํฅ๋ฏธ๋กœ์› ๊ณ  ๋•๋ถ„์— ํ•œ๋ฒˆ ๋” OCP ์— ๋Œ€ํ•ด์„œ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

ํ˜„์žฌ๋„ ๊ฐœ๋ฐœ์„ ํ•˜๋ฉด์„œ Exception Handling ์€ ๋‚˜์—๊ฒŒ ๋งŽ์ด ๋ถ€์กฑํ•œ ๋Šฅ๋ ฅ์ธ๊ฒƒ ๊ฐ™๋‹ค.

 

  1. Runtime Exception ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์ด๋ผ๋Š” ๊ฒƒ์„ ์ธ์ง€ํ•˜์ง€ ๋ชปํ•จ
  2. Exception ์ด ๋ฐœ์ƒํ•  ์—ฌ์ง€๊ฐ€ ์žˆ๋Š” ์ƒํ™ฉ์—์„œ Exception Handling ์„ ์–ด๋””์„œ ๋‹ค๋ค„์•ผํ• ์ง€ ๋ชจ๋ฆ„

๋Œ“๊ธ€