Spring/Spring ๊ธฐ๋ณธ

[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 2. ์ข‹์€ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์˜ 5๊ฐ€์ง€ ์›์น™(SOLID)

hello_u 2023. 1. 30. 17:10

 

 

์•…๋• ๋ฉด์ ‘๊ด€์—๊ฒŒ ๊ฑธ๋ฆฌ๋ฉด ๋ฌผ์–ด๋ณผ ์ˆ˜๋„ ์žˆ๋‹ค๋Š” 

์ข‹์€ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์˜ 5๊ฐ€์ง€ ์›์น™ SOLID๋ฅผ ์•Œ์•„๋ณด์ž...

 

 

 

 

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

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

- ํ•˜๋‚˜์˜ ์ฑ…์ž„์ด๋ผ๋Š” ๊ฒƒ์€ ๋ชจํ˜ธํ•˜๋‹ค.

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

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

 

OCP ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™ ( open/closed principle ) 

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

 

    " ์–ด๋–ป๊ฒŒ ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ ์—†์ด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์„๊นŒ? "

 

- ๋‹คํ˜•์„ฑ์„ ํ™œ์šฉํ•ด ๋ณด์ž

- ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์„œ(๊ธฐ์กด ์ฝ”๋“œ ๋ณ€๊ฒฝ์ด ์•„๋‹˜) ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„(ํ™•์žฅ)

- ์ง€๊ธˆ๊นŒ์ง€ ๋ฐฐ์šด ์—ญํ• ๊ณผ ๊ตฌํ˜„์˜ ๋ถ„๋ฆฌ๋ฅผ ์ƒ๊ฐํ•ด ๋ณด์ž 

 

 

๋ฌธ์ œ์ 

๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค.

 

MemberService ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ตฌํ˜„ ํด๋ž˜์Šค๋ฅผ ์ง์ ‘ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค.

 

๋‹คํ˜•์„ฑ์„ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ OCP ์›์น™์„ ์ง€ํ‚ฌ ์ˆ˜ ์—†๋‹ค.

-> ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ๋งบ์–ด์ฃผ๋Š” ๋ณ„๋„์˜ ์กฐ๋ฆฝ, ์„ค์ •์ž๊ฐ€ ํ•„์š”ํ•˜๋‹ค

-> ์ด ๋ฌธ์ œ๋ฅผ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ•ด๊ฒฐํ•ด ์ค€๋‹ค

 

 

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

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

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

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

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

 

 

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

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

 

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

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

 

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

 

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

 

DIP ์˜์กด๊ด€๊ณ„ ์—ญ์ „ ์›์น™ ( Dependency inversion principle ) 

" ์ถ”์ƒํ™”์— ์˜์กดํ•ด์•ผ์ง€, ๊ตฌ์ฒดํ™”์— ์˜์กดํ•˜๋ฉด ์•ˆ ๋œ๋‹ค. "

- ๊ตฌํ˜„ ํด๋ž˜์Šค์— ์˜์กดํ•˜์ง€ ๋ง๊ณ , ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•˜๋ผ๋Š” ๋œป์ด๋‹ค.

 

์—ญํ• (Role)์— ์˜์กดํ•˜๊ฒŒ ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.

๊ฐ์ฒด ์„ธ์ƒ๋„ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•ด์•ผ ์œ ์—ฐํ•˜๊ฒŒ ๊ตฌํ˜„์ฒด๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค!

๊ตฌํ˜„์ฒด์— ์˜์กดํ•˜๊ฒŒ ๋˜๋ฉด ๋ณ€๊ฒฝ์ด ์•„์ฃผ ์–ด๋ ค์›Œ์ง„๋‹ค.

 

 

 

DIP ์œ„๋ฐ˜

MemberService ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ตฌํ˜„ ํด๋ž˜์Šค๋ฅผ ์ง์ ‘ ์„ ํƒ

 

๊ทธ๋Ÿฐ๋ฐ OCP์—์„œ ์„ค๋ช…ํ•œ MemberService๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•˜์ง€๋งŒ , ๊ตฌํ˜„ ํด๋ž˜์Šค๋„ ๋™์‹œ์— ์˜์กดํ•œ๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ?

-> MemberService๋Š” MemberRepository ์ธํ„ฐํŽ˜์ด์Šค์—๋งŒ ์˜์กดํ•˜๋„๋ก ์„ค๊ณ„๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค. 

 

 

์ •๋ฆฌ

- ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ํ•ต์‹ฌ์€ ๋‹คํ˜•์„ฑ

- ๋‹คํ˜•์„ฑ ๋งŒ์œผ๋กœ๋Š” ์‰ฝ๊ฒŒ ๋ถ€ํ’ˆ์„ ๊ฐˆ์•„ ๋ผ์šฐ๋“ฏ์ด ๊ฐœ๋ฐœํ•  ์ˆ˜ ์—†๋‹ค.

- ๋‹คํ˜•์„ฑ ๋งŒ์œผ๋กœ๋Š” ๊ตฌํ˜„ ๊ฐ์ฒด๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๋„ ํ•จ๊ป˜ ๋ณ€๊ฒฝ๋œ๋‹ค.

- ๋‹คํ˜•์„ฑ ๋งŒ์œผ๋กœ๋Š” OCP, DIP๋ฅผ ์ง€ํ‚ฌ ์ˆ˜ ์—†๋‹ค.

 

 ๋ญ”๊ฐ€ ๋” ํ•„์š”ํ•˜๋‹ค. 

-->  Spring!!!

 

 

๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์™€ ์Šคํ”„๋ง

์Šคํ”„๋ง์€ ๋‹ค์Œ ๊ธฐ์ˆ ๋กœ ๋‹คํ˜•์„ฑ + OCP, DIP๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ์ง€์›ํ•œ๋‹ค.

  • DI(Denpendency Injection) : ์˜์กด๊ด€๊ณ„, ์˜์กด์„ฑ ์ฃผ์ž…
  • DI ์ปจํ…Œ์ด๋„ˆ ์ œ๊ณต 

์ž๋ฐ”์˜ ๊ฐ์ฒด๋“ค์„ ์ปจํ…Œ์ด๋„ˆ์— ๋„ฃ์–ด๋‘๊ณ  ์ด ์•ˆ์—์„œ ์˜์กด๊ด€๊ณ„๋ฅผ ์„œ๋กœ ์—ฐ๊ฒฐํ•ด ์ฃผ๊ณ  ์ฃผ์ž…ํ•ด ์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณต 

 

์ด๋Ÿฐ ๊ธฐ๋Šฅ๋“ค์ด ์žˆ์–ด์•ผ ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ์˜ ๋ณ€๊ฒฝ ์—†์ด ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

์‰ฝ๊ฒŒ ๋ถ€ํ’ˆ์„ ๊ต์ฒดํ•˜๋“ฏ์ด ๊ฐœ๋ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค 

 

์ •๋ฆฌ

- ๋ชจ๋“  ์„ค๊ณ„์— ์—ญํ• ๊ณผ ๊ตฌํ˜„์„ ๋ถ„๋ฆฌํ•˜์ž.

( ์ž๋™์ฐจ, ๊ณต์—ฐ์˜ ์˜ˆ๋ฅผ ๋– ์˜ฌ๋ ค๋ณด์ž.)

 

- ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„๋„ ๊ณต์—ฐ์„ ์„ค๊ณ„ํ•˜๋“ฏ์ด ๋ฐฐ์—ญ(์—ญํ• , ์ธํ„ฐํŽ˜์ด์Šค)๋งŒ ๋งŒ๋“ค์–ด๋‘๊ณ ,

๋ฐฐ์šฐ๋Š” ์–ธ์ œ๋“ ์ง€ ์œ ์—ฐํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ข‹์€ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„๋‹ค.

 

์ด์ƒ์ ์œผ๋กœ๋Š” ๋ชจ๋“  ์„ค๊ณ„์— ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ถ€์—ฌํ•˜์ž. 

 

ํ•˜์ง€๋งŒ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋„์ž…ํ•˜๋ฉด ์ถ”์ƒํ™”๋ผ๋Š” ๋น„์šฉ์ด ๋ฐœ์ƒํ•œ๋‹ค. 

(์ฝ”๋“œ๋ฅผ ์—ด๋ฉด ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์— " ๊ตฌํ˜„ ํด๋ž˜์Šค๊ฐ€ ๋ญ์ง€? " ํ•œ ๋ฒˆ ๋” ๋“ค์–ด๊ฐ€์„œ ๋ด์•ผ ํ•˜๋Š” ๋‹จ์  ) 

 

๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์—†๋‹ค๋ฉด , ๊ตฌ์ฒด ํด๋ž˜์Šค๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜๊ณ  

ํ–ฅํ›„ ๊ผญ ํ•„์š”ํ•  ๋•Œ ๋ฆฌํŒฉํ„ฐ๋งํ•ด์„œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋„์ž…ํ•˜๋Š” ๊ฒƒ๋„ ๋ฐฉ๋ฒ•์ด๋‹ค.

 

 

์ถœ์ฒ˜ : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard

 

์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

์Šคํ”„๋ง ์ž…๋ฌธ์ž๊ฐ€ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์–ด๊ฐ€๋ฉด์„œ ์Šคํ”„๋ง์˜ ํ•ต์‹ฌ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ณ , ์Šคํ”„๋ง ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ™•์‹คํžˆ ๋‹ค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., - ๊ฐ•์˜ ์†Œ๊ฐœ | ์ธํ”„๋Ÿฐ...

www.inflearn.com