๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ ์•Œ์•„์•ผ ํ•  10๊ฐ€์ง€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์›์น™

๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ ์•Œ์•„์•ผ ํ•  10๊ฐ€์ง€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์›์น™

๋‚˜๋Š” SOLID ์›์น™์— ๋Œ€ํ•ด ๋“ค์–ด๋ณด์ง€ ๋ชปํ•œ ๊ฐœ๋ฐœ์ž๋“ค์„ ์ž์ฃผ ๋งŒ๋‚ฉ๋‹ˆ๋‹ค(์šฐ๋ฆฌ๋Š” ์—ฌ๊ธฐ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์ด์•ผ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค.. โ€” Transl.) ๋˜๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP) ๋˜๋Š” ๋“ค์–ด๋ณธ ์ ์ด ์žˆ์ง€๋งŒ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ด ๊ธฐ์‚ฌ์—์„œ๋Š” ๊ฐœ๋ฐœ์ž์˜ ์ผ์ƒ ์ž‘์—…์— ๋„์›€์ด ๋˜๋Š” OOP ์›์น™์˜ ์ด์ ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ์ผ๋ถ€๋Š” ์ž˜ ์•Œ๋ ค์ ธ ์žˆ๊ณ  ๋‹ค๋ฅธ ์ผ๋ถ€๋Š” ๊ทธ๋‹ค์ง€ ๋งŽ์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด ๊ธฐ์‚ฌ๋Š” ์ดˆ๋ณด์ž์™€ ์ˆ™๋ จ๋œ ํ”„๋กœ๊ทธ๋ž˜๋จธ ๋ชจ๋‘์—๊ฒŒ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•Œ๋ฆผ: ๋ชจ๋“  Habr ๋…์ž๋ฅผ ์œ„ํ•œ - Habr ํ”„๋กœ๋ชจ์…˜ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Skillbox ๊ณผ์ •์— ๋“ฑ๋กํ•  ๋•Œ 10 ๋ฃจ๋ธ” ํ• ์ธ.

Skillbox๋Š” ๋‹ค์Œ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ต์œก์šฉ ์˜จ๋ผ์ธ ๊ณผ์ • "์ž๋ฐ” ๊ฐœ๋ฐœ์ž".

DRY(๋ฐ˜๋ณตํ•˜์ง€ ๋งˆ์„ธ์š”)

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

์ฝ”๋“œ์— ๋‘ ๊ฐœ์˜ ๋ฐ˜๋ณต ์„น์…˜์ด ์žˆ๋Š” ๊ฒฝ์šฐ ํ•˜๋‚˜์˜ ๋ฉ”์„œ๋“œ๋กœ ๊ฒฐํ•ฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋“œ์ฝ”๋”ฉ๋œ ๊ฐ’์ด ๋‘ ๋ฒˆ ์ด์ƒ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ ์ด๋ฅผ ๊ณต์šฉ ์ƒ์ˆ˜๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ด๋Š” ์ฝ”๋“œ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌ๋ฅผ ๋” ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•˜๋ฉฐ, ์ด๊ฒƒ์ด OOP์˜ ์ฃผ์š” ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค. ๋™์ผํ•œ ์ฝ”๋“œ๊ฐ€ OrderId์™€ SSN ๋ชจ๋‘์— ๋Œ€ํ•œ ํ™•์ธ์„ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•˜๋ฏ€๋กœ ๊ณต์šฉ์ฒด๋ฅผ ๊ณผ๋„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ์‚ฌํ•ญ ์บก์Šํ™”

๋Œ€๋ถ€๋ถ„์˜ ํšŒ์‚ฌ์˜ ์†Œํ”„ํŠธ์›จ์–ด ์ œํ’ˆ์€ ๋Š์ž„์—†์ด ๋ฐœ์ „ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์ง€์›ํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์บก์Šํ™”๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‚ถ์„ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ธฐ์กด ์ฝ”๋“œ ๋ฒ ์ด์Šค๋ฅผ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ํ•œ ๊ฐ€์ง€ ์˜ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค..

Java๋กœ ์ž‘์„ฑํ•œ๋‹ค๋ฉด, ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐœ์ธ ๋ฉ”์†Œ๋“œ ๋ฐ ๋ณ€์ˆ˜ ํ• ๋‹น.

๊ฐœ๋ฐฉ/ํ์‡„ ์›๋ฆฌ

์ด ์›์น™์€ ๋‹ค์Œ ๋ฌธ์žฅ์„ ์ฝ์œผ๋ฉด ์‰ฝ๊ฒŒ ๊ธฐ์–ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. "์†Œํ”„ํŠธ์›จ์–ด ์—”ํ„ฐํ‹ฐ(ํด๋ž˜์Šค, ๋ชจ๋“ˆ, ๊ธฐ๋Šฅ ๋“ฑ)๋Š” ํ™•์žฅ์„ ์œ„ํ•ด ์—ด๋ ค์•ผ ํ•˜์ง€๋งŒ ์ˆ˜์ •์„ ์œ„ํ•ด ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค." ์‹ค์ œ๋กœ ์ด๋Š” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ ๋„ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์†Œ์Šค ์ฝ”๋“œ ๋ณ€๊ฒฝ์— ์ฝ”๋“œ ์ˆ˜์ •, ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋ฐ ๊ธฐํƒ€ ์ ˆ์ฐจ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ด ์›์น™์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐฉํ˜•/ํ์‡„ํ˜• ์›์น™์„ ๋”ฐ๋ฅด๋Š” ์ฝ”๋“œ๋Š” ํ™•์žฅํ•ด๋„ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ฌธ์ œ๊ฐ€ ํ›จ์”ฌ ์ ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์ด ์›์น™์„ ์œ„๋ฐ˜ํ•˜๋Š” ์ฝ”๋“œ์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ ์•Œ์•„์•ผ ํ•  10๊ฐ€์ง€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์›์น™

๊ทธ ์•ˆ์— ์žˆ๋Š” ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์›ํ•˜๋Š” ์กฐ๊ฐ๊ณผ ์—ฐ๊ฒฐ๋œ ์ฝ”๋“œ์˜ ๋ชจ๋“  ์„น์…˜์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์‹œ๊ฐ„์ด ๋งŽ์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๊ฐœ๋ฐฉ-ํ์‡„๋Š” SOLID์˜ ์›์น™ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP)

SOLID ์„ธํŠธ์˜ ๋˜ ๋‹ค๋ฅธ ์›๋ฆฌ์ž…๋‹ˆ๋‹ค. โ€œ๊ณ„๊ธ‰์— ๋ณ€ํ™”๋ฅผ ์ผ์œผํ‚ค๋Š” ์›์ธ์€ ๋‹จ ํ•˜๋‚˜๋ฟ์ด๋‹คโ€๋ผ๊ณ  ๋ช…์‹œ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์—…์—์„œ๋Š” ํ•œ ๊ฐ€์ง€ ๋ฌธ์ œ๋งŒ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฐ ๋ฐฉ๋ฒ•์€ ๊ณตํ†ต๋œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ์—๋งŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋ฉ”์„œ๋“œ์™€ ์†์„ฑ์€ ์ด ๊ธฐ๋Šฅ๋งŒ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ ์•Œ์•„์•ผ ํ•  10๊ฐ€์ง€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์›์น™

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

์ข…์†์„ฑ ๋ฐ˜์ „ ์›๋ฆฌ(DIP)

๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ ์•Œ์•„์•ผ ํ•  10๊ฐ€์ง€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์›์น™

์œ„๋Š” AppManager๊ฐ€ EventLogWriter์— ์˜์กดํ•˜๊ณ , EventLogWriter๊ฐ€ AppManager์™€ ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋˜๋Š” ์ฝ”๋“œ ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค. ํ‘ธ์‹œ, SMS, ์ด๋ฉ”์ผ ๋“ฑ ์•Œ๋ฆผ์„ ํ‘œ์‹œํ•˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ AppManager ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

DIP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ AppManager ๋Œ€์‹  ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž…๋ ฅ๋  EventLogWriter๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

DIP๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข…์†์„ฑ ๋ชจ๋“ˆ์„ ๋ณ€๊ฒฝํ•˜์—ฌ ๊ฐœ๋ณ„ ๋ชจ๋“ˆ์„ ๋‹ค๋ฅธ ๋ชจ๋“ˆ๋กœ ์‰ฝ๊ฒŒ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ๋ชจ๋“ˆ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒ์† ๋Œ€์‹  ๊ตฌ์„ฑ

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

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

Joshua Bloch์˜ Effective Java์—์„œ๋„ ์ƒ์†๋ณด๋‹ค๋Š” ๊ตฌ์„ฑ์„ ์„ ํƒํ•˜๋ผ๊ณ  ์กฐ์–ธํ•ฉ๋‹ˆ๋‹ค.

Barbara Liskov ๋Œ€์ฒด ์›๋ฆฌ(LSP)

SOLID ํˆดํ‚ท์˜ ๋˜ ๋‹ค๋ฅธ ์›์น™์ž…๋‹ˆ๋‹ค. ์ด๋Š” ํ•˜์œ„ ์œ ํ˜•์ด ์ƒ์œ„ ์œ ํ˜•์„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ฆ‰, ์Šˆํผํด๋ž˜์Šค์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” ๋ฉ”์„œ๋“œ์™€ ํ•จ์ˆ˜๋Š” ํ•˜์œ„ํด๋ž˜์Šค์—์„œ๋„ ๋ฌธ์ œ ์—†์ด ์ž‘๋™ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

LSP๋Š” ๋‹จ์ผ ์ฑ…์ž„ ์›์น™๊ณผ ๊ณต์œ  ์ฑ…์ž„ ์›์น™ ๋ชจ๋‘์™€ ์—ฐ๊ด€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋ž˜์Šค๊ฐ€ ํ•˜์œ„ ํด๋ž˜์Šค๋ณด๋‹ค ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ ํ•˜์œ„ ํด๋ž˜์Šค๋Š” ์ผ๋ถ€ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด ์›์น™์„ ์œ„๋ฐ˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ LSP์™€ ๋ชจ์ˆœ๋˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ ์•Œ์•„์•ผ ํ•  10๊ฐ€์ง€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์›์น™

Area(Rectangle r) ๋ฉ”์†Œ๋“œ๋Š” Rectangle์˜ ๋ฉด์ ์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ Square๋Š” Rectangle์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— Square๋ฅผ ์‹คํ–‰ํ•œ ํ›„ ํ”„๋กœ๊ทธ๋žจ์ด ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. LSP ์›์น™์— ๋”ฐ๋ฅด๋ฉด ๊ธฐ๋ณธ ํด๋ž˜์Šค์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜๋Š” ์ถ”๊ฐ€ ์ง€์นจ ์—†์ด ํŒŒ์ƒ ํด๋ž˜์Šค์˜ ๊ฐœ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์œ„ ์œ ํ˜•์˜ ํŠน์ • ์ •์˜์ธ ์ด ์›์น™์€ "๋ฐ์ดํ„ฐ ์ถ”์ƒํ™” ๋ฐ ๊ณ„์ธต ๊ตฌ์กฐ"๋ผ๋Š” ์ œ๋ชฉ์˜ 1987๋…„ ์ปจํผ๋Ÿฐ์Šค ๊ธฐ์กฐ์—ฐ์„ค์—์„œ Barbara Liskov๊ฐ€ ์ œ์•ˆํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›๋ฆฌ(ISP)

๋˜ ๋‹ค๋ฅธ ๊ฒฌ๊ณ ํ•œ ์›์น™. ์ด์— ๋”ฐ๋ฅด๋ฉด ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ตฌํ˜„ํ•˜๋ฉด ์•ˆ ๋œ๋‹ค. ์ด ์›์น™์„ ๋”ฐ๋ฅด๋ฉด ์šด์˜ ๋…ผ๋ฆฌ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ์‹œ์Šคํ…œ์ด ์œ ์—ฐ์„ฑ์„ ์œ ์ง€ํ•˜๊ณ  ๋ฆฌํŒฉํ† ๋ง์— ์ ํ•ฉํ•˜๊ฒŒ ์œ ์ง€๋˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์€ ์ธํ„ฐํŽ˜์ด์Šค์— ์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ์ด ๋™์‹œ์— ํฌํ•จ๋˜์–ด ์žˆ๊ณ  ํด๋ผ์ด์–ธํŠธ์— ๊ทธ ์ค‘ ํ•˜๋‚˜๋งŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ์— ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ค์šด ์ž‘์—…์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž‘์—…์ด ์™„๋ฃŒ๋œ ํ›„ ์•„๋ฌด๊ฒƒ๋„ ๊นจ์ง€์ง€ ์•Š๊ณ  ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ค์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ ์•Œ์•„์•ผ ํ•  10๊ฐ€์ง€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์›์น™

๊ตฌํ˜„์ด ์•„๋‹Œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์œ„ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

์—ฌ๊ธฐ์˜ ๋ชจ๋“  ๊ฒƒ์€ ์ด๋ฆ„์—์„œ ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค. ์ด ์›์น™์„ ์ ์šฉํ•˜๋ฉด ์ƒˆ๋กœ์šด ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์—ฐํ•œ ์ฝ”๋“œ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๋ณ€์ˆ˜, ๋ฐ˜ํ™˜ ์œ ํ˜• ๋˜๋Š” ๋ฉ”์„œ๋“œ ์ธ์ˆ˜ ์œ ํ˜•์—๋Š” ์ธํ„ฐํŽ˜์ด์Šค ์œ ํ˜•์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด SubClass ๋Œ€์‹  SuperClass๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฆ‰ :

๋ชฉ๋ก ๋ฒˆํ˜ธ= getNumbers();

๊ทธ๋ฆฌ๊ณ  ์•„๋‹™๋‹ˆ๋‹ค :

ArrayList ๋ฒˆํ˜ธ = getNumbers();

์œ„์—์„œ ๋…ผ์˜ํ•œ ๋‚ด์šฉ์˜ ์‹ค์ œ ๊ตฌํ˜„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ ์•Œ์•„์•ผ ํ•  10๊ฐ€์ง€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์›์น™

์œ„์ž„ ์›์น™

์ผ๋ฐ˜์ ์ธ ์˜ˆ๋Š” Java์˜ equals() ๋ฐ hashCode() ๋ฉ”์†Œ๋“œ์ž…๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์ฒด๋ฅผ ๋น„๊ตํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ด ์ž‘์—…์€ ํด๋ผ์ด์–ธํŠธ ํด๋ž˜์Šค ๋Œ€์‹  ํ•ด๋‹น ํด๋ž˜์Šค์— ์œ„์ž„๋ฉ๋‹ˆ๋‹ค.

์ด ์›์น™์˜ ์žฅ์ ์€ ์ฝ”๋“œ ์ค‘๋ณต์ด ์—†๊ณ  ๋™์ž‘ ๋ณ€๊ฒฝ์ด ๋น„๊ต์  ๊ฐ„๋‹จํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ ์œ„์ž„์—๋„ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ๊ฐœ๋ฐœ์ž๊ฐ€ ์•Œ์•„์•ผ ํ•  10๊ฐ€์ง€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์›์น™

์ด๋Ÿฌํ•œ ๋ชจ๋“  ์›์น™์„ ํ†ตํ•ด ๋†’์€ ์‘์ง‘๋ ฅ๊ณผ ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„๋ฅผ ํ†ตํ•ด ๋”์šฑ ์œ ์—ฐํ•˜๊ณ  ์•„๋ฆ„๋‹ต๊ณ  ์•ˆ์ •์ ์ธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ด๋ก ๋„ ์ข‹์ง€๋งŒ ๊ฐœ๋ฐœ์ž๊ฐ€ ์Šต๋“ํ•œ ์ง€์‹์„ ์‹ค์ œ๋กœ ํ™œ์šฉํ•˜๋ ค๋ฉด ์‹ค์Šต์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. OOP ์›์น™์„ ์ˆ™์ง€ํ–ˆ๋‹ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋Š” ์ผ๋ฐ˜์ ์ธ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋””์ž์ธ ํŒจํ„ด์„ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Skillbox๋Š” ๋‹ค์Œ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€