DIP

SOLID δΈ­ DIP

DIP(Dependency Inversion Principle) 즉, μ˜μ‘΄κ΄€κ³„ μ—­μ „ μ›μΉ™μ΄λž€,

"좔상화에 μ˜μ‘΄ν•΄μ•Όμ§€, ꡬ체화에 μ˜μ‘΄ν•˜λ©΄ μ•ˆ λœλ‹€." λŠ” 원칙이닀.

  • κ³ μˆ˜μ€€ λͺ¨λ“ˆμ€ μ €μˆ˜μ€€ λͺ¨λ“ˆμ˜ κ΅¬ν˜„μ— μ˜μ‘΄ν•΄μ„œλŠ” μ•ˆλœλ‹€.

  • λŒ€μ‹  μ €μˆ˜μ€€ λͺ¨λ“ˆμ΄ κ³ μˆ˜μ€€ λͺ¨λ“ˆμ—μ„œ μ •μ˜ν•œ 좔상 νƒ€μž…μ— μ˜μ‘΄ν•΄μ•Ό ν•œλ‹€.

circle-check

μ‰½κ²Œ μ„€λͺ…ν•˜λ©΄, ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ λ°›λŠ” 컨트둀러(Cotroller)κ°€ 있고 λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μ²˜λ¦¬ν•˜λŠ” μ„œλΉ„μŠ€(Service)κ°€ μžˆλ‹€. 컨트둀러(κ³ μˆ˜μ€€)λŠ” μ„œλΉ„μŠ€(μ €μˆ˜μ€€)λ₯Ό μ§μ ‘μ μœΌλ‘œ μ˜μ‘΄ν•˜μ§€ μ•Šκ³  좔상화 된 μΈν„°νŽ˜μ΄μŠ€μ— μ˜μ‘΄ν•΄μ•Ό ν•œλ‹€λŠ” 것이닀.

μ΄λŸ¬ν•œ μ„€λͺ…μœΌλ‘œλ§Œ 봀을 λ•Œ μ΄ν•΄ν•˜κΈ° νž˜λ“€μ—ˆκΈ° λ•Œλ¬Έμ—, μ™œ μ‚¬μš©ν•˜κ³  μ–΄λ–»κ²Œ μ‚¬μš©ν•˜λŠ”μ§€μ— λŒ€ν•΄μ„œ μ•Œμ•„λ΄μ•Ό ν•œλ‹€.

계측 ꡬ쑰 μ•„ν‚€ν…μ²˜

보톡 계측 κ΅¬μ‘°λŠ” μœ„ 사진과 같은 ꡬ쑰둜 λ˜μ–΄μžˆλ‹€.

  • ν‘œν˜„ 계측 : μ‚¬μš©μžμ˜ μš”μ²­μ„ λ°›μ•„ μ‘μš© μ˜μ—­μ— 전달함과 λ™μ‹œμ— 처리 κ²°κ³Όλ₯Ό μ‚¬μš©μžμ—κ²Œ ν‘œμ‹œ

  • μ‘μš© 계측 : μ‚¬μš©μžμ—κ²Œ μ œκ³΅ν•  κΈ°λŠ₯ κ΅¬ν˜„

  • 도메인 계측 : λ„λ©”μΈμ˜ 핡심 둜직과 λͺ¨λΈμ„ κ΅¬ν˜„

  • 인프라 계측 : DB 연동과 같은 κ΅¬ν˜„ κΈ°μˆ μ„ 닀룬닀.

각 계측은 μ„œλ‘œ λ‹€λ₯Έ νŠΉμ§•μ„ κ°€μ§€κ³  있으며 μƒμœ„ 계측은 ν•˜μœ„ κ³„μΈ΅μ—κ²Œ μ˜μ‘΄ν•˜μ§€λ§Œ, ν•˜μœ„ 계측은 μƒμœ„ 계측에 μ˜μ‘΄ν•˜μ§€ μ•ŠλŠ”λ‹€. ν•˜μ§€λ§Œ κ·Έλ ‡κ²Œ 되면 인프라 계측에 쒅속적인 ν˜„μƒμ΄ 많이 λ°œμƒν•˜κ²Œ λœλ‹€.


μ˜ˆμ‹œ

택배 νšŒμ‚¬λ₯Ό μ„ νƒν•˜λŠ” μ„œλΉ„μŠ€κ°€ μžˆμŠ΅λ‹ˆλ‹€. μ‚¬μš©μžλŠ” μžμ‹ μ΄ μ›ν•˜λŠ” 택배 νšŒμ‚¬λ₯Ό 선택할 수 μžˆμŠ΅λ‹ˆλ‹€.

ν•΄λ‹Ή μ½”λ“œμ—λŠ” 문제점이 μ‘΄μž¬ν•©λ‹ˆλ‹€.

  1. λ‹¨μœ„ ν…ŒμŠ€νŠΈκ°€ μ–΄λ ΅λ‹€.

μœ„ μ½”λ“œλŠ” Service만 μ˜¨μ „νžˆ ν…ŒμŠ€νŠΈ ν•  수 μ—†λ‹€. 인프라 계측에 μ†ν•˜λŠ” Lotteκ°€ μ™„λ²½ν•˜κ²Œ λ™μž‘ν•΄μ•Ό Serviceλ₯Ό ν…ŒμŠ€νŠΈν•  수 μžˆλ‹€.

  1. ν™•μž₯κ³Ό 변경이 μ–΄λ ΅λ‹€.

λ§Œμ•½ μƒˆλ‘œμš΄ νšŒμ‚¬μΈ ν•œμ§„(Hanjin)이 μΆ”κ°€λœλ‹€λ©΄ μ–΄λ–»κ²Œ 될까? νšŒμ‚¬κ°€ 좔가될 λ•Œλ§ˆλ‹€ κΈ°μ‘΄ Service에 μƒˆλ‘œμš΄ νšŒμ‚¬λ₯Ό μΆ”κ°€ν•΄μ•Όν•œλ‹€.

μ΄λ ‡κ²Œ 인프라 계측이 ν™•μž₯ 될 λ•Œλ§ˆλ‹€ μ„œλΉ„μŠ€ μ½”λ“œλ₯Ό μˆ˜μ •ν•˜λŠ” 것은 μ’‹μ§€ μ•Šμ€ μ½”λ“œλΌκ³  μ–˜κΈ°ν•œλ‹€.

μ˜ˆμ‹œμ—μ„œλŠ” μ„œλΉ„μŠ€κ°€ κ³ μˆ˜μ€€ λͺ¨λ“ˆμ΄κ³ , νšŒμ‚¬λ“€μ΄ μ €μˆ˜μ€€ λͺ¨λ“ˆμ΄λ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 의쑴 λ°©ν–₯은 μ„œλΉ„μŠ€μ—μ„œ νšŒμ‚¬λ‘œ ν–₯ν•œλ‹€. 즉, κ³ μˆ˜μ€€ λͺ¨λ“ˆμ΄ μ €μˆ˜μ€€ λͺ¨λ“ˆμ„ μ˜μ‘΄ν•˜κ³  μžˆλ‹€.

DIPλ₯Ό μ μš©ν•΄λ³΄μž.

DIPλ₯Ό 적용 ν•˜κ²Œλ˜λ©΄ μ €μˆ˜μ€€ λͺ¨λ“ˆμ΄ κ³ μˆ˜μ€€ λͺ¨λ“ˆμ— 의쑴 ν•˜κ²Œ 의쑴 λ°©ν–₯이 역전이 λœλ‹€.

  • 그러기 μœ„ν•΄μ„œλŠ” μœ„μ—μ„œλ„ μ–˜κΈ°ν•œ 좔상 νƒ€μž…(μΈν„°νŽ˜μ΄μŠ€, 좔상 클래슀)κ°€ ν•„μš”ν•˜λ‹€.

μš°μ„  μ €μˆ˜μ€€ λͺ¨λ“ˆμ΄ 상속받을 μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ§Œλ“ λ‹€.

μ €μˆ˜μ€€ λͺ¨λ“ˆλ“€μ€ μΈν„°νŽ˜μ΄μŠ€μ˜ κ΅¬ν˜„μ²΄κ°€ λœλ‹€.

이제 ServiceλŠ” Company μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ˜μ‘΄ν•˜κ³  μƒˆλ‘œμš΄ Companyκ°€ μΆ”κ°€λœλ‹€ ν•˜λ”λΌλ„ Service λ‘œμ§μ€ λ³€κ²½ν•  ν•„μš”κ°€ μ—†λ‹€.

μ΄λ ‡κ²Œ λ³€κ²½ ν•˜λ”λΌλ„ Runtime flowλŠ” 변함이 μ—†λ‹€.

클래슀 λ‹€μ΄μ–΄κ·Έλž¨

즉, μ €μˆ˜μ€€ λͺ¨λ“ˆμ΄ κ³ μˆ˜μ€€ λͺ¨λ“ˆμ— μ˜μ‘΄ν•˜κ²Œ λ˜λŠ” 것을 DIP라고 ν•œλ‹€.

Last updated