CS/๋””์ž์ธ ํŒจํ„ด

[๋””์ž์ธ ํŒจํ„ด] SOLID ์›์น™

1eehyunji 2023. 8. 1. 14:19

 S

Single Resposibility Principal(๋‹จ์ผ ์ฑ…์ž„์˜ ์›์น™) : ์–ด๋–ค ํด๋ž˜์Šค ํ•œ ๊ฐœ๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ง„๋‹ค. 

์˜ˆ๋ฅผ ๋“ค์–ด, 

Class ADD {

  // ๋”ํ•˜๊ธฐ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•  ์ฑ…์ž„๋งŒ ๊ฐ€์ ธ์•ผ ํ•จ

  // ๋นผ๊ธฐ, ๋”ํ•˜๊ธฐ ๋“ฑ๋“ฑ ๋ถ€๊ฐ€์ ์œผ๋กœ ์ œ๊ณตํ•˜๋ฉด SRP๋ฅผ ์œ„๋ฐ˜ํ•จ 

}

O

Open Close Principal(๊ฐœ๋ฐฉ ํ์‡„์˜ ์›์น™) : ๊ฐœ๋ฐฉ์—๋Š” open๋˜์–ด ์žˆ๊ณ , ์ˆ˜์ •์—๋Š” close๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, 

A.class๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์„œ๋น„์Šค๋„ ํ•˜๊ณ  ์žˆ์Œ.

์ด๋Ÿฌํ•œ ์ƒํ™ฉ์—์„œ A.class๋ฅผ ๊ธฐ๋Šฅ ๋ณด์™„์„ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ A.class๋ฅผ ๊ณ ์น˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ƒˆ ํด๋ž˜์Šค์—์„œ ๊ธฐ๋Šฅ ๋ณด์™„์„ ํ•ด์•ผ ํ•œ๋‹ค. 

์ฆ‰, ๊ธฐ์กด์— ์žˆ๋Š” ํด๋ž˜์Šค๋ฅผ ์†๋Œ€์ง€ ์•Š๊ณ (์ˆ˜์ •์—๋Š” close), ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ณด์™„ํ•ด์•ผ ํ•จ.(์ƒˆ๋กœ์šด ํด๋ž˜์Šค ์ƒ์„ฑ์—๋Š” open)

L

Liscov Subtitution Principal(๋ฆฌ์Šค์ฝ”๋ธŒ ์น˜ํ™˜ ๋ฒ•์น™) : ๋ถ€๋ชจ ๊ฐ์ฒด์™€ ์ž์‹ ๊ฐ์ฒด๊ฐ€ ์žˆ์„ ๋•Œ, ๋ถ€๋ชจ ๊ฐ์ฒด๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋™์ž‘์—์„œ ์ž์‹ ๊ฐ์ฒด๊ฐ€ ๋ถ€๋ชจ ๊ฐ์ฒด๋ฅผ ์™„์ „ํžˆ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, A ๊ฐ์ฒด๊ฐ€ B ๊ฐ์ฒด์˜ ์ž์‹ ํด๋ž˜์Šค์ผ ๋•Œ, A ํด๋ž˜์Šค์™€ B ํด๋ž˜์Šค๋ฅผ ๋ฐ”๊ฟ”๋„ ๋ฌธ์ œ๊ฐ€ ์—†์–ด์•ผ ํ•œ๋‹ค.

I

Interface Sergregation Pricipal(์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ๋ฒ•์น™) : ํ•˜๋‚˜์˜ ๊ด‘๋ฒ”์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ณด๋‹ค ๊ตฌ์ฒด์ ์ธ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ๊ฐ์ฒด๋Š” ์ž์‹ ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ์—๋งŒ ์˜์กดํ•ด์•ผ ํ•œ๋‹ค. 

์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ง€๋‚˜์น˜๊ฒŒ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ๊ตฌํ˜„ํ•ด์„œ๋Š” ์•ˆ๋˜๋ฉฐ, ๊ทธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž˜๊ฒŒ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, 

์œ„ ๊ทธ๋ฆผ์—์„œ User1, User2, User3 ๊ฐ์ฒด ๋ชจ๋‘ OPS๋ฅผ ์ƒ์†๋ฐ›๊ณ  ์žˆ๋‹ค. ์ด ์ƒํ™ฉ์—์„œ User1 ๊ฐ์ฒด๋Š” op1 ๋ฉ”์„œ๋“œ๋งŒ์„, User2 ๊ฐ์ฒด๋Š” op2 ๋ฉ”์„œ๋“œ๋งŒ์„, User3 ๊ฐ์ฒด๋Š” op3 ๋ฉ”์„œ๋“œ๋งŒ์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค. User1 ๊ฐ์ฒด๋Š” OPS๋ฅผ ์ƒ์†๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— op1, op2, op3 ๋ฉ”์„œ๋“œ ๋ชจ๋‘๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, op2 ๋ฉ”์„œ๋“œ์— ๋ณ€๋™์ด ์žˆ์„ ๊ฒฝ์šฐ, User1์€ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋„ ์•Š๋Š”๋ฐ ์žฌ์ปดํŒŒ์ผ๋˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์ณ์•ผ ํ•œ๋‹ค. 

์ด๋Š” ์ƒ์†๋ฐ›์€ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ง€๋‚˜์น˜๊ฒŒ ๊ด‘๋ฒ”์œ„ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค. 

์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด OPS๋ฅผ ์ƒ์†๋ฐ›๋Š” U1Ops, U2Ops, U3Ops๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐ๊ฐ์˜ ๊ฐ์ฒด๊ฐ€ ์ƒ์†๋ฐ›๋„๋ก ํ•˜๋ฉด, ๊ฐ ๊ฐ์ฒด๋Š” ์ž์‹ ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ๋งŒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๊ฐ€ ๋œ๋‹ค. 

D

Dependency Inversion Principal(์˜์กด์„ฑ ์—ญ์ „ ์›์น™) : ๊ฐ์ฒด๋Š” ๊ตฌ์ฒด์ ์ธ ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ, ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค, ์ถ”์ƒํด๋ž˜์Šค์™€ ๊ฐ™์€ ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์ด ๋ฉ”์ธ ํด๋ž˜์Šค, ๊ฐ์ฒด์™€ ๊ฐ™์€ ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค. 

์‚ฌ์‹ค ๊ณ ์ˆ˜์ค€ ํด๋ž˜์Šค๊ฐ€ ์ €์ˆ˜์ค€ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๊ณ ์ˆ˜์ค€ ํด๋ž˜์Šค๊ฐ€ ์ €์ˆ˜์ค€ ํด๋ž˜์Šค์— ์˜์กดํ•˜๋Š” ๊ฒƒ์ด ์ž์—ฐ์Šค๋Ÿฌ์›Œ ๋ณด์ผ ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ €์ˆ˜์ค€ ํด๋ž˜์Šค๋Š” ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ณ€๊ฒฝ๋˜๊ณ , ์ƒˆ๋กœ์šด ๊ฒƒ์ด ์ถ”๊ฐ€๋  ๋•Œ๋งˆ๋‹ค ๊ณ ์ˆ˜์ค€ ํด๋ž˜์Šค๊ฐ€ ์˜ํ–ฅ์„ ๋ฐ›๊ธฐ ์‰ฌ์šฐ๋ฏ€๋กœ ์˜์กด๊ด€๊ณ„๋ฅผ ์—ญ์ „์‹œ์ผœ์•ผ ํ•œ๋‹ค.

 

 

 

 

์ด๋Ÿฌํ•œ ์›์น™๋“ค์€ ์ง€ํ‚ค๋ฉด ์ข‹๊ฒ ๋‹ค๋ผ๋Š” ๊ฒƒ์ด์ง€, ๋ฌด์กฐ๊ฑด ์ง€์ผœ์•ผ๋งŒ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ์ง€ํ‚ค์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•ด์„œ ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๋Š” ๋“ฑ์˜ ๋ฌธ์ œ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š์ง€๋งŒ ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด๋Ÿฌํ•œ ์›์น™์„ ์ง€ํ‚ค๋ฉด์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๊ฒ ๋‹ค๋Š” ๋งˆ์Œ๊ฐ€์ง์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.