[๊ฐ์ฒด์ง€ํ–ฅ] SOLID ์›์น™์ด๋ž€?

 

๐ŸŒณ SOLID ์›์น™

 

 

SOLID ์›์น™

 

 

์˜ค๋Š˜์€ ๊ฐ์ฒด์ง€ํ–ฅ ๊ฐœ๋ฐœ์˜ 5๊ฐ€์ง€ ์›์น™์ธ SOLID ์›์น™์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด๋ณด์•˜๋‹ค.

 

S,O,L,I,D ๋Š” ๊ฐ๊ฐ ๋‹จ์–ด์˜ ์ฒซ ๊ธ€์ž์ด๋ฉฐ ํ•ฉํ•˜์—ฌ ์†”๋ฆฌ๋“œ ์›์น™์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

์ง€๊ธˆ๋ถ€ํ„ฐ ์†”๋ฆฌ๋“œ ์›์น™์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

 

 


 

๐ŸŒฑ SRP ( Single Responsibility Principle )

 

SLP

 

SRP๋Š” Single Responsibility Principle ์˜ ์•ฝ์ž์ด๋ฉฐ ๋ง๊ทธ๋Œ€๋กœ

๋‹จ์ผ ์ฑ…์ž„ ์›์น™์„ ๋œปํ•œ๋‹ค.

 

ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ์ฑ…์ž„๋งŒ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค๋Š” ์›์น™์ด๋‹ค.

 

ํ•˜๋‚˜์˜ ์ฑ…์ž„์ด๋ผ๋Š” ๊ฒƒ์€ ๊ต‰์žฅํžˆ ๋ชจํ˜ธํ•œ ํ‘œํ˜„์ด๋‹ค.

 

"ํด ์ˆ˜๋„ ์žˆ๊ณ  ์ž‘์„ ์ˆ˜๋„" ์žˆ์œผ๋ฉฐ "๋ฌธ๋งฅ๊ณผ ์ƒํ™ฉ์— ๋”ฐ๋ผ" ๋‹ค๋ฅด๋‹ค.

 

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

 

 


 

๐ŸŒฑ OCP ( Open Closed Principle )

 

OCP

 

OCP๋Š” Open Closed Principle ์˜ ์•ฝ์ž๋กœ ๊ฐœ๋ฐฉ ํ์‡„ ์›์น™์„ ๋œปํ•œ๋‹ค.

 

์ด๋Š” "์†Œํ”„ํŠธ์›จ์–ด๋Š” ํ™•์žฅ์—๋Š” ์—ด๋ ค์žˆ์œผ๋‚˜ ๋ณ€๊ฒฝ์—๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค" ๋Š” ์›์น™์ด๋‹ค.

 

 


 

๐ŸŒฑ LSP ( Liskov Subsitution Principle )

LSP

 

LSP๋Š” Liskov Subsitution Principle ์˜ ์•ฝ์ž์ด๋ฉฐ ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™์„ ๋œปํ•œ๋‹ค.

 

์ด ์›์น™์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

 

- ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฐ์ฒด๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์ •ํ™•์„ฑ์„ ๊นจ๋œจ๋ฆฌ์ง€ ์•Š์œผ๋ฉด์„œ ํ•˜์œ„ ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

 

- ๋‹คํ˜•์„ฑ์—์„œ ํ•˜์œ„ ํด๋ž˜์Šค๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๊ทœ์•ฝ์„ ๋‹ค ์ง€์ผœ์•ผ ํ•œ๋‹ค.

 

EX) ์ž๋™์ฐจ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์—‘์…€์€ ์•ž์œผ๋กœ ๊ฐ€๋ผ๋Š” ๊ธฐ๋Šฅ, ๋’ค๋กœ ๊ฐ€๊ฒŒ ๊ตฌํ˜„ํ•˜๋ฉด LSP ์œ„๋ฐ˜

 

 


 

๐ŸŒฑ ISP ( Interface Segregation Principle )

 

ISP

 

ISP๋Š” Interface Segregation Principle  ์˜ ์•ฝ์ž๋กœ ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™์„ ๋œปํ•œ๋‹ค.

 

์ด ๊ทœ์น™์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

 

- ํŠน์ • ํด๋ผ์ด์–ธํŠธ๋ฅผ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํ•˜๋‚˜์˜ ๋ฒ”์šฉ ์ธํ„ฐํŽ˜์ด์Šค๋ณด๋‹ค ์—ฌ๋Ÿฌ ๊ฐœ๊ฐ€ ๋‚ซ๋‹ค.

 

- ์ž๋™์ฐจ ์ธํ„ฐํŽ˜์ด์Šค -> ์šด์ „, ์ •๋น„ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ถ„๋ฆฌ

 

- ์‚ฌ์šฉ์ž ํด๋ผ์ด์–ธํŠธ -> ์šด์ „์ž, ์ •๋น„์‚ฌ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ถ„๋ฆฌ 

 

- ๋ถ„๋ฆฌํ•˜๋ฉด ์ •๋น„ ์ธํ„ฐํŽ˜์ด์Šค ์ž์ฒด๊ฐ€ ๋ณ€ํ•ด๋„ ์šด์ „์ž ํด๋ผ์ด์–ธํŠธ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Œ

 

- ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋ช…ํ™•ํ•ด์ง€๊ณ , ๋Œ€์ฒด ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง„๋‹ค

 

 


 

๐ŸŒฑ DIP ( Dependency Inversion Principle )

 

DIP

 

DIP๋Š” Dependency Inversion Principle ์˜ ์•ฝ์ž๋กœ ์˜์กด๊ด€๊ณ„ ์—ญ์ „ ์›์น™์„ ๋œปํ•œ๋‹ค.

 

์ด ์›์น™์ด ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

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

 

์‰ฝ๊ฒŒ ์ด์•ผ๊ธฐํ•ด์„œ ๊ตฌํ˜„๋œ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•˜๋ผ๋Š” ๋œป์ด๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด ๋งํ•˜๋ฉด ๋ชจ๋‹, ํ…Œ์Šฌ๋ผ, ์ œ๋„ค์‹œ์Šค ๋“ฑ์˜ ๊ตฌํ˜„์ฒด๊ฐ€ ์•„๋‹Œ ์ž๋™์ฐจ ๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•˜๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

 

 


 

๐Ÿคท‍โ™‚๏ธ ๋ฌธ์ œ์ ?

 

 

์–ผํ•๋ณด๋ฉด ์œ„์˜ ์›์น™์œผ๋กœ ๊ฐœ๋ฐœ์„ ํ•˜๋Š” ๋ฐ์— ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์—†์–ด๋ณด์ด์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค.

 

OCP๋Š” ํ™•์žฅ์—๋Š” ์—ด๋ ค์žˆ์ง€๋งŒ ๋ณ€๊ฒฝ์—๋Š” ๋‹ซํ˜€์žˆ๋‹ค ๋ผ๋Š” ์›์น™์ด๋‹ค.

 

ํ•˜์ง€๋งŒ

 

ํ™•์žฅ์„ ํ•˜๋ ค๋ฉด ๋‹น์—ฐํžˆ ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ ์•„๋‹Œ๊ฐ€?

 

๋‹คํ˜•์„ฑ์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•ด๋„

 

MemeberRepository m = new MemoryMemberRepository(); //๊ธฐ์กด ์ฝ”๋“œ

MemberRepository m = new JdbcMemberRepository(); //๋ณ€๊ฒฝ ์ฝ”๋“œ

 

์ด๋ ‡๊ฒŒ ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•˜์ง€๋งŒ ๊ตฌํ˜„์ฒด์—๋„ ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚œ๋‹ค.

 

์ด๋ ‡๊ฒŒ ๋˜๋ฉด OCP๋ฟ๋งŒ ์•„๋‹ˆ๋ผ DIP๊นŒ์ง€ ์œ„๋ฐ˜ํ•˜๊ฒŒ ๋˜๋Š” ๊ผด์ด๋‹ค.

 

 

"์ด๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์„๊นŒ" ์— ๋Œ€ํ•œ ๋ถ€๋ถ„์€ ์Šคํ”„๋ง์˜ DI์™€ IoC๊ฐ€ ์ œ๊ณตํ•œ๋‹ค.

 

๋‹ค์Œ ์‹œ๊ฐ„์—๋Š” ์Šคํ”„๋ง์˜ DI์™€ IoC์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ–๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

 

 

๋˜ํ•œ ์•ž์„œ ์œ„์—์„œ ์„ค๋ช…ํ•œ SOLID์›์น™์€ ๊ฐ์ฒด์ง€ํ–ฅ์„ ๊ณต๋ถ€ํ•˜๋Š” ๋ฐ์— ์ค‘์š”ํ•œ ๋‚ด์šฉ์ด๋ฏ€๋กœ ์ž˜ ์ˆ™์ง€ํ•˜๋„๋ก ํ•˜์ž

728x90