[Clean Architecture] TIL #2

JeanΒ·2023λ…„ 11μ›” 1일
0

#architecture #study #clean_architecture

TIL (Today I Learned)


πŸ—“ 2023.10.18

였늘 읽은 λ²”μœ„


πŸ“š 4λΆ€ μ»΄ν¬λ„ŒνŠΈ 원칙: 12μž₯ ~ 14μž₯. p.97 ~ p.138

μ±…μ—μ„œ κΈ°μ–΅ν•˜κ³  싢은 λ‚΄μš©


12. μ»΄ν¬λ„ŒνŠΈ 원칙

μ»΄ν¬λ„ŒνŠΈλŠ” μ‹œμŠ€ν…œμ˜ ꡬ성 μš”μ†Œλ‘œ 배포할 수 μžˆλŠ” κ°€μž₯ μž‘μ€ λ‹¨μœ„.

μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 규λͺ¨κ°€ μ„±μž₯ν•˜λ©΄μ„œ, μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œ 및 κ΄€λ ¨ 쒅속성 μ½”λ“œλ₯Ό λͺ¨λ‘ ν•œ 곳에 λ„£λŠ” μ’…λž˜μ˜ λ°©μ‹μœΌλ‘œλŠ” κ³„μ†ν•΄μ„œ λ©”λͺ¨λ¦¬ 곡간을 μ°¨μ§€ν•˜κ²Œ λ˜μ—ˆκ³  μ΄λŠ” λ©”λͺ¨λ¦¬ κ³΅κ°„μ˜ λ‹¨νŽΈν™”λ₯Ό μ΄ˆλž˜ν–ˆλ‹€.

μ΄λŸ¬ν•œ λ‹¨νŽΈν™”λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μž¬λ°°μΉ˜κ°€ κ°€λŠ₯ν•œ λ°”μ΄λ„ˆλ¦¬ κ°€ 화두 λ˜μ—ˆλ‹€.

  • 즉, μ§€λŠ₯적인 λ‘œλ”λ₯Ό μ‚¬μš©ν•΄μ„œ λ©”λͺ¨λ¦¬μ— μž¬λ°°μΉ˜ν•  수 μžˆλŠ” ν˜•νƒœμ˜ λ°”μ΄λ„ˆλ¦¬κ°€ μƒμ„±λ˜λ„λ‘ 컴파일러λ₯Ό μˆ˜μ •ν•˜μžλŠ” 아이디어
  • ν”„λ‘œκ·Έλž˜λ¨ΈλŠ” 였직 ν•„μš”ν•œ ν•¨μˆ˜λ§Œμ„ λ‘œλ“œν•˜μ—¬ μ‚¬μš©ν•  수 있게 됨

μ»΄νŒŒμΌλŸ¬λŠ” μž¬λ°°μΉ˜κ°€ κ°€λŠ₯ν•œ λ°”μ΄λ„ˆλ¦¬ μ•ˆμ˜ ν•¨μˆ˜ 이름을 메타 데이터 ν˜•νƒœλ‘œ μƒμ„±ν•˜λ„λ‘ μˆ˜μ • 됨.

  • ν”„λ‘œκ·Έλž¨μ΄ 라이브러리 ν•¨μˆ˜λ₯Ό 호좜 -> μ»΄νŒŒμΌλŸ¬λŠ” 라이브러리 ν•¨μˆ˜ 이름을 μ™ΈλΆ€ 참쑰둜 생성
  • 라이브러리 ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜λŠ” ν”„λ‘œκ·Έλž¨ -> μ»΄νŒŒμΌλŸ¬λŠ” ν•΄λ‹Ή 이름을 μ™ΈλΆ€ μ •μ˜λ‘œ 생성
  • μ™ΈλΆ€ μ •μ˜λ₯Ό λ‘œλ“œν•  μœ„μΉ˜κ°€ μ •ν•΄μ§€κΈ°λ§Œ ν•˜λ©΄ λ‘œλ”κ°€ μ™ΈλΆ€ μ°Έμ‘°λ₯Ό μ™ΈλΆ€ μ •μ˜μ— 링크 μ‹œν‚¬ 수 있음
  • -> 링킹 λ‘œλ”

링킹 λ‘œλ”μ˜ λ“±μž₯

  • ν”„λ‘œκ·Έλž¨μ„ κ°œλ³„μ μœΌλ‘œ μ»΄νŒŒμΌν•˜κ³  λ‘œλ“œν•  수 μžˆλŠ” λ‹¨μœ„λ‘œ λΆ„ν•  κ°€λŠ₯ν•˜κ²Œ 됨
  • μž‘μ€ ν”„λ‘œκ·Έλž¨μ—μ„œλŠ” 잘 λ™μž‘ν–ˆμ§€λ§Œ, ν”„λ‘œκ·Έλž¨μ΄ μ»€μ§€λ©΄μ„œ 이 링킹 λ‘œλ”κ°€ 느렀짐

λŠλ €μ§„ 링킹 λ‘œλ”λ₯Ό ν•΄κ²°ν•˜κ³ μž 역할이 2개둜 뢄리 됨

  • λ‘œλ“œ(λ‘œλ”)
    - μ™„λ£Œλœ 재배치 μ½”λ“œλ₯Ό λ‘œλ“œλ§Œ μ‹œν‚΄
    - ν•œλ²ˆ λ§Œλ“€μ–΄λ‘” μ‹€ν–‰ νŒŒμΌμ€ μ–Έμ œλΌλ„ λΉ λ₯΄κ²Œ λ‘œλ“œ κ°€λŠ₯
  • 링크(링컀)
    - λ³„λ„μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œ 이 μž‘μ—…μ„ 처리
    - 링크가 μ™„λ£Œλœ 재배치 μ½”λ“œ 생성

μ΄λ ‡κ²Œ λ‚˜λ‰˜μ–΄λ„ ν”„λ‘œκ·Έλž¨μ΄ μ»€μ§€λ©΄μ„œ 물리적으둜 느린 μž₯치λ₯Ό μ΄μš©ν•˜λŠ” ν•œκ³„λ₯Ό λ„˜μ–΄μ„œμ§€ λͺ» ν–ˆλ‹€...!

  • λ‘œλ“œ μ‹œκ°„μ€ λΉ¨λžμ§€λ§Œ, 컴파일 - 링크 ꡬ간이 병λͺ© 지점 λ°œμƒ

λ¬΄μ–΄μ˜ 법칙 이 λ“±μž₯함.

  • 기술의 λ°œμ „μœΌλ‘œ λ©”λͺ¨λ¦¬λŠ” μ €λ ΄ν•΄μ§€κ³ , λ””μŠ€ν¬λŠ” μž‘μ•„μ§€κ³  λΉ¨λΌμ‘Œλ‹€
  • 컴퓨터 속도, λ©”λͺ¨λ¦¬, 집적도가 λ§€ 18κ°œμ›”λ§ˆλ‹€ λ‘λ°°λ‘œ μ¦κ°€ν•œλ‹€λŠ” μ£Όμž₯
  • 1950 ~ 2000λ…„λŒ€κΉŒμ§€λ§Œ 유효
  • 1990λ…„λŒ€ 이후, ν”„λ‘œκ·Έλž¨μ„ μ„±μž₯μ‹œν‚€λŠ” 속도보닀 링크 μ‹œκ°„μ΄ μ€„μ–΄λ“œλŠ” 속도가 빨라지기 μ‹œμž‘ν•¨
  • 컴퓨터가 빨라지기 μ‹œμž‘ν•˜λ©΄μ„œ λ‹€μ‹œ 링크와 λ‘œλ“œλ₯Ό λ™μ‹œμ— μ²˜λ¦¬ν•  수 μžˆμ–΄μ§
  • μ»΄ν¬λ„ŒνŠΈ ν”ŒλŸ¬κ·ΈμΈ 아킀텍쳐 κ°€ 탄생

13. μ»΄ν¬λ„ŒνŠΈ 응집도

μ–΄λ–€ 클래슀λ₯Ό μ–΄λŠ μ»΄ν¬λ„ŒνŠΈμ— ν¬ν•¨μ‹œμΌœμ•Ό ν• κΉŒ?

μ»΄ν¬λ„ŒνŠΈ 응집도와 κ΄€λ ¨λœ μ„Έκ°€μ§€ 원칙

REP(Reuse/Release Equivalence Principle): μž¬μ‚¬μš©/릴리슀 λ“±κ°€ 원칙

μž¬μ‚¬μš© λ‹¨μœ„λŠ” 릴리슀 λ‹¨μœ„μ™€ κ°™λ‹€

  • 단일 μ»΄ν¬λ„ŒνŠΈλŠ” 응집성 높은 ν΄λž˜μŠ€μ™€ λͺ¨λ“ˆλ“€λ‘œ κ΅¬μ„±λ˜μ–΄μ•Ό 함
  • μ»΄ν¬λ„ŒνŠΈλ₯Ό κ΅¬μ„±ν•˜λŠ” λͺ¨λ“  λͺ¨λ“ˆμ€ μ„œλ‘œ κ³΅μœ ν•˜λŠ” μ€‘μš”ν•œ ν…Œλ§ˆλ‚˜ λͺ©μ μ΄ μžˆμ–΄μ•Ό 함

CCP(Common Closure Principle): 곡톡 폐쇄 원칙

λ™μΌν•œ 이유둜 λ™μΌν•œ μ‹œμ μ— λ³€κ²½λ˜λŠ” 클래슀λ₯Ό 같은 μ»΄ν¬λ„ŒνŠΈλ‘œ 묢어라.
μ„œλ‘œ λ‹€λ₯Έ μ‹œμ μ— λ‹€λ₯Έ 이유둜 λ³€κ²½λ˜λŠ” ν΄λž˜μŠ€λŠ” 닀름 μ»΄ν¬λ„ŒνŠΈλ‘œ λΆ„λ¦¬ν•˜λΌ.

  • SRP(단일 μ±…μž„ 원칙)λ₯Ό μ»΄ν¬λ„ŒνŠΈ κ΄€μ μ—μ„œ 바라본 λ‚΄μš©
  • 단일 μ»΄ν¬λ„ŒνŠΈλŠ” λ³€κ²½μ˜ μ΄μœ κ°€ μ—¬λŸ¬ 개 μžˆμ–΄μ„œλŠ” μ•ˆ 됨
  • λŒ€λΆ€λΆ„ μœ μ§€ λ³΄μˆ˜μ„± > μž¬μ‚¬μš©μ„±
    - 변경이 λ°œμƒν•œλ‹€λ©΄, λ³€κ²½ λͺ¨λ‘κ°€ 단일 μ»΄ν¬λ„ŒνŠΈμ—μ„œ λ°œμƒν•˜λŠ” 것이 λ‚«λ‹€
    - λ³€κ²½λœ μ»΄ν¬λ„ŒνŠΈλ§Œ 재배포 ν•˜λ©΄ 되기 λ•Œλ¬Έ
  • 변경될 κ°€λŠ₯성이 μžˆλŠ” ν΄λž˜μŠ€λŠ” λͺ¨λ‘ ν•œκ³³μœΌλ‘œ 묢을 것을 κΆŒν•¨
  • OCP(개방-폐쇄 원칙) 와도 λΉ„μŠ·ν•¨ - ν΄λž˜μŠ€κ°€ λ³€κ²½μ—λŠ” λ‹«ν˜€ 있고 ν™•μž₯μ—λŠ” μ—΄λ € μžˆμ–΄μ•Ό 함
  • 100% νμ‡„λŠ” λΆˆκ°€λŠ”ν•˜λ―€λ‘œ μ „λž΅μ μœΌλ‘œ 폐쇄
    - λ™μΌν•œ μœ ν˜•μ˜ 변경에 λŒ€ν•΄ λ‹«ν˜€ μžˆλŠ” ν΄λž˜μŠ€λ“€μ„ ν•˜λ‚˜μ˜ μ»΄ν¬λ„ŒνŠΈλ‘œ 묢음
    - OCPλ₯Ό ν™•λŒ€ 적용

CRP(Common Reuse Principle): 곡톡 μž¬μ‚¬μš© 원칙

μ»΄ν¬λ„ŒνŠΈ μ‚¬μš©μžλ“€μ„ ν•„μš”ν•˜μ§€ μ•ŠλŠ” 것에 μ˜μ‘΄ν•˜κ²Œ κ°•μš”ν•˜μ§€ 말라.

  • ν΄λž˜μŠ€μ™€ λͺ¨λ“ˆμ„ μ–΄λŠ μ»΄ν¬λ„ŒνŠΈμ— μœ„μΉ˜μ‹œν‚¬μ§€ κ²°μ •ν•  λ•Œ 도움이 λ˜λŠ” 원칙
  • 같이 μž¬μ‚¬μš©λ˜λŠ” κ²½ν–₯이 μžˆλŠ” ν΄λž˜μŠ€μ™€ λͺ¨λ“ˆλ“€μ€ 같은 μ»΄ν¬λ„ŒνŠΈμ— 포함해야 ν•œλ‹€
  • λ™μΌν•œ μ»΄ν¬λ„ŒνŠΈλ‘œ λ¬Άμ–΄μ„œλŠ” μ•ˆλ˜λŠ” ν΄λž˜μŠ€κ°€ 무엇인지도 생각해야 함
  • μ–΄λ–€ μ»΄ν¬λ„ŒνŠΈκ°€ λ‹€λ₯Έ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ‚¬μš©ν•˜λ©΄ μ˜μ‘΄μ„±μ΄ λ°œμƒ 함
    - μ˜μ‘΄ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈκ°€ μžˆλ‹€λ©΄ ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈμ˜ λͺ¨λ“  ν΄λž˜μŠ€μ— λŒ€ν•΄ μ˜μ’€ν•¨μ„ ν™•μ‹€νžˆ 인지해야 함
  • CRPλŠ” ISP(μΈν„°νŽ˜μ΄μŠ€ 뢄리 원칙)의 포괄적인 버전
    - 즉, ν•„μš”ν•˜μ§€ μ•ŠλŠ” 것에 μ˜μ‘΄ν•˜μ§€ 마라

REP: μž¬μ‚¬μš©μ„±μ„ μœ„ν•œ κ·Έλ£Ή
CCP: μœ μ§€λ³΄μˆ˜μ„±μ„ μœ„ν•œ κ·Έλ£Ή
CRP: λΆˆν•„μš”ν•œ 릴리슀λ₯Ό ν”Όν•˜κΈ° μœ„ν•΄ 뢄리

μ‹œκ°„μ΄ 흐름에 따라 ν”„λ‘œμ νŠΈμ˜ 초점이 개발 κ°€λŠ₯μ„±μ—μ„œ μž¬μ‚¬μš©μ„±μœΌλ‘œ λ°”λ€Œκ³ , 그에 λ”°λ₯Έ μ»΄ν¬λ„ŒνŠΈ κ΅¬μ„±ν•˜λŠ” 방식에도 λ³€ν™”κ°€ λ°œμƒν•œλ‹€.

μ»΄ν¬λ„ŒνŠΈ κ²°ν•©

ADP(Acyclic Dependencies Principle): μ˜μ‘΄μ„± λΉ„μˆœν™˜ 원칙

μ»΄ν¬λ„ŒνŠΈ μ˜μ‘΄μ„± κ·Έλž˜ν”„μ— μˆœν™˜μ΄ μžˆμ–΄μ„œλŠ” μ•ˆλœλ‹€

  • μ£Ό λ‹¨μœ„ λΉŒλ“œ
    - νŒ€ λ‹¨μœ„μ—μ„œ κ°œλ°œμ„ 5일 쀑 4일 μ§„ν–‰ν•˜κ³  1일은 κ°μžκ°€ μ§„ν–‰ν•œ μž‘μ—…μ„ ν†΅ν•©ν•˜λŠ” 방식
    - ν”„λ‘œμ νŠΈ λ‹¨μœ„κ°€ μ»€μ§€λ©΄μ„œ 톡합을 μœ„ν•œ λ§‰λŒ€ν•œ μ‹œκ°„μ΄ λ“€κΈ° μ‹œμž‘ν•¨
    - 톡합 ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•˜κΈ° μ–΄λ €μ›Œ μ§€κ³ , λΉ λ₯Έ ν”Όλ“œλ°±μ΄ μ£ΌλŠ” μž₯점을 점점 μžƒκ²Œ 됨
  • μˆœν™˜ μ˜μ‘΄μ„± μ œκ±°ν•˜κΈ°
    - μ΄λŸ¬ν•œ 문제λ₯Ό μ–΄λ–»κ²Œ ν•΄κ²°ν• κΉŒ?
    - 개발 ν™˜κ²½μ„ λ¦΄λ¦¬μŠ€κ°€ κ°€λŠ₯ν•œ μ»΄ν¬λ„ŒνŠΈ λ‹¨μœ„λ‘œ λΆ„λ¦¬ν•˜λŠ” 것
    - νŠΉμ • μ»΄ν¬λ„ŒνŠΈκ°€ λ³€κ²½λ˜λ”λΌλ„ λ‹€λ₯Έ νŒ€μ— 영ν–₯을 μ£Όμ§€ μ•Šλ„λ‘ μž‘μ—… λ‹¨μœ„λ₯Ό 뢄리함
    - 타 νŒ€μ—μ„œ μ»΄ν¬λ„ŒνŠΈκ°€ λ¦΄λ¦¬μ¦ˆκ°€ 되면, μš°λ¦¬νŒ€μ€ 이λ₯Ό μ‚¬μš©ν• μ§€? κΈ°μ‘΄ 버전을 μ‚¬μš©ν•˜κ³  좔후에 μ—…λ°μ΄νŠΈλ₯Ό ν• μ§€ κ²°μ •ν•˜μ—¬ μž‘μ—…μ„ μ§„ν–‰ν•  수 μžˆλ‹€
    - μ΄λŸ¬ν•œ μž‘μ—…μ΄ μ„±κ³΅ν•˜λ €λ©΄, μ»΄ν¬λ„ŒνŠΈ μ‚¬μ΄μ˜ μ˜μ‘΄μ„± ꡬ쑰λ₯Ό λ°˜λ“œμ‹œ 관리해야 함
    - λΉ„ μˆœν™˜ν˜• λ°©ν–₯ κ·Έλž˜ν”„
  • μˆœν™˜ 끊기
    - DIP(μ˜μ‘΄μ„± μ—­μ „ 원칙)을 적용
    - λͺ¨λ‘ μ˜μ‘΄ν•˜λŠ” μƒˆλ‘œμš΄ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ§Œλ“€κ³ , 각 μ»΄ν¬λ„ŒνŠΈκ°€ λͺ¨λ‘ μ˜μ‘΄ν•˜λŠ” ν΄λž˜μŠ€λ“€μ€ μƒˆλ‘œμš΄ μ»΄ν¬λ„ŒνŠΈλ‘œ 이동 μ‹œν‚΄
  • 흐트러짐(Jitters)
    - μš”κ΅¬ 사항이 λ³€κ²½λ˜λ©΄ μ»΄ν¬λ„ŒνŠΈ ꡬ쑰도 변경될 수 μžˆλ‹€

ν•˜μ–‘μ‹(top-down) 섀계

μ»΄ν¬λ„ŒνŠΈ κ΅¬μ‘°λŠ” ν•˜ν–₯μ‹μœΌλ‘œ 섀계될 수 μ—†λ‹€.

SDP: μ•ˆμ •λœ μ˜μ‘΄μ„± 원칙

μ•ˆμ •μ„±μ˜ λ°©ν–₯으둜 μ˜μ‘΄ν•˜λΌ

  • 변경이 쉽지 μ•Šμ€ μ»΄ν¬λ„ŒνŠΈκ°€ 변동이 μ˜ˆμƒλ˜λŠ” μ»΄ν¬λ„ŒνŠΈμ— μ˜μ‘΄ν•˜κ²Œ λ§Œλ“€μ–΄μ„œλŠ” μ ˆλŒ€λ‘œ μ•ˆλ¨
    - ν•œλ²ˆ μ˜μ‘΄ν•˜κ²Œ 되면 변동성이 큰 μ»΄ν¬λ„ŒνŠΈλ„ κ²°κ΅­ 변경이 μ–΄λ €μ›Œ 짐
    - μ•ˆμ •λœ μ˜μ‘΄μ„± 원칙을 μ€€μˆ˜ν•˜λ©΄ λ³€κ²½ν•˜κΈ° μ–΄λ €μš΄ λͺ¨λ“ˆμ΄ λ³€κ²½ν•˜κΈ° μ‰½κ²Œ λ§Œλ“€μ–΄μ§„ λͺ¨λ“ˆμ— μ˜μ‘΄ν•˜μ§€ μ•Šλ„λ‘ λ§Œλ“€ 수 있음
  • μ•ˆμ •μ„±
    - 변경을 λ§Œλ“€κΈ° μœ„ν•΄ ν•„μš”ν•œ μž‘μ—…λŸ‰κ³Ό κ΄€λ ¨ 됨
    - μ»΄ν¬λ„ŒνŠΈ μ•ˆμͺ½μœΌλ‘œ λ“€μ–΄μ˜€λŠ” μ˜μ‘΄μ„±μ΄ λ§Žμ•„μ§€λ©΄ μƒλ‹Ήνžˆ μ•ˆμ •μ μ΄λΌ λ³Ό 수 μžˆλ‹€
    - μ‚¬μ†Œν•œ 변경이라도 μ˜μ‘΄ν•˜λŠ” λͺ¨λ“  μ»΄ν¬λ„ŒνŠΈλ₯Ό λ§Œμ‘±μ‹œν‚€λ©΄μ„œ λ³€κ²½ν•˜λ €λ©΄ μƒλ‹Ήν•œ λ…Έλ ₯이 ν•„μš”
    - μ—¬λŸ¬ μ»΄ν¬λ„ŒνŠΈκ°€ ν•˜λ‚˜μ˜ μ»΄ν¬λ„ŒνŠΈμ— μ˜μ‘΄ν•˜λ©΄, 의쑴 λŒ€μƒμ˜ μ»΄ν¬λ„ŒνŠΈλŠ” λ³€κ²½ν•˜μ§€ 말아야 ν•œλ‹€
    - 이 경우 의쑴 λŒ€μƒ μ»΄ν¬λ„ŒνŠΈλŠ” λ‹€λ₯Έ μ—¬λŸ¬ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ±…μž„μ§„λ‹€
    - λ°˜λŒ€λ‘œ 의쑴 λŒ€μƒ μ»΄ν¬λ„ŒνŠΈλŠ” 어디에도 μ˜μ‘΄ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ 독립적이닀
    - μ–΄λ–€ ν•œ μ»΄ν¬λ„ŒνŠΈκ°€ λ‹€λ₯Έ μ—¬λŸ¬ μ»΄ν¬λ„ŒνŠΈλ₯Ό μ˜μ‘΄ν•œλ‹€λ©΄, ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈλŠ” μ±…μž„μ„±μ΄ μ—†λ‹€κ³  ν•  수 μžˆλ‹€.
    - λ‹€λ§Œ, μ˜μ‘΄ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈμ˜ μˆ˜μ— 따라 변경이 λ°œμƒν•  수 μžˆλŠ” μš”μΈμ΄ λ§Žμ•„μ§„λ‹€.
    - 이 κ²½μš°λŠ” μ˜μ‘΄μ μ΄λ‹€
  • μ•ˆμ •μ„± μ§€ν‘œ
    - μ»΄ν¬λ„ŒνŠΈ μ•ˆμ •μ„±μ„ μΈ‘μ •ν•  수 μžˆμ„κΉŒ? -> μ»΄ν¬λ„ŒνŠΈλ‘œ λ“€μ–΄μ˜€κ³  λ‚˜κ°€λŠ” μ˜μ‘΄μ„±μ˜ 개수λ₯Ό μ„Έμ–΄ λ³΄λŠ” 방법
    - 이 수λ₯Ό 톡해 μ»΄ν¬λ„ŒνŠΈκ°€ μœ„μΉ˜μƒ(positional) μ–΄λŠ μ •λ„μ˜ μ•ˆμ •μ„±μ„ κ°€μ§€λŠ”μ§€ 계산 κ°€λŠ₯
    - Fan-in
    - μ•ˆμœΌλ‘œ λ“€μ–΄μ˜€λŠ” μ˜μ‘΄μ„±
    - μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€μ˜ ν΄λž˜μŠ€μ— μ˜μ‘΄ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈ μ™ΈλΆ€μ˜ 클래슀 개수
    - Fan-out
    - λ°”κΉ₯으둜 λ‚˜κ°€λŠ” μ˜μ‘΄μ„±
    - μ»΄ν¬λ„ŒνŠΈ μ™ΈλΆ€μ˜ ν΄λž˜μŠ€μ— μ˜μ‘΄ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€μ˜ 클래슀 개수
    - I(λΆˆμ•ˆμ •μ„±): I = Fan-out / (Fan-in + Fan-out),
    - [0, 1] μ‚¬μ΄μ˜ 값을 가짐
    - 0일 수둝 μ•ˆμ •λœ μ»΄ν¬λ„ŒνŠΈ -> 독립적이닀
    - 1일 수둝 -> μ˜μ‘΄μ μ΄λ‹€
  • λͺ¨λ“  μ»΄ν¬λ„ŒνŠΈκ°€ μ•ˆμ •μ μ΄μ–΄μ•Ό ν•˜λŠ” 것은 μ•„λ‹ˆλ‹€
    - λͺ¨λ“  μ»΄ν¬λ„ŒνŠΈκ°€ 졜고둜 μ•ˆμ •μ μΈ μ‹œμŠ€ν…œμ΄λΌλ©΄ 변경이 λΆˆκ°€λŠ₯ 함

SAP: μ•ˆμ •ν™”λœ 좔상화 원칙

μ»΄ν¬λ„ŒνŠΈλŠ” μ•ˆμ •λœ μ •λ„λ§ŒνΌλ§Œ 좔상화 λ˜μ–΄μ•Ό ν•œλ‹€.

  • μ‹œμŠ€ν…œμ—μ„œ 자주 λ³€κ²½ν•΄μ„œλŠ” μ•ˆλ˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄
    - κ³ μˆ˜μ€€ μ•„ν‚€ν…μ²˜ or μ •μ±… κ²°μ •κ³Ό κ΄€λ ¨λœ μ†Œν”„νŠΈμ›¨μ–΄
  • μ»΄ν¬λ„ŒνŠΈκ°€ μ΅œλŒ€λ‘œ μ•ˆμ •λœ μƒνƒœμ΄λ©΄μ„œ λ™μ‹œμ— 변경에 μΆ©λΆ„νžˆ λŒ€μ‘ν•  수 μžˆμ„ μ •λ„λ‘œ μœ μ—°ν•˜κ²Œ λ§Œλ“€ 수 μžˆμ„κΉŒ?
    - OCP 원칙을 μ΄μš©ν•˜μž
    - 클래슀λ₯Ό μˆ˜μ •ν•˜μ§€ μ•Šκ³ λ„ ν™•μž₯이 μΆ©λΆ„νžˆ κ°€λŠ₯ν•  μ •λ„λ‘œ 클래슀λ₯Ό μœ μ—°ν•˜κ²Œ λ§Œλ“€ 수 있음
    - 이 원칙을 μ€€μˆ˜ν•˜λŠ” 클래슀 -> μΆ”μ„± 클래슀
  • SAPλŠ” μ•ˆμ •μ„±κ³Ό 좔상화 정도 μ‚¬μ΄μ˜ 관계λ₯Ό μ •μ˜

읽은 μ†Œκ°


  • μ»΄ν¬λ„ŒνŠΈλ₯Ό κ΅¬λΆ„ν•˜λŠ” λ‹¨μœ„μ— λŒ€ν•œ 감이 잘 μ˜€μ§€ μ•ŠλŠ”λ‹€.

κΆκΈˆν•œ λ‚΄μš© or 잘 μ΄ν•΄λ˜μ§€ μ•ŠλŠ” λ‚΄μš©


profile
Software Engineer

0개의 λŒ“κΈ€