๐Ÿ”ญ
Ellery's study archive
Resume(์ˆ˜์ •์ค‘)GithubTistory
  • framework, library
    • Spring core
      • ์Šคํ”„๋ง ํŠธ๋ผ์ด์•ต๊ธ€ - POJO, IOC/DI, AOP, PSA
      • Servlet
    • Spring MVC
      • DispatcherServlet
      • Validation
    • Spring Boot
    • Spring Security
    • Spring Batch
    • Spring Webflux
    • JPA
    • JUnit, Spring Test
    • etc
      • Slf4j MDC(Mapped Diagnostic Context)
  • ETC, ๊ฐœ๋ฐœ ํŒ๋“ค
    • ๊ฐœ๋ฐœ ํŒ๋“ค
      • ์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ init ์‹œ์— ํ•ด์•ผ๋  ๊ฒƒ๋“ค
      • vim ํ•œ๊ธ€ ๊นจ์งˆ ๋•Œ ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹ ์ง€์ •
      • EC2 ssh connection ์‰ฝ๊ฒŒ ํ•˜๊ธฐ
      • ๋ฆฌ๋ˆ…์Šค ์ปค๋งจ๋“œ, netstats
      • Forkํ•œ ๋ ˆํฌ์ง€ํ† ๋ฆฌ origin ์—…๋ฐ์ดํŠธ
      • git merge, rebase
      • Intellij ์ž์ฃผ ์“ฐ๋Š” ๊ธฐ๋Šฅ ๋‹จ์ถ•ํ‚ค
      • JSON handling
      • aws user-data.sh
    • Lombok annotation, ๊ถŒ์žฅ ๋ฐฉ์‹
    • DB ๋ชจ๋ธ๋ง ์‹œ์— ์ธ์กฐ ์‹๋ณ„์ž ์ •์˜ํ•˜๋Š” ์ผ€์ด์Šค
    • Redis pub/sub vs Apache kafka
  • Language
    • Java
      • ์ž๋ฐ” ๋ฒ„์ ผ๋ณ„ feature
      • JVM architecture
      • Garbage collection
      • Java String pool
      • java 8 Concurrent
      • Optional
      • Stream
      • Comparator, Comparator
      • Error, Exception
      • Java์˜ Call by value(pass by value)
      • Java ๋ณ€์ˆ˜ ๊ฐ„ ๊ฐ’ Swap ๋ฐฉ์‹ 5๊ฐ€์ง€
    • Javascript
      • ์ž์ฃผ ์“ฐ๋Š” ES6 ๋ฌธ๋ฒ• ์ •๋ฆฌ
      • ES6 module
      • ES6 proxy
      • scope, var closure ์ด์Šˆ, let, const
    • Python
      • @lru_cache
  • CS
    • OS
      • Process, Thread
      • CPU scheduling
      • sync vs async, blocking vs nonblocking
      • Memory segmentation
      • virtual memory
      • ํŽ˜์ด์ง€ ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • Network
      • UDP
      • TCP
      • DNS
      • HTTP
      • web server, WAS
      • Proxy, Load balancer
      • web socket, WebRTC
      • gRPC
      • web secure
    • DB
      • MySQL
      • index
      • ์ •๊ทœํ™”
      • DB ํŠธ๋žœ์žญ์…˜, ๋™์‹œ์„ฑ ์ œ์–ด ๋ฌธ์ œ
      • ํด๋Ÿฌ์Šคํ„ฐ๋ง
      • ๋ ˆํ”Œ๋ฆฌ์ผ€์ด์…˜
      • ์ƒค๋”ฉ
    • Data Structure, Algorithm
      • AVL tree, Red black tree
      • B-tree, B*tree, B+tree
      • Hash
    • Design pattern
      • SOLID
      • ์ƒ์„ฑ ํŒจํ„ด
        • ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด
        • ํŒฉํ† ๋ฆฌ ๋ฉ”์„œ๋“œ ํŒจํ„ด
        • ๋นŒ๋” ํŒจํ„ด
        • Null ๊ฐ์ฒด ํŒจํ„ด
      • ๊ตฌ์กฐ ํŒจํ„ด
        • ํผ์‚ฌ๋“œ ํŒจํ„ด
        • ํ”„๋ก์‹œ ํŒจํ„ด
        • ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด
        • ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํŒจํ„ด
      • ํ–‰์œ„ ํŒจํ„ด
        • ์ „๋žต ํŒจํ„ด
        • ํ…œํ”Œ๋ฆฟ ๋ฉ”์„œ๋“œ ํŒจํ„ด
        • ์ƒํƒœ ํŒจํ„ด
        • ์˜ต์ €๋ฒ„ ํŒจํ„ด
  • ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ณ
    • Layered Architecture
    • ํด๋ฆฐ ์•„ํ‚คํ…์ณ
    • DDD
    • etc
      • DTO vs VO
  • ๊ฐœ๋ฐœ ์„œ์ ๋“ค
    • ์†ŒํŠธ์›์Šค ์•ค์†”๋กœ์ง€์—์„œ ์†Œ๊ฐœ๋˜๋Š” ๊ฐ์ฒด์ง€ํ–ฅ ์ƒํ™œ ์ฒด์กฐ ์›์น™ ๊ฐ„๋žต ์ •๋ฆฌ
    • ์—˜๋ ˆ๊ฐ•ํŠธ ์˜ค๋ธŒ์ ํŠธ - ์ƒˆ๋กœ์šด ๊ด€์ ์—์„œ ๋ฐ”๋ผ๋ณธ ๊ฐ์ฒด์ง€ํ–ฅ
    • ๋งŒ๋“ค๋ฉด์„œ ๋ฐฐ์šฐ๋Š” ํด๋ฆฐ ์•„ํ‚คํ…์ณ
  • ํ…Œํฌ ๋ธ”๋กœ๊ทธ
Powered by GitBook
On this page
Edit on GitHub
  1. CS
  2. Design pattern

SOLID

๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„๋ฅผ ์œ„ํ•œ 5์›์น™์œผ๋กœ SOLID๊ฐ€ ์†Œ๊ฐœ๋จ

โ†’ ๋†’์€ ์‘์ง‘๋„, ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„๋ผ๋Š” ๊ณ ์ „์ ์ธ ๊ฐœ๋ฐœ์›์น™์„ ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ๊ด€์ ์—์„œ ๋‹ค์‹œ ์ •๋ฆฝํ•œ ๊ฒƒ์ด SOLID ์›์น™

  1. SRP single responsibility - ๋‹จ์ผ ์ฑ…์ž„ ์›์น™

  • ์–ด๋–ค ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผํ•˜๋Š” ์ด์œ ๋Š” ์˜ค์ง ํ•˜๋‚˜ ๋ฟ์ด์–ด์•ผ ํ•œ๋‹ค

  • ์—ญํ• (์ฑ…์ž„)์„ ๋ถ„๋ฆฌํ•œ๋‹ค

  • ๊ฐ์ฒด์ง€ํ–ฅ 4๋Œ€ ํŠน์„ฑ ์ค‘ ํ•˜๋‚˜์ธ ์ถ”์ƒํ™”(๋ชจ๋ธ๋ง ๊ณผ์ •)์„ ํ†ตํ•ด ํด๋ž˜์Šค ์„ ๋ณ„, ์†์„ฑ, ๋ฉ”์„œ๋“œ ์„ค๊ณ„ ์‹œ์— ๋ฐ˜๋“œ์‹œ SRP๋ฅผ ๊ณ ๋ คํ•˜๋Š” ์Šต๊ด€์„ ๋“ค์ด์ž

  1. OCP open closed- ๊ฐœ๋ฐฉ ํ์‡„ ์›์น™

  • ์ž์‹ ์˜ ํ™•์žฅ์—๋Š” ์—ด๋ ค์žˆ๊ณ , ์ฃผ๋ณ€์˜ ๋ณ€ํ™”์— ๋Œ€ํ•ด์„œ๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

  • ์ƒ์œ„ ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ค‘๊ฐ„์— ๋‘์–ด์„œ ๋ณ€ํ™”์— ๋‹ซํ˜€์žˆ์–ด์•ผ ํ•œ๋‹ค

  1. LSP Liskov substitution - ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™

  • ์„œ๋ธŒ ํƒ€์ž…์€ ์–ธ์ œ๋‚˜ ์ž์‹ ์˜ ๊ธฐ๋ฐ˜ ํƒ€์ž…์œผ๋กœ ๊ต์ฒดํ•  ์ˆ˜ ์žˆ์–ด์•ผ ๋œ๋‹ค(Robert C. martin)

  • ํ•˜์œ„ ํด๋ž˜์Šค is a kind of ์ƒ์œ„ ํด๋ž˜์Šค, ๊ตฌํ˜„ ํด๋ž˜์Šค is able to ์ธํ„ฐํŽ˜์ด์Šค โ†’ ์ด ๋ฌธ์žฅ๋Œ€๋กœ ๊ตฌํ˜„๋œ ํ”„๋กœ๊ทธ๋žจ์ด๋ฉด LSP๋ฅผ ์ž˜ ์ง€ํ‚ค๊ณ  ์žˆ๋Š” ๊ฒƒ

    • ์˜ˆ์™ธ: ์ƒ์†์ด ์กฐ์ง๋„๋‚˜ ๊ณ„์ธต๋„ ํ˜•ํƒœ๋กœ ๊ตฌํ˜„๋œ ๊ฒฝ์šฐ

    • ํ•˜์œ„ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋Š” ์ƒ์œ„ํ˜• ๊ฐ์ฒด ์ฐธ์กฐ ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•ด ์ƒ์œ„ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ์—ญํ• ์„ ํ•˜๋Š”๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†์–ด์•ผ ํ•œ๋‹ค

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

  • ํด๋ผ์ด์–ดํŠธ๋Š” ์ž์‹ ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”์„œ๋“œ์— ์˜์กด๊ด€๊ณ„๋ฅผ ๋งบ์œผ๋ฉด ์•ˆ๋œ๋‹ค

  • SRP์™€ ISP๋Š” ๊ฐ™์€ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋‘๊ฐ€์ง€ ๋‹ค๋ฅธ ํ•ด๊ฒฐ์ฑ…. ํ•˜์ง€๋งŒ SRP๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์€ ํ•ด๊ฒฐ์ฑ…์ด๋‹ค.

  • ์ธํ„ฐํŽ˜์ด์Šค ์ตœ์†Œ์ฃผ์˜ ์›์น™: ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋ฉ”์„œ๋“œ๋ฅผ ์™ธ๋ถ€์— ๊ณต๊ฐœํ•  ๋•Œ๋Š” ์ตœ์†Œํ•œ์˜ ๋ฉ”์„œ๋“œ๋งŒ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค.

    โ†” LSP์— ๋”ฐ๋ฅด๋ฉด ์ƒ์œ„ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์€ ๋งŽ์„์ˆ˜๋ก ์ข‹๋‹ค. ISP์— ๋”ฐ๋ฅด๋ฉด ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ธฐ๋Šฅ์€ ์ž‘์„ ์ˆ˜๋ก ์ข‹๋‹ค.

    • ์ƒ์œ„ ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์ด ๋นˆ์•ฝํ•˜๋ฉด ํ˜•๋ณ€ํ™˜์ด ์ž์ฃผ ์ผ์–ด๋‚˜์„œ ์ƒ์†์˜ ํ˜œํƒ์„ ๋ณผ ์ˆ˜ ์—†๋‹ค.

    • ์ธํ„ฐํŽ˜์ด์Šค ๊ธฐ๋Šฅ์ด ์ž‘์•„์•ผ ๊ฐ ๊ธฐ๋Šฅ๋ณ„๋กœ ๋ถ„๋ฆฌํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. DIP dependency inversion - ์˜์กด ์—ญ์ „ ์›์น™

  • ์ž์‹ ๋ณด๋‹ค ๋ณ€ํ•˜๊ธฐ ์‰ฌ์šด ๊ฒƒ์— ์˜์กดํ•˜์ง€ ๋งˆ๋ผ

  • ๊ณ ์ฐจ์› ๋ชจ๋“ˆ์€ ์ €์ฐจ์› ๋ชจ๋“ˆ์— ์˜์กดํ•˜๋ฉด ์•ˆ๋œ๋‹ค. ์ด ๋‘ ๋ชจ๋“ˆ ๋ชจ๋‘ ๋‹ค๋ฅธ ์ถ”์ƒํ™” ๋œ ๊ฒƒ์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค

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

  • ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๋Š” ๊ตฌ์ฒด(concrete) ํด๋ž˜์Šค์— ์˜์กดํ•˜์ง€ ๋งˆ๋ผ

  • SoC(separation of concerns): ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ. ๊ด€์‹ฌ์ด ๊ฐ™์€ ๊ฒƒ ๋ผ๋ฆฌ๋Š” ํ•˜๋‚˜์˜ ๊ฐ์ฒด ํ˜น์€ ์นœํ•œ ๊ฐ์ฒด๋กœ ๋ชจ์šฐ๊ณ , ๊ด€์‹ฌ์ด ๋‹ค๋ฅธ ๊ฒƒ์€ ์„œ๋กœ ๋–จ์–ด์ ธ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋„๋ก ๋ถ„๋ฆฌํ•˜๋Š” ์›์น™.

  • SoC๋ฅผ ์ ์šฉํ•˜๋ฉด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ SOLID ์›์น™์„ ์ ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

PreviousDesign patternNext์ƒ์„ฑ ํŒจํ„ด

Last updated 2 years ago