[Clean Architecture] TIL #1

Jeanยท2023๋…„ 10์›” 18์ผ
0

TIL (Today I Learned)

๐Ÿ—“ 2023.10.18

์˜ค๋Š˜ ์ฝ์€ ๋ฒ”์œ„

๐Ÿ“š 3๋ถ€ ์„ค๊ณ„ ์›์น™: 7์žฅ ~ 11์žฅ, p.61 ~ p.96

์ฑ…์—์„œ ๊ธฐ์–ตํ•˜๊ณ  ์‹ถ์€ ๋‚ด์šฉ

๊น”๋”ํ•œ ์ฝ”๋“œ๋กœ ์ข‹์€ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ •์˜ํ•˜๋Š” "์›์น™"์ด ํ•„์š”ํ•จ -> SOLID ์›์น™

SOLID ์›์น™์˜ ๋ชฉ์ 

  • ๋ณ€๊ฒฝ์— ์œ ์—ฐํ•œ ์ฝ”๋“œ
  • ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์›€
  • ๋งŽ์€ ์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์— ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ์˜ ๊ธฐ๋ฐ˜

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

ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ์€ ํ•˜๋‚˜์˜, ์˜ค์ง ํ•˜๋‚˜์˜ ์•กํ„ฐ์— ๋Œ€ํ•ด์„œ๋งŒ ์ฑ…์ž„์ ธ์•ผ ํ•œ๋‹ค.

SRP ์›์น™์„ ์œ„๋ฐ˜ํ•˜๋Š” ์ง•ํ›„๋“ค

  • ์šฐ๋ฐœ์  ์ค‘๋ณต
  • ๋ณ‘ํ•ฉ

SRP ์›์น™์„ ์œ„๋ฐ˜ํ•˜๋Š” ์ง•ํ›„๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” "์„œ๋กœ ๋‹ค๋ฅธ ์•กํ„ฐ๊ฐ€ ์˜์กดํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์„œ๋กœ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค" ๋ผ๋Š” ์›์น™์„ ์ž˜ ์ง€ํ‚ค๋Š” ๊ฒƒ.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๊ธฐ๋ฒ•๋“ค์ด ์กด์žฌ.

๋ฐ์ดํ„ฐ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ๋ถ„๋ฆฌํ•œ๋‹ค
  • ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค์™€ ์ด๋ฅผ ๊ณต์œ ํ•˜๋Š” Actor ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ”
  • ๊ฐ ํด๋ž˜์Šค๋Š” ์ž์‹ ์˜ ๋ฉ”์„œ๋“œ์— ํ•„์š”ํ•œ ์†Œ์Šค์ฝ”๋“œ๋งŒ ํฌํ•จ
  • ์„ธ ํด๋ž˜์Šค๋Š” ์„œ๋กœ์˜ ์กด์žฌ๋ฅผ ๋ชฐ๋ผ์•ผ ํ•จ
  • ์ด๋ฅผ ํ†ตํ•ด '์šฐ์—ฐํ•œ ์ค‘๋ณต'์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Œ
  • ๋‹จ์ ์€ ์„ธ ๊ฐ€์ง€ ํด๋ž˜์Šค๋ฅผ ์ธ์Šคํ„ด์Šคํ™”ํ•˜๊ณ  ์ถ”์ ํ•ด์•ผ ํ•˜๋Š” ์ ์ด ์žˆ์Œ
    • ํŒŒ์‚ฌ๋“œ ํŒจํ„ด์„ ์ด์šฉํ•ด ์„ธ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์š”์ฒญ๋œ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง€๋Š” ๊ฐ์ฒด๋กœ ์œ„์ž„ํ•˜๋Š” ๋ฐฉ๋ฒ• ์‚ฌ์šฉ

OCP: ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™, Open-Closed Principle

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

๊ธฐ๋Šฅ์ด ์–ด๋–ป๊ฒŒ, ์™œ, ์–ธ์ œ ๋ฐœ์ƒํ•˜๋Š”์ง€์— ๋”ฐ๋ผ์„œ ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•˜๊ณ , ๋ถ„๋ฆฌํ•œ ๊ธฐ๋Šฅ์„ ์ปดํฌ๋„ŒํŠธ์˜ ๊ณ„์ธต ๊ตฌ์กฐ๋กœ ์กฐ์งํ™” ํ•œ๋‹ค.
์ด๋ฅผ ํ†ตํ•ด ์ €์ˆ˜์ค€ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ฐœ์ƒํ•œ ๋ณ€๊ฒฝ์œผ๋กœ๋ถ€ํ„ฐ ๊ณ ์ˆ˜์ค€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ณดํ˜ธํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ฐฉํ–ฅ์„ฑ ์ œ์–ด
  • ์ •๋ณด ์€๋‹‰

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

์ƒ์œ„ ๊ฐ์ฒด์˜ ๋ชจ๋“  ํ–‰์œ„๋Š” ํ•˜์œ„ ๊ฐ์ฒด๋กœ ์น˜ํ™˜๋  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

LSP๋Š” ๊ฐ์ฒด ์ˆ˜์ค€์—์„œ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ์ˆ˜์ค€๊นŒ์ง€ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฐ˜๋“œ์‹œ ํ™•์žฅํ•ด์•ผ ํ•จ

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

๊ฐ๊ฐ์˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‹จ์ผ ์ปดํฌ๋„ŒํŠธ์˜ ๋ณ€๊ฒฝ์— ์˜ํ•ด ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋„๋ก ์„ค๊ณ„๊ฐ€ ์ง„ํ–‰๋˜์–ด์•ผ ํ•จ.
์ด๋ฅผ ์œ„ํ•ด ๊ฐ๊ฐ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์˜์กด์„ฑ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

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

์˜์กด์„ฑ ์—ญ์ „ ์›์น™์—์„œ '์œ ์—ฐ์„ฑ์ด ๊ทน๋Œ€ํ™”๋œ ์‹œ์Šคํ…œ'์ด๋ž€ ์†Œ์Šค์ฝ”๋“œ ์˜์กด์„ฑ์ด ์ถ”์ƒ์— ์˜์กดํ•˜๋ฉฐ ๊ตฌํ˜„์ฒด์—๋Š” ์˜์กดํ•˜์ง€ ์•Š๋Š” ์‹œ์Šคํ…œ์„ ์˜๋ฏธ -> Hexagonal Architecture ๊ฐ™์€?? ๋А๋‚Œ์ธ ๋“ฏ

์†Œ์Šค ์ฝ”๋“œ ์˜์กด ๊ด€๊ณ„์—์„œ ๊ตฌ์ฒด ๋ชจ๋“ˆ์€ ์ฐธ์กฐํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค -> ํ˜„์‹ค์ ์œผ๋กœ ๊ฐ€๋Šฅํ•œ๊ฐ€? ๋‹น์žฅ์˜ ์‚ฌ์šฉํ•˜๋Š” ์—ฌ๋Ÿฌ ํŒจํ‚ค์ง€๋งŒ ๋ณด์•„๋„ ์ด๋ฏธ ๊ตฌํ˜„๋œ ๊ตฌ์ฒด ๋ชจ๋“ˆ์„ ์ฐธ์กฐํ•˜๊ณ  ์žˆ์Œ...?

DIP๋ฅผ ์–˜๊ธฐํ•  ๋•Œ๋Š” ์˜์กดํ•˜์ง€ ์•Š๋„๋ก ํ”ผํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒƒ์€ ๋ฐ”๋กœ ๋ณ€๋™์„ฑ์ด ํฐ ๊ตฌ์ฒด ์š”์†Œ์ด๋‹ค.
(์ด๋ฏธ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ํŒจํ‚ค์ง€๋“ค(๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค)์€ ์•ˆ์ •์ ์ด๊ณ  ๋ณ€ํ™”๊ฐ€ ํ†ต์ œ๋˜์–ด ์žˆ๋‹ค)

์•ˆ์ •๋œ ์ถ”์ƒํ™”

์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ตฌํ˜„์ฒด๋ณด๋‹ค ๋ณ€๋™์„ฑ์ด ๋‚ฎ๋‹ค

  1. ์ถ”์ƒ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋ณ€๊ฒฝ์ด ์ƒ๊ธฐ๋ฉด ์ด๋ฅผ ๊ตฌํ˜„ํ•œ ๊ตฌํ˜„์ฒด๋“ค๋„ ๋ชจ๋‘ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•œ๋‹ค.
  2. ๋ฐ˜๋Œ€๋กœ, ๊ตฌํ˜„์ฒด์— ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•ด๋„ ๊ตฌํ˜„ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋Œ€๋‹ค์ˆ˜์˜ ๊ฒฝ์šฐ ๋ณ€๊ฒฝ์ด ํ•„์š”์—†๋‹ค.

์•ˆ์ •๋œ ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜๋ž€ ๋ณ€๋™์„ฑ์ด ํฐ ๊ตฌํ˜„์ฒด์— ์˜์กดํ•˜๋Š” ์ผ์€ ์ง€์–‘ํ•˜๊ณ , ์•ˆ์ •๋œ ์ถ”์ƒ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ ํ˜ธํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜

์ด๋ฅผ ์œ„ํ•œ ์ฝ”๋”ฉ ์‹ค์ฒœ๋ฒ•.

  1. ๋ณ€๋™์„ฑ์ด ํฐ ๊ตฌ์ฒด ํด๋ž˜์Šค๋ฅผ ์ฐธ์กฐํ•˜์ง€ ๋ง๋ผ. ๋Œ€์‹  ์ถ”์ƒ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ฐธ์กฐํ•˜๋ผ. -> ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ์‹์„ ๊ฐ•ํ•˜๊ฒŒ ์ œ์•ฝํ•˜๊ณ  ์ถ”์ƒ ํŒฉํ† ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ•์ œํ•œ๋‹ค.
  2. ๋ณ€๋™์„ฑ์ด ํฐ ๊ตฌ์ฒด ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ํŒŒ์ƒํ•˜์ง€ ๋ง๋ผ.
  3. ๊ตฌ์ฒด ํ•จ์ˆ˜๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•˜์ง€ ๋งˆ๋ผ... ์ œ๋ฐœ.
  4. ๊ตฌ์ฒด์ ์ด๋ฉฐ ๋ณ€๋™์„ฑ์ด ํฌ๋‹ค๋ฉด ์ ˆ๋Œ€๋กœ ๊ทธ ์ด๋ฆ„์„ ์–ธ๊ธ‰ํ•˜์ง€ ๋ง๋ผ.

์Œ. .๊ทผ๋ฐ ์•„์ง ์ž˜ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์Œ

์ฝ์€ ์†Œ๊ฐ

๊ฒฐ๊ตญ SOLID ์›์น™์„ ์ด์šฉํ•ด ์œ ์—ฐํ•˜๊ณ , ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ์€ ์‹œ์Šคํ…œ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ๋ผ๊ณ  ์ƒ๊ฐ ๋œ๋‹ค.
๊ฐ๊ฐ์˜ ์›์น™๋“ค์ด ๊ฒฐ๊ตญ์—๋Š” ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ , ์œ ์—ฐํ•œ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ƒ๊ฐ์„ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

๊ถ๊ธˆํ•œ ๋‚ด์šฉ or ์ž˜ ์ดํ•ด๋˜์ง€ ์•Š๋Š” ๋‚ด์šฉ

์˜์กด์„ฑ ์—ญ์ „ ์›์น™์— ๋Œ€ํ•ด ์ž˜ ์ดํ•ดํ•˜์ง€ ๋ชป ํ•˜๊ฒ ๋‹ค. ์กฐ๊ธˆ ๋” ๊ณต๋ถ€๊ฐ€ ํ•„์š”ํ•  ๋“ฏ

profile
Software Engineer

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