SOLID

DOYOUNG KIMยท2023๋…„ 12์›” 5์ผ
0

Springํ”„๋ ˆ์ž„์›Œํฌ

๋ชฉ๋ก ๋ณด๊ธฐ
8/18

๐Ÿ’ป ์Šคํ”„๋ง ํ•ต์‹ฌ ๊ธฐ์ˆ  - ๊ธฐ์ดˆ
ํ•ด๋‹น ๊ฐ•์˜๋Š” ๊น€์˜ํ•œ๋‹˜์˜ ์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ- ๊ธฐ์ดˆ ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ•˜์—ฌ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์€ ๊ฐ„๋žตํ•˜๊ฒŒ ๊ธฐ๋กํ•˜๋Š” ๊ธฐ๋ก์žฅ
์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ ๊ธฐ์ดˆ ๊ฐ•์˜

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

SOLID

์ข‹์€ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์˜ 5๊ฐ€์ง€ ์›์น™ ์ด๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค.

5๊ฐ€์ง€๋Š” ๊ฐ๊ฐ
SRP : ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ (single responsibility principle)
OCP : ๊ฐœ๋ฐฉ-ํ์‡  ์›์น™ (Open/closed principle)
LSP : ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™ (Liskov substitution principle)
ISP : ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™ (Interface segregation principle)
DIP : ์˜์กด๊ด€๊ณ„ ์—ญ์ „ ์›์น™ (Dependency inversion principle)

์ด์ œ ๊ฐ๊ฐ ํ•˜๋‚˜์”ฉ ๋ฌด์Šจ ์›์น™์ธ์ง€ ์•Œ์•„๋ณด์ž

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

ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ ธ์•ผํ•œ๋‹ค.
ํ•˜๋‚˜์˜ ์ฑ…์ž„์€ ์‚ฌ์‹ค ๋ชจํ˜ธํ•˜๋‹ค.
ํฐ ๊ฒฝ์šฐ๋„ ์žˆ๊ณ  ์ž‘์€ ๊ฒฝ์šฐ๋„ ์žˆ์Œ

์ค‘์š”ํ•œ ๊ธฐ์ค€์€ ๋ฐ”๋กœ ๋ณ€๊ฒฝ
๋ณ€๊ฒฝ์ด ์žˆ์„๋•Œ ํŒŒ๊ธ‰ ํšจ๊ณผ๊ฐ€ ์ ์œผ๋ฉด ๋‹จ์ผ ์ฑ…์ž„ ์›์น™์„ ์ž˜ ๋”ฐ๋ฅธ ๊ฒƒ์ด๋‹ค.

UI ๋ณ€๊ฒฝ์‹œ ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ์‚ฌ์šฉ์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ

OCP ๊ฐœ๋ฐฉ-ํ์‡  ์›์น™

์†Œํ”„ํŠธ์›จ์–ด ์š”์†Œ๋Š” ํ™•์žฅ์—๋Š” ์—ด๋ ค์žˆ์œผ๋‚˜ ๋ณ€๊ฒฝ์—๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค
ํ™•์žฅํ•˜๋ ค๋ฉด ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๋ฐ”๊ฟ”์•ผํ•˜๋Š”๋ฐ ์ด๊ฒŒ ๋ฌด์Šจ ํ—›์†Œ๋ฆฌ๋ƒ ๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค

์ด๋Ÿฐ ๊ฒฝ์šฐ๋ฅผ ๋‹ค์‹œ ๋– ์˜ฌ๋ ค๋ณด์ž
๊ตฌํ˜„์ฒด๊ฐ€ ๋ฐ”๋€๋‹ค๊ณ  ํ•ด๋„ ์—ญํ• ์€ ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค.
์ฆ‰ ๊ตฌํ˜„์ฒด๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฒฝ์šฐ์—๋Š” ์—ด๋ ค์žˆ์œผ๋‚˜ ์—ญํ• ์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์€ ๋‹ซํ˜€์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์„œ ๊ธฐ๋Šฅ ๊ตฌํ˜„์€ ๊ฐ€๋Šฅํ•˜๋‚˜
๊ทธ ๊ตฌํ˜„์ฒด๊ฐ€ ํ•˜๋Š” ์—ญํ•  ์ž์ฒด๋Š” ๋ฐ”๋€Œ์–ด์„œ ์•ˆ๋œ๋‹ค

์ฆ‰ ๋‹คํ˜•์„ฑ ์ž์ฒด๋ฅผ ์˜๋ฏธํ•˜๋Š” ์›์น™์ด๋‹ค.

๋ฉค๋ฒ„ ์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์—ฌ๋Ÿฌ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ–ˆ์—ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ์—์„œ JDBC ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋กœ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ๋ฉค๋ฒ„ ์„œ๋น„์Šค์—์„œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผํ•˜๋Š”๋ฐ ์ด๊ฑด OCP๋ฅผ ์œ„๋ฐฐํ•œ๋‹ค.

์ด ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์œ„ํ•ด์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ๋งบ์–ด์ฃผ๋Š” ์กฐ๋ฆฝ ํ•˜๋Š” ์„ค์ •์ž๊ฐ€ ํ•„์š”
๐Ÿ’จ Spring ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์—ญํ• ์„ ์ˆ˜ํ–‰

LSP ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™

ํ”„๋กœ๊ทธ๋žจ ๊ฐ์ฒด๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์ •ํ™•์„ฑ์„ ๊นจ์ง€ ์•Š๊ณ  ํ•˜์œ„ ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ
ํ•˜์œ„ ํด๋ž˜์Šค๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๊ทœ์•ฝ์„ ์ง€์ผœ์•ผํ•œ๋‹ค๋Š” ๊ฒƒ
๋‹คํ˜•์„ฑ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ์›์น™, ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ตฌํ˜„์ฒด๋ฅผ ๋ฏฟ๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•จ

ex) ์ž๋™์ฐจ ์—‘์…€์ด ์•ž์œผ๋กœ ๊ฐ€๋Š”๊ฑฐ์ง€ ๋’ค๋กœ ๊ฐ€๋Š” ์—‘์…€์„ ๋งŒ๋“ค๋ฉด ์•ˆ๋˜๋Š” ๊ฒƒ (์ปดํŒŒ์ผ ์œ ๋ฌด์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋‹ค)

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

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

์ ๋‹นํ•œ ๋‹จ์œ„๋ฅผ ์ธํ„ฐํŽ˜์ด์Šฌ๋ฅด ์ž˜ ์ชผ๊ฐœ๋Š”๊ฒŒ ์ค‘์š”ํ•˜๋‹ค.

DIP ์˜์กด๊ด€๊ณ„ ์—ญ์ „ ์›์น™

ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผํ•˜๋ฉฐ ๊ตฌ์ฒดํ™”์— ์˜์กดํ•˜๋ฉด ์•ˆ๋œ๋‹ค.
๊ตฌํ˜„ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹ˆ๋ผ ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•ด์•ผํ•œ๋‹ค.

์ฆ‰ ๊ตฌํ˜„์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ์—ญํ• ์— ์˜์กดํ•˜๊ฒŒ ํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
์ž๋™์ฐจ ๋ผ๋Š” ์—ญํ• ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž
์—ฌ๊ธฐ์„œ ๊ตฌํ˜„์ฒด๋Š” ๊ฐ๊ฐ ๋ฒค์ธ , K3, ํ‹ฐ์ฝ”๊ฐ€ ์žˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋ฒค์ธ ๋ผ๋Š” ๊ตฌํ˜„์ฒด์— ์˜์กดํ•ด์„œ ํ•˜๊ฒŒ๋˜๋ฉด ํ‹ฐ์ฝ”์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ ์ง€๋‚˜์น˜๊ฒŒ ๋งŽ์•„ ์งˆ ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰ ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•ด์•ผ ์—ฌ๋Ÿฌ ๊ตฌํ˜„์ฒด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

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


์ž ๊ทธ๋Ÿผ ์—ฌ๊ธฐ์„œ ์˜ˆ์‹œ๋ฅผ ๋ณด๊ณ  ๋ฌธ์ œ๋ฅผ ํ™•์ธํ•˜์ž
๋ฉ”๋ชจ๋ฆฌ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ, jdbc ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฉค๋ฒ„ ์„œ๋น„์Šค๋Š” ์ธํ„ฐํŽ˜์ด์Šค์—๋„ ์˜์กดํ•˜์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ ๋ฉค๋ฒ„ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—๋„ ์˜์กดํ•˜๋Š” ์ƒํ™ฉ์ด๋‹ค.

๊ทธ๋‹ˆ๊นŒ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์•„๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ๋ฉ”๋ชจ๋ฆฌ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์•Œ๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋น„์Šค ์ฝ”๋“œ์—์„œ ๊ตฌํ˜„์ฒด๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ž„

์ด ๋ฌธ์ œ๋Š” DIP๋ฅผ ์œ„๋ฐ˜ํ•˜๋Š”๋ฐ ์ด๊ฑธ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•˜๋ƒ
๋‹ค์Œ ๊ฐ•์˜ํ•ด์„œ ํ•œ๋‹ค!!!๐Ÿ’ฅ

์ •๋ฆฌํ•˜์ž๋ฉด

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

profile
๋งค์ผ 1%์”ฉ ์„ฑ์žฅํ•˜๋Š” ๊ฐœ๋ฐœ ๊ณต๋ถ€ ๋ธ”๋กœ๊ทธ ์ž…๋‹ˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด