[Programming] SOLID - ๊ฐ์ฒด ์ง€ํ–ฅ 5๋Œ€ ์„ค๊ณ„ ์›์น™

๋ฐ˜์‘ํ˜•

์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” ํŠน์ • ์–ธ์–ด์— ๋Œ€ํ•œ ํ•™์Šต์ด ์•„๋‹Œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์Šคํ‚ฌ์— ๋Œ€ํ•ด ์ ์–ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

๋…์ž ์—ฌ๋Ÿฌ๋ถ„๋“ค ์ค‘ Java, C#, Python๊ณผ ๊ฐ™์€ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๊ณ  ๊ณ„์‹ ๋‹ค๋ฉด OOP(๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ)์ด๋ผ๋Š” ๋‹จ์–ด๋ฅผ ์‰ฝ๊ฒŒ ์ ‘ํ•ด๋ณด์…จ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

 

 

OOP (Object Oriented Programming)

OOP๋Š” ์šฐ๋ฆฌ ๋ง๋กœ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ๋Š” ๋œป์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ‚ค์—์„œ ๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

 

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „

 

ko.wikipedia.org

์‰ฝ๊ฒŒ ์–˜๊ธฐํ•˜์ž๋ฉด ์šฐ๋ฆฌ๊ฐ€ C ์–ธ์–ด๋กœ ์ž‘์„ฑ๋˜์—ˆ๋˜ ๋ช…๋ น ํ˜•์‹์˜ ์ ˆ์ฐจ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ๋Š” ๋‹ฌ๋ฆฌ OOP๋Š” ๊ฐ์ฒด๋ผ๋Š” ๋…๋ฆฝ๋œ ๋‹จ์œ„๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ํ˜•์„ฑ์‹œํ‚ค๋Š” ์Šคํ‚ฌ์ž…๋‹ˆ๋‹ค. 

 

์ ˆ์ฐจ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ '์ ˆ์ฐจ'๋Š” ํ•จ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, ๋ฐ˜๋ณต๋˜๋Š” ๋™์ž‘์„ ํ•จ์ˆ˜ ๋ฐ ํ”„๋กœ์‹œ์ € ํ˜•ํƒœ๋กœ ๋ชจ๋“ˆํ™”ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํ”„๋กœ์‹œ์ €๋ž€, return ๊ฐ’์ด ์—†๋Š” ์ฆ‰, void ํ•จ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ๋กœ printf๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

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

 

  • '์ƒํ’ˆ' ์ด๋ผ๋Š” ์ž๋ฃŒํ˜•์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•จ.
    (์ข…๋ฅ˜๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๋ผ๋ฉด ์†์„ฑ์ด ํ•„์š”ํ•˜์ง€๋งŒ ํ•˜๋‚˜์˜ ์ƒํ’ˆ์ด๋ผ๊ณ ๋งŒ ์ƒ๊ฐํ•ด๋‘์ž.)

  • '์ƒํ’ˆ'์— ๋Œ€ํ•œ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•จ. 
    (๋“ฑ๋ก, ์‚ญ์ œ, ์ˆ˜์ • ๋“ฑ)

 

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

 

์ฆ‰, ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ฌถ์—ฌ์žˆ์„ ์ˆ˜ ์—†๋Š” ๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋™์ž‘์ด ์ถ”์ƒ์ ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ํŒจ๋Ÿฌ๋‹ค์ž„์œผ๋กœ OOP๊ฐ€ ๋“ฑ์žฅํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

 

 

๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„

๊ทธ๋ ‡๋‹ค๋ฉด ์šฐ๋ฆฌ๊ฐ€ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ฐ›์•„ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ์ตœ๋Œ€ํ•œ ์žฅ์ ์„ ์ด๋Œ์–ด๋‚ด๊ธฐ ์œ„ํ•ด ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„๊นŒ์š”?

 

  1. ๋จผ์ € ์š”๊ตฌ์‚ฌํ•ญ(์ œ๊ณตํ•ด์•ผ ํ•  ๊ธฐ๋Šฅ)์„ ์„ธ๋ถ„ํ™” ํ•ฉ๋‹ˆ๋‹ค.

    ๊ธฐํš์ž๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ตœ๋Œ€ํ•œ ์ž์„ธํ•˜๊ฒŒ ์ •์˜ ๋ฐ›๊ณ  ์ด๋ฅผ ์„ธ๋ถ„ํ™” ํ•˜์—ฌ ์ •๋ฆฌํ•ด๋†“์Šต๋‹ˆ๋‹ค. 

  2. 1๋ฒˆ์—์„œ ์„ธ๋ถ„ํ™”ํ•œ ๋‚ด์šฉ์„ Class Diagram ๋“ฑ์œผ๋กœ ๊ตฌํ˜„ํ•ด ๋†“์Šต๋‹ˆ๋‹ค.

    Class Diagram์€ ์šฐ๋ฆฌ๊ฐ€ ์š”๊ตฌ์‚ฌํ•ญ์„ ๊ฐ์ฒด๋กœ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์„ค๊ณ„๋„์ž…๋‹ˆ๋‹ค.

  3. ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

    Class Diagram์— ๋“ค์–ด๊ฐˆ ํ•„๋“œ ๋“ฑ์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํšŒ์˜์— ๋”ฐ๋ผ ์ž์œ ๋กญ๊ฒŒ ์ถ”๊ฐ€/์‚ญ์ œํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  4. 3๋ฒˆ์—์„œ ์„ค๊ณ„ํ•œ ๊ฐ์ฒด๋“ค์˜ ํ–‰๋™(ํ•จ์ˆ˜)์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค๋ฉด, ์ƒํ’ˆ ์žฌ๊ณ  ๊ด€๋ฆฌ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋Š” ์ƒํ’ˆ ์ถ”๊ฐ€, ์ œ๊ฑฐ, ์ˆ˜์ • ๋“ฑ์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  5. ๊ฐ์ฒด ๊ฐ„ ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

    ์ƒํ’ˆ ๊ฐ์ฒด์— ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ค๋ฅธ ๊ฐ์ฒด์—์„œ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๊ทธ ์ ‘๊ทผ์„ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ์ง€ ๊ฒฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

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

 

 

 

SOLID

SOLID๋Š” ์ด๋Ÿฌํ•œ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ ์›์น™์„ ๋กœ๋ฒ„ํŠธ ๋งˆํ‹ด์ด 5๊ฐ€์ง€๋กœ ์ •์˜ํ•œ ์›์น™์˜ ์•ŒํŒŒ๋ฒณ์„ ๋”ด ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

ํ•ด๋‹น ์›์น™์˜ ๊ฐ€์žฅ ํฐ ๋ชฉ์ ์€ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋„ ์œ ์ง€ ๋ณด์ˆ˜์™€ ํ™•์žฅ์ด ์‰ฌ์šด ์‹œ์Šคํ…œ ์„ค๊ณ„๋ฅผ ํ•˜๊ธฐ ์œ„ํ•จ์ธ๋ฐ, ์–ด๋– ํ•œ ๊ฒƒ์ธ์ง€ ์žˆ๋Š”์ง€ ํ•˜๋‚˜์”ฉ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

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

-> ๋ชจ๋“  ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ์„ ๋ถ€์—ฌ๋ฐ›์œผ๋ฉฐ, ๋‹จ ํ•˜๋‚˜์˜ ์ด์œ ๋งŒ์„ ๋ฐ”ํƒ•์œผ๋กœ ๋ณ€๊ฒฝ๋˜์–ด์•ผ ํ•œ๋‹ค.

 

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

 

์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ์ฑ…์ž„์ด๋ž€, ํ•œ ํด๋ž˜์Šค๊ฐ€ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ๋ณด์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

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

 

์ฝ”๋“œ๋กœ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

register ํ•จ์ˆ˜๋กœ ์ธํ•ด RegisterService ํด๋ž˜์Šค๋Š” ์ƒํ’ˆ์„ ๋“ฑ๋กํ•˜๋Š” ์ฑ…์ž„(๊ธฐ๋Šฅ) ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ƒํ’ˆ ๋“ฑ๋ก์— ํ•„์š”ํ•œ ์ƒํ’ˆ ์ด๋ฏธ์ง€๋‚˜ ์ด๋ฆ„ ๋“ฑ์„ ๊ฒ€์ฆํ•˜๋Š” ์ฑ…์ž„๋„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์ƒํ’ˆ์„ ๋“ฑ๋กํ•˜๋Š” ์ ˆ์ฐจ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด๋„ ์ˆ˜์ •ํ•ด์•ผ ๋˜๊ณ , ์ด๋ฆ„ ๊ฒ€์ฆ ๋ฐฉ๋ฒ•์ด๋‚˜ ์ด๋ฏธ์ง€ ๊ฒ€์ฆ ๋ฐฉ๋ฒ•๋„ ๋ฐ”๋€Œ๋ฉด ์ด ์—ญ์‹œ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ์ˆ˜์ •ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ž˜๋ชป ์ˆ˜์ •ํ•˜๋ฉด ๋ฉ€์ฉกํ•˜๊ฒŒ ๋™์ž‘ํ•˜๋Š” ๊ธฐ๋Šฅ๊นŒ์ง€ ๋ฌด๋ ฅํ™” ๋˜๋ฒ„๋ฆฌ๋Š” ์œ„ํ—˜์„ฑ๋„ ๋‚ด์žฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์— ์œ„๋ฐ˜๋ฉ๋‹ˆ๋‹ค.

 

๊ฐ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋Œ€ํ•œ ๊ฒ€์ฆ ์ฑ…์ž„์€ ๊ฐ ํŒŒ๋ผ๋ฏธํ„ฐ๋ณ„ ์„œ๋น„์Šค ํด๋ž˜์Šค์— ์œ„์ž„ํ•˜๊ณ  ์ƒํ’ˆ ๋“ฑ๋ก์€ ์˜ค์ง ์ƒํ’ˆ์„ ๋“ฑ๋กํ•˜๋Š” ๊ฒƒ์—๋งŒ ์ฑ…์ž„์„ ์ง€๋„๋ก ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉด ๋‹จ์ผ ์ฑ…์ž„์˜ ์›์น™์„ ์ž˜ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋‹ค๋งŒ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์ด ๋ช‡ ๊ฐ€์ง€ ์žˆ์Šต๋‹ˆ๋‹ค.

 

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

 

 

OCP (Open/Closed, ๊ฐœ๋ฐฉ ํ์‡„์˜ ์›์น™)

-> ๊ธฐ๋Šฅ์˜ ํ™•์žฅ ๊ฐ€๋Šฅ์„ฑ์€ ์—ด์–ด๋‘ ๋˜, ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ์€ ๋‹ซ์•„๋‘์ž.

 

์ฆ‰, ๊ธฐ์กด์˜ ์ฝ”๋“œ๋ฅผ ๊ฐ€๋Šฅํ•œํ•œ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•œ ๋ฒˆ ์ฏค ํ•ด๋ดค๋‹ค๋ฉด, ๊ทธ๋ฆฌ๊ณ  ์œ ์ง€๋ณด์ˆ˜๋ฅผ ํ•ด ๋ณธ ๊ฒฝํ—˜์ด ์žˆ๋‹ค๋ฉด, ๊ธฐ์กด์˜ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์žˆ์–ด์„œ ๋งค์šฐ ํฐ ๋ถ€๋‹ด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ž˜ ๋™์ž‘ํ•˜๋˜ ์ฝ”๋“œ๋ฅผ ๊ฑด๋“œ๋ ค์„œ ๊ดœํžˆ ๋ฒ„๊ทธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ์€ ์•„๋‹Œ์ง€, ๊ธฐ์กด์— ๋™์ž‘ํ•œ ์ฝ”๋“œ์˜ ์ดํ•ด๋ฅผ 100% ๋ณด์žฅํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋Š” ์ ์—์„œ ๋‚˜์˜ค๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ ๊ธฐ์กด์˜ ๊ธฐ๋Šฅ์˜ ๋ณ€๊ฒฝ์ด๋‚˜ ํ™•์žฅ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” ๊ธฐ์กด ํด๋ž˜์Šค๋ฅผ ์ƒ์†, ์ฆ‰ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋งŒ์กฑ์‹œํ‚ค๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์•ˆ์ „ํ•ฉ๋‹ˆ๋‹ค. 

 

์‹ ์„  ์ œํ’ˆ์„ ์ทจ๊ธ‰ํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์กด์˜ ์ƒํ’ˆ์—์„œ ์ œ์กฐ ์ผ์ž์™€ ์œ ํ†ต ๊ธฐํ•œ์„ ์ถ”๊ฐ€ํ•œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

์‹ ์„  ์ œํ’ˆ์ด ์•„๋‹Œ ์ œํ’ˆ๊ตฐ์—์„œ๋Š” ์œ ํ†ต ๊ธฐํ•œ๊ณผ ์ œ์กฐ ์ผ์ž๊ฐ€ ์—†์„ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ ‡๊ฒŒ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์€ ๋งค๋ฒˆ ์ถ”๊ฐ€๋˜๋Š” ์ƒํ’ˆ ์ข…๋ฅ˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•˜๊ธฐ ์œ„ํ•ด ๋งค๋ฒˆ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๋ถˆํŽธํ•จ์„ ์ดˆ๋ž˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ Open/Closed ์›์น™์„ ์ง€ํ‚ค๊ธฐ ์œ„ํ•ด OOP ํŠน์ง•์ธ ์ƒ์†์„ ์ด์šฉํ•ด์„œ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด,

 

์ด๋ ‡๊ฒŒ Product ๋ผ๋Š” ๊ณตํ†ต์˜ ์ƒํ’ˆ์„ ์ƒ์œ„ ํด๋ž˜์Šค๋กœ ๋†“๊ณ , ํ•˜์œ„ ํด๋ž˜์Šค๋“ค์ด ์ƒ์†ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋กํ•˜์—ฌ ๊ธฐ์กด์˜ ์ƒํ’ˆ ํด๋ž˜์Šค๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ์ƒˆ๋กœ์šด ์œ ํ˜•์˜ ์ƒํ’ˆ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์š”๊ตฌ ์‚ฌํ•ญ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ๋„ ์ฃผ์˜์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

  • ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ์‰ฌ์šด ๋ฌธ์ œ์—์„œ ์ด ์›์น™์„ ์ ์šฉํ•˜์ง€ ๋ง ๊ฒƒ.
  • ์ถ”์ƒ ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค๋กœ๋„ ์ด ์›์น™์„ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ์ƒํ™ฉ์— ๋งž๊ฒŒ ์ ์šฉํ•˜์ž.

 

 

LSP (Liskov Substituation, ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™)

-> ์ž์‹ ํด๋ž˜์Šค๋ฅผ ๋ถ€๋ชจ ํด๋ž˜์Šค์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

 

์ด ์›์น™์€ ์šฐ๋ฆฌ๊ฐ€ ์œ„์—์„œ ์‚ฌ์šฉํ•œ ์ƒ์†๊ณผ ๊ด€๋ จ์ด ์žˆ๋Š” ์›์น™์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ, ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ๊ธฐ๋Œ€ํ•˜๋Š” ๋™์ž‘๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•œ๋‹ค๋ฉด, ๊ฐ™์€ ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜๋”๋ผ๋„ ์ž์‹ ํด๋ž˜์Šค๋งˆ๋‹ค ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ์„ ํ•˜๋Š”๋ฐ, ์™œ ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ์•Œ์•„๋ณด์ฃ .

 

์ด ์ฝ”๋“œ๋Š” Circle-Ellipse Problem ์œ„ํ‚ค์˜ ์Šˆ๋„ ์ฝ”๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋จผ์ € ํƒ€์›์ด๋ผ๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ํƒ€์›์œผ๋กœ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐ˜์ง€๋ฆ„์ด ๋‹ค๋ฅธ ์›์ž…๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ž์‹ ํด๋ž˜์Šค์ธ ์› ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์›์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์–‘ ๋ฐ˜์ง€๋ฆ„์˜ ๊ธธ์ด๊ฐ€ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ ๋ฐ˜์ง€๋ฆ„์˜ ๊ธธ์ด๋งŒ setter ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ•œ๋‹ค๋ฉด ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

 

์œ„ main ํ•จ์ˆ˜๋ฅผ ๋ณด๋ฉด ๋ฒ„๊ทธ๋ฅผ ๋ฐœ์ƒํ•˜๋Š” ์ผ€์ด์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ๋‹ค๋ฅธ ๋ฐ˜์ง€๋ฆ„์„ 4๋กœ ์„ค์ •ํ•ด๋ฒ„๋ฆฌ๋ฉด Circle ํด๋ž˜์Šค๋Š” Circle์˜ ๋„“์ด๊ฐ€ ์•„๋‹Œ Ellipse์˜ ๋„“์ด๊ฐ€ ๊ตฌํ•ด์ง€๋Š” ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๊ฒ ์ง€๋งŒ ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด ํ’€์–ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํ–‰๋™์ด ์•„๋‹Œ ๋ชจ์Šต์ด ๋น„์Šทํ•œ ๋ถ€๋ถ„์ด๋ผ๋ฉด ์ถ”์ƒ์„ ํ†ตํ•ด์„œ ํฐ ํ‹€์„ ๋งŒ๋“ค๊ณ , ์ด๋“ค์„ ์ƒˆ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ ๋ฐฉ๋ฒ•์œผ๋กœ ๋‚˜์•„๊ฐ„๋‹ค๋ฉด ์›ํ•˜๋Š” ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋ณด๋‹ค ์ •ํ™•ํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ž˜ ๋ณด๋ฉด, ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™์„ ์ง€ํ‚ค์ง€ ์•Š์•˜์„ ๋•Œ ๊ฒฐ๊ตญ์—๋Š” ๊ฐœ๋ฐฉ ํ์‡„ ์›์น™๋„ ์ง€์ผœ์ง€์ง€ ์•Š๋Š” ํŒŒ๊ธ‰ ํšจ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ ํ™•์žฅ์„ ์œ„ํ•ด ์—ฌ๋Ÿฌ ๋ฒˆ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ์ผ์ด ์žฆ์•„์ง€๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

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

 

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

 

 

 

ISP (Interface Segregation, ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ๋ฒ•์น™)

-> ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํด๋ž˜์Šค๋Š” ํ•„์š”ํ•œ ํ•จ์ˆ˜๋งŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•˜์ž

 

์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ง๊ทธ๋Œ€๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•  ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•œ ์ปดํฌ๋„ŒํŠธ์ž…๋‹ˆ๋‹ค. ์›์น™ ๊ทธ๋Œ€๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์ตœ์†Œํ•œ์˜ ํฌ๊ธฐ๋กœ๋งŒ ๊ตฌํ˜„ํ•˜๋ฉฐ ๊ทธ๋ ‡๊ฒŒ ํ•ด์•ผ๋งŒ ํด๋ž˜์Šค๊ฐ€ ์–ด๋–ค ํด๋ž˜์Šค์ธ์ง€ ์ •ํ™•ํ•˜๊ฒŒ ๋ฌ˜์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์šฐ๋ฆฌ ์„œ๋น„์Šค๊ฐ€ ์•ž์„œ ์‚ฌ์šฉํ–ˆ๋˜ ์‹ ์„  ์ œํ’ˆ ๋ฟ์•„๋‹ˆ๋ผ ํŒจ์…˜ ์ œํ’ˆ๊นŒ์ง€ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ๋Š˜๋ฆฌ๊ธฐ ์œ„ํ•ด ์˜๋ฅ˜ ์ƒํ’ˆ์— ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ์˜๋ฅ˜ ์ƒํ’ˆ์— ์ƒ์˜, ํ•˜์˜๋งŒ์„ ๊ณ ๋ คํ•˜์—ฌ ํ—ˆ๋ฆฌ ์‚ฌ์ด์ฆˆ(waistSize)๋ฅผ ๋„ฃ์—ˆ๋Š”๋ฐ, ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ๋ชจ์ž, ์‹ ๋ฐœ ๋“ฑ์—๋Š” ํ•„์š”์—†๋Š” ํ•ญ๋ชฉ์ž…๋‹ˆ๋‹ค.

 

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

 

์œ„์™€ ๊ฐ™์ด ์˜๋ฅ˜ ์ œํ’ˆ์— ๋Œ€ํ•œ ์ตœ์†Œํ•œ์˜ ํ•„๋“œ๋ฅผ ๋†“๊ณ  ๋ฐ”์ง€, ๊ฒ‰์˜ท, ๋ชจ์ž, ์‹ ๋ฐœ ๋“ฑ ๊ฐ™์€ ๋ถ„๋ฅ˜์— ๋„ฃ์–ด ํ™•์žฅํ•˜๊ธฐ ์šฉ์ดํ•˜๋„๋ก ์„ค๊ณ„ํ•ฉ๋‹ˆ๋‹ค.

 

  • ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ตœ์†Œํ™”๋Š” ํ•˜๋‚˜์˜ ์ธํ„ฐํŽ˜์ด์Šค์— ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ์„ ๊ตฌํ˜„ํ•ด๋‘์ž. 
  • ์œ„ ์‚ฌํ•ญ์„ ์ด์šฉํ•ด class <-> interface๊ฐ€ 1:1์ด ๋œ ์„ค๊ณ„๊ฐ€ ๋˜์ง€ ์•Š๋„๋ก ํ•˜์ž.

 

 

DIP (Dependency Inversion, ์˜์กด ์—ญ์ „ ์›์น™)

-> ์ƒ์œ„ ๋ชจ๋“ˆ๊ณผ ํ•˜์œ„ ๋ชจ๋“ˆ์€ ์ถ”์ƒ์ ์ธ ์•ฝ์†์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์†Œํ†ตํ•ด์•ผ ํ•œ๋‹ค. ์ž์„ธํ•œ ๊ตฌํ˜„์€ ์ถ”์ƒ์ ์ธ ๊ฐœ๋…์— ๊ธฐ๋ฐ˜ํ•ด์•ผ ํ•œ๋‹ค.

 

๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๊ตฌ์ฒด์ ์ธ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ ์ถ”์ƒ ํด๋ž˜์Šค๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค๋Š” ์›์น™์ž…๋‹ˆ๋‹ค. 

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

 

์œ„ ์ฝ”๋“œ๋Š” ์ด๋ฉ”์ผ๊ณผ SMS๋ฅผ ๋ณด๋‚ด๊ณ  ๋‚œ ๋’ค, ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ฆผ์„ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์ฝ”๋“œ ๊ตฌํ˜„ ์ค‘ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ฆผ์„ ๋‹ด๋‹นํ•˜๋Š” Notification ํด๋ž˜์Šค๋Š” Email์„ ์ „์†กํ•˜๋Š” Email ํด๋ž˜์Šค์™€ SMS ํด๋ž˜์Šค๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ๋˜๋ฉด Email ํด๋ž˜์Šค๋‚˜ SMS ํด๋ž˜์Šค์˜ send ๋ฉ”์„œ๋“œ ์ด๋ฆ„์ด ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋ณ€๊ฒฝ๋˜๋Š” ๋“ฑ ์–ด๋Š ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋ผ๋„ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜๋ฉด Notification ํด๋ž˜์Šค๋„ ๊ฐ™์ด ๋ณ€๊ฒฝํ•ด์•ผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋Ÿฌํ•œ ๊ฐ•๊ฒฐํ•ฉ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” interface๋ฅผ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

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

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ•˜์œ„ ๋ชจ๋“ˆ์ด ์ถ”๊ฐ€๋กœ ๋” ์ƒ๊ธฐ๋”๋ผ๋„ IMessage ๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๊ทœ์•ฝ๋งŒ ์ง€์ผœ์ง€๋ฉด ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

 

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

 

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

 

 

 

๋งˆ์น˜๋ฉฐ...

SOLID ์›์น™์ด๋ผ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ค‘์š”ํ•œ ๊ฐœ๋…์„ ์ ์–ด๋ดค์Šต๋‹ˆ๋‹ค. ์ข€ ๊ธด ๋‚ด์šฉ์ด๋‹ˆ ์ •๋ฆฌํ•ด๋ณด์ž๋ฉด...

 

  • SRP์™€ ISP์˜ ํ•ต์‹ฌ์€ ๋ฌด๋ถ„๋ณ„ํ•œ ๊ฐ์ฒด์˜ ํฌ๊ธฐ๋ฅผ ๋ง‰์•„์คŒ.

    -> ํ•˜๋‚˜์˜ ํด๋ž˜์Šค ํ˜น์€ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ํ•„์š” ์ด์ƒ์˜ ์ฝ”๋“œ๋ฅผ ์ ์ง€ ์•Š๋„๋ก ํ•จ์œผ๋กœ์จ ๊ด€์ ์„ ํ๋ฆฌ์ง€ ์•Š์•„ ํ•œ ๊ธฐ๋Šฅ์˜ ๋ณ€๊ฒฝ์ด ๋‹ค๋ฅธ ๊ณณ๊นŒ์ง€ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋„๋ก ํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ์ข‹๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

  • LSP์™€ DIP๋Š” OCP๋ฅผ ์ง€์›ํ•˜๋Š” ์—ญํ• 

    -> OCP๋Š” ์ž์ฃผ ๋ณ€ํ™”ํ•˜๋Š” ๋ถ€๋ถ„์„ ์ถ”์ƒํ™”ํ•˜๊ณ , ๋‹คํ˜•์„ฑ์„ ์ด์šฉํ•˜์—ฌ ๊ธฐ๋Šฅ ํ™•์žฅ์„ ์šฉ์ดํ•˜๊ฒŒ ํ•˜๋˜, ๊ธฐ์กด ์ฝ”๋“œ์—๋Š” ๋ณด์ˆ˜์ ์ด๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. (๋ณ€ํ™”ํ•˜๋Š” ๋ถ€๋ถ„์„ ์ถ”์ƒํ™” ํ•˜๋Š” ๊ฒƒ: DIP, ๋‹คํ˜•์„ฑ ๊ตฌํ˜„์„ ๋„์™€์ฃผ๋Š” ๊ฒƒ: LSP)

 

๋˜ ํ•˜๋‚˜, ์•ž์„œ ๋ง์”€๋“œ๋ฆฌ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์„ค๊ณ„ ์›์น™์€ ์šฐ๋ฆฌ๊ฐ€ ์–ด๋–ค ํ•˜๋‚˜์˜ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด ์ •ํ•˜๋Š” ์ผ์ข…์˜ ๊ทœ์น™์ž…๋‹ˆ๋‹ค. ๊ฐ™์ด ๊ฐœ๋ฐœํ•˜๋Š” ๋™๋ฃŒ๋“ค๊ณผ ๊ณต๊ฐ๋Œ€๋ฅผ ํ˜•์„ฑํ•˜๋Š” ๊ฒƒ์ด ์šฐ์„ ์ผ ๊ฒƒ์ด๋ฉฐ, ์ด๋ฅผ ์ง€๋‚˜์น˜๋Š” ์›์น™์€ ๊ฐ•์š”๊ฐ€ ๋˜๊ณ , ์ด๋Š” ์†Œํ”„ํŠธ์›จ์–ด์˜ ์ƒ์‚ฐ์„ฑ์„ ์ €ํ•ดํ•˜๋Š” ์›์ธ์ด ๋ฉ๋‹ˆ๋‹ค.

 

 

 

๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments