๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์ฑ…/CleanCode

โœจ Clean Code 7์žฅ: ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ

๐Ÿ—ฃ ์„œ๋ก 

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

๐Ÿ“Œ ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ณด๋‹ค ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ

  • ์˜ค๋ฅ˜ ํ”Œ๋ž˜๊ทธ๋‚˜ ํ˜ธ์ถœ์ž์—๊ฒŒ ์˜ค๋ฅ˜ ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋…ผ๋ฆฌ์™€ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๊ฐ€ ๋’ค์„ž์—ฌ ๊น”๋”ํ•˜์ง€ ๋ชปํ•˜๋‹ค.
  • ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์˜ค๋ฅ˜๋ฅผ ๋˜์ง€๋Š” ํŽธ์ด ํ›จ์”ฌ ์ข‹๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ํ˜ธ์ถœ์ž ์ฝ”๋“œ๊ฐ€ ๋” ๊น”๋”ํ•ด์ง„๋‹ค.

๐Ÿ“Œ Try-Catch-Finally ๋ฌธ๋ถ€ํ„ฐ ์ž‘์„ฑํ•˜๋ผ

try ๋ธ”๋ก์€ ํŠธ๋žœ์žญ์…˜๊ณผ ๋น„์Šทํ•˜๋‹ค. try์—์„œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด catch ๋ธ”๋ก์—์„œ ํ”„๋กœ๊ทธ๋žจ ์ƒํƒœ๋ฅผ ์ผ๊ด€์„ฑ ์žˆ๊ฒŒ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋Š” try-catch-finaly ๋ฌธ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ๊ทธ๋Ÿฌ๋ฉด try ๋ธ”๋ก์—์„œ ๋ฌด์Šจ ์ผ์ด ์ƒ๊ธฐ๋“ ์ง€ ํ˜ธ์ถœ์ž๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ์ƒํƒœ๋ฅผ ์ •์˜ํ•˜๊ธฐ๊ฐ€ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ฐ•์ œ๋กœ ์˜ˆ์™ธ๋ฅผ ์ผ์œผํ‚ค๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•˜๊ณ , ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ถŒ์žฅํ•œ๋‹ค. ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ try ๋ธ”๋ก์˜ ํŠธ๋žœ์žญ์…˜ ๋ฒ”์œ„๋ถ€ํ„ฐ ๊ตฌํ˜„ํ•˜๊ฒŒ ๋˜์–ด์„œ ํŠธ๋žœ์žญ์…˜ ๋ณธ์งˆ์„ ์œ ์ง€ํ•˜๊ธฐ ์‰ฌ์›Œ์ง„๋‹ค.

๐Ÿ“Œ ๋ฏธํ™•์ธ ์˜ˆ์™ธ๋ฅผ ์‚ฌ์šฉํ•˜๋ผ

๋ฏธํ™•์ธ(Unchecked) ์˜ˆ์™ธ,  ํ™•์ธ๋œ(Checked) ์˜ˆ์™ธ
  • ์•ˆ์ •์ ์ธ SW๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ ํ™•์ธ๋œ ์˜ˆ์™ธ๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•˜์ง€๋Š” ์•Š๋‹ค.
  • ํ™•์ธ๋œ ์˜ˆ์™ธ๋Š” OCP๋ฅผ ์œ„๋ฐ˜ํ•œ๋‹ค. ํ•ด๋‹น ๋ฉ”์„œ๋“œ์—์„œ ์˜ˆ์™ธ๋ฅผ ๋˜์กŒ๋Š”๋ฐ catch ๋ธ”๋ก์ด ์ƒ์œ„์— ์žˆ๋‹ค๋ฉด ๊ทธ ์‚ฌ์ด ๋ฉ”์„œ๋“œ ๋ชจ๋‘ ํ•ด๋‹น ์˜ˆ์™ธ๋ฅผ ์ •์˜ํ•ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํ•˜์œ„ ๋‹จ๊ณ„์—์„œ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ์ƒ์œ„ ๋‹จ๊ณ„ ๋ชจ๋‘ ๊ณ ์ณ์•ผ ํ•œ๋‹ค. (์—ฐ์‡„์ ์ธ ์ˆ˜์ • ํ•„์š”)
  • ํ™•์ธ๋œ ์˜ˆ์™ธ๋Š” ์บก์Šํ™”๊ฐ€ ๊นจ์ง„๋‹ค. ๋ชจ๋“  ํ•จ์ˆ˜๊ฐ€ ์ตœํ•˜์œ„ ํ•จ์ˆ˜์˜ ์˜ˆ์™ธ๋ฅผ ์•Œ์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๐Ÿ“Œ ์˜ˆ์™ธ์— ์˜๋ฏธ๋ฅผ ์ œ๊ณตํ•˜๋ผ

์ „ํ›„ ์ƒํ™ฉ์„ ์ถฉ๋ถ„ํžˆ ๋ง๋ถ™์—ฌ์•ผ ํ•œ๋‹ค. (Java - ๋ชจ๋“  ์˜ˆ์™ธ์— ํ˜ธ์ถœ ์Šคํƒ ์ œ๊ณต)

์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€์— ์ถฉ๋ถ„ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์•„ ์˜ˆ์™ธ์™€ ํ•จ๊ป˜ ๋˜์ง„๋‹ค. ์ฆ‰ ์‹คํŒจํ•œ ์—ฐ์‚ฐ ์ด๋ฆ„๊ณผ ์œ ํ˜•์„ ์–ธ๊ธ‰ํ•ด์•ผ ํ•˜๋ฉฐ, ๋กœ๊น…์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ถฉ๋ถ„ํ•œ ์ •๋ณด๋ฅผ ๋‚จ๊ฒจ์ค˜์•ผ ํ•œ๋‹ค. (๋กœ๊น…์— ์ค‘์š”์„ฑ์— ๋Œ€ํ•ด ์•„๋ž˜์™€ ๊ฐ™์ด ๊ธฐ๋กํ•œ ์ ์ด ์žˆ๋‹ค)

๐Ÿ“Œ ํ˜ธ์ถœ์ž๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์˜ˆ์™ธ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๋ผ

์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋˜์งˆ ์˜ˆ์™ธ๋ฅผ ๋ชจ๋‘ ์žก์•„ ๊ฐ๊ฐ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ด๋ผ ์ƒ๊ฐํ•œ๋‹ค. ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋˜์งˆ ์˜ˆ์™ธ๋ฅผ ์žก์•„ ํ•˜๋‚˜์˜ ์˜ˆ์™ธ ํด๋ž˜์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐ์‹ธ๊ธฐ(wrapper) ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด๋ณด๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์ด ์˜์กด์„ฑ์ด ํฌ๊ฒŒ ์ค„์–ด๋“ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ…Œ์ŠคํŠธํ•˜๊ธฐ๋„ ์‰ฌ์›Œ์งˆ ์ˆ˜ ์žˆ์–ด ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค.

...

public void hello() {
    try {
		...
    } catch (FirstException e) {
    	throw new ์ƒˆ๋กœ_์ •์˜ํ•œ_์˜ˆ์™ธ_ํด๋ž˜์Šค(e);
    } catch (SecondException e) {
    	throw new ์ƒˆ๋กœ_์ •์˜ํ•œ_์˜ˆ์™ธ_ํด๋ž˜์Šค(e);
    } ...
}

๐Ÿ“Œ null์„ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ ์ „๋‹ฌํ•˜์ง€ ๋งˆ๋ผ

null์„ ํ™•์ธํ•˜๋Š” ์ฝ”๋“œ๋Š” ๊ฐ€๋…์„ฑ์„ ๋–จ์–ดํŠธ๋ฆฌ๊ณ , ๋ˆ„๋ฝ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„ NPE(NullPointException)๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ Collections.emptyList()๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•˜์ž.

๋ฉ”์„œ๋“œ์— null์„ ๋„˜๊ธฐ๋Š” ํ–‰์œ„๋Š” ์• ์ดˆ์— null์„ ๋„˜๊ธฐ์ง€ ๋ชปํ•˜๋„๋ก ๊ธˆ์ง€ํ•˜๋Š” ์ •์ฑ…์ด ํ•ฉ๋ฆฌ์ ์ด๋‹ค. ์ด๋Ÿฌ๋ฉด ๋ถ€์ฃผ์˜ํ•œ ์‹ค์ˆ˜๋ฅผ ์ €์ง€๋ฅผ ํ™•๋ฅ ์ด ์™„์ „ํžˆ ์—†์–ด์ง€๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ํ™•๋ฅ ์ด ๋งค์šฐ ๋‚ฎ์•„์งˆ ์ˆ˜ ์žˆ๋‹ค.