CS/Design Pattern

[ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„] SOLID๋ž€?

๊ฐœ๋ฐœ๊ฐœ๊ตด๐Ÿธ 2023. 5. 23. 21:56

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP)์ด๋ž€?

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

 

์ด๋Ÿฌํ•œ ํŠน์ง•๋“ค๋กœ ์ธํ•ด ํ”„๋กœ๊ทธ๋žจ์„ ์œ ์—ฐํ•˜๊ณ  ๋ณ€๊ฒฝ์ด ์šฉ์ดํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€๊ทœ๋ชจ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์— ๋งŽ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

*ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์ด๋ž€?

https://j-su2.tistory.com/127

 

[ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„] ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์ด๋ž€?

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„(Programming Paradigm)์ด๋ž€? ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ด€์ ์„ ๊ฐ–๊ฒŒ ํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ : ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์ด ํ”„๋กœ๊ทธ๋žจ์„ ์ƒ

j-su2.tistory.com

*๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP)๋ž€?

https://j-su2.tistory.com/35

 

[ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„] OOP์™€ FP

OOP๋ž€? OOP๋Š” Object Oriented Programming์˜ ์•ฝ์ž๋กœ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋œปํ•ฉ๋‹ˆ๋‹ค. class์™€ object์— ๊ธฐ๋ฐ˜ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„(๋””์ž์ธ ํŒจํ„ด)์œผ๋กœ, ๊ด€๋ จ๋œ ๋ฐ์ดํ„ฐ๋ผ๋ฆฌ ๋ฌถ์–ด์„œ class๋ฅผ ํ˜•์„ฑํ•˜๊ณ  ๊ทธ ์•ˆ์—

j-su2.tistory.com

 

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


SOLID๋ž€?

SOLID๋ž€ ๋กœ๋ฒ„ํŠธ ๋งˆํ‹ด์ด 2000๋…„๋Œ€ ์ดˆ๋ฐ˜์— ๋ช…๋ช…ํ•œ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐ ์„ค๊ณ„์˜ ๋‹ค์„ฏ ๊ฐ€์ง€ ๊ธฐ๋ณธ ์›์น™์„ ๋งˆ์ดํด ํŒจ๋”์Šค๊ฐ€ ๋‘๋ฌธ์ž์–ด ๊ธฐ์–ต์ˆ ๋กœ ์†Œ๊ฐœํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋„ ์œ ์ง€ ๋ณด์ˆ˜์™€ ํ™•์žฅ์ด ์‰ฌ์šด ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค๊ฒŒ ํ•ด์คŒ
  • ์• ์ž์ผ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ๊ณผ ์ ์‘ํ˜• ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์˜ ์ „๋ฐ•์  ์ „๋žต์˜ ์ผ๋ถ€

S๋Š” ๋‹จ์ผ ์ฑ…์ž„ ์›์น™, O๋Š” ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™, L์€ ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™, I๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™, D๋Š” ์˜์กด ์—ญ์„  ์›์น™์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. 

 

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

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

  • ๋ณ€๊ฒฝ์ด ์žˆ์„ ๋•Œ ํŒŒ๊ธ‰ ํšจ๊ณผ๊ฐ€ ์ ์œผ๋ฉด ์ข‹์Œ
  • ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฐ์ฒด์˜ ์ƒ์„ฑ ๋ถ€๋ถ„๊ณผ ์‚ฌ์šฉ ๋ถ€๋ถ„์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ

 

๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™(OCP, Open Close Principle)

์œ ์ง€ ๋ณด์ˆ˜ ์‚ฌํ•ญ์ด ์ƒ๊ธด๋‹ค๋ฉด ์ฝ”๋“œ๋ฅผ ์‰ฝ๊ฒŒ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ณ  ์ˆ˜์ •ํ•  ๋•Œ๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•˜๋Š” ์›์น™์ž…๋‹ˆ๋‹ค.

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

 

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

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

  • ๋ถ€๋ชจ ๊ฐ์ฒด์— ์ž์‹ ๊ฐ์ฒด๋ฅผ ๋„ฃ์–ด๋„ ์‹œ์Šคํ…œ์ด ๋ฌธ์ œ์—†์ด ๋Œ์•„๊ฐ€์•ผ ํ•จ
  • ๋‹คํ˜•์„ฑ์—์„œ ํ•˜์œ„ ํด๋ž˜์Šค๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๊ทœ์•ฝ์„ ๋‹ค ์ง€์ผœ์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ, ๋‹คํ˜•์„ฑ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ์›์น™, ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ตฌํ˜„์ฒด๋ฅผ ๋ฏฟ๊ณ  ์‚ฌ์šฉํ•˜๋ ค๋ฉด LSP๊ฐ€ ์ถฉ์กฑ๋˜์–ด์•ผ ํ•จ
  • ์˜ˆ๋ฅผ ๋“ค์–ด ์ปดํŒŒ์ผ์— ์„ฑ๊ณตํ•ด๋„ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๊ทœ์•ฝ์„ ์ง€ํ‚ค์ง€ ์•Š๊ฒŒ ๊ตฌํ˜„ํ•˜๋‹ค๋ฉด LSP๋ฅผ ์œ„๋ฐ˜!

 

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

ํ•˜๋‚˜์˜ ์ผ๋ฐ˜์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค๋ณด๋‹ค ๊ตฌ์ฒด์ ์ธ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š” ์›์น™์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

  • ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋ช…ํ™•ํ•ด์ง€๊ณ , ๋Œ€์ฒด ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง
  • ์˜ˆ๋ฅผ ๋“ค์–ด ์ž๋™์ฐจ๋Š” ์šด์ „/์ •๋น„ ๊ธฐ๋Šฅ์ด ์žˆ๊ณ , ์‚ฌ์šฉ์ž๋Š” ์šด์ „์ž/์ •๋น„์‚ฌ๋กœ ๋ถ„๋ฆฌํ•ด๋‘๋ฉด ์ •๋น„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ฐ”๊ฟ”๋„ ์šด์ „์ž์—๋Š” ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Œ

 

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

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

  • ์ƒ์œ„ ๊ณ„์ธต์€ ํ•˜์œ„ ๊ณ„์ธต์˜ ๋ณ€ํ™”์— ๋Œ€ํ•œ ๊ตฌํ˜„์œผ๋กœ๋ถ€ํ„ฐ ๋…๋ฆฝํ•ด์•ผ ํ•จ
  • ๊ตฌํ˜„ ํด๋ž˜์Šค์— ์˜์กดํ•˜์ง€ ๋ง๊ณ  ์ธํ„ฐํŽ˜์ด์Šค์— ์˜์กดํ•ด์•ผ ํ•จ (๊ตฌํ˜„์ฒด์— ์˜์กดํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด ๋ณ€๊ฒฝ์ด ์•„์ฃผ ์–ด๋ ค์›Œ์ง€๊ฒŒ ๋จ)
  • ์˜์กด์„ฑ ์ฃผ์ž…์€ DIP๋ฅผ ๋”ฐ๋ฆ„
  • ์—ญํ• ์— ์˜์กดํ•˜๊ฒŒ ํ•ด์•ผํ•จ

 

์ •๋ฆฌํ•˜์ž๋ฉด, ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ํ•ต์‹ฌ์€ ๋‹คํ˜•์„ฑ์„ ํ†ตํ•ด ๋ณ€๊ฒฝ์— ์šฉ์ดํ•œ ๊ฐœ๋ฐœ์„ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋‹คํ˜•์„ฑ ๋งŒ์œผ๋กœ๋Š” OCP, DIP๋ฅผ ์ง€ํ‚ฌ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์Šคํ”„๋ง๊ณผ ๊ฐ™์ด ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„๋ฅผ ๋„์™€์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


[์ถœ์ฒ˜] ๋ฉด์ ‘์„ ์œ„ํ•œ CS ์ „๊ณต์ง€์‹ ๋…ธํŠธ

http://www.yes24.com/Product/Goods/108887922

 

๋ฉด์ ‘์„ ์œ„ํ•œ CS ์ „๊ณต์ง€์‹ ๋…ธํŠธ - YES24

๋””์ž์ธ ํŒจํ„ด, ๋„คํŠธ์›Œํฌ, ์šด์˜์ฒด์ œ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์ž๋ฃŒ ๊ตฌ์กฐ, ๊ฐœ๋ฐœ์ž ๋ฉด์ ‘๊ณผ ํฌํŠธํด๋ฆฌ์˜ค๊นŒ์ง€!CS ์ „๊ณต์ง€์‹ ์Šต๋“๊ณผ ๋ฉด์ ‘ ๋Œ€๋น„, ์ด ์ฑ… ํ•œ ๊ถŒ์ด๋ฉด ์ถฉ๋ถ„ํ•˜๋‹ค!๊ฐœ๋ฐœ์ž ๋ฉด์ ‘์—์„œ ํฐ ๋น„์ค‘์„ ์ฐจ์ง€ํ•˜๋Š” CS(Comp

www.yes24.com

https://ko.wikipedia.org/wiki/SOLID_(%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%EC%84%A4%EA%B3%84) 

 

SOLID (๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„) - ์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „

์œ„ํ‚ค๋ฐฑ๊ณผ, ์šฐ๋ฆฌ ๋ชจ๋‘์˜ ๋ฐฑ๊ณผ์‚ฌ์ „.

ko.wikipedia.org

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard

 

[๋ฌด๋ฃŒ] ์Šคํ”„๋ง ์ž…๋ฌธ - ์ฝ”๋“œ๋กœ ๋ฐฐ์šฐ๋Š” ์Šคํ”„๋ง ๋ถ€ํŠธ, ์›น MVC, DB ์ ‘๊ทผ ๊ธฐ์ˆ  - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

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

www.inflearn.com

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