Skip to content

Latest commit

 

History

History
101 lines (81 loc) · 2.59 KB

211227SOLID-D.md

File metadata and controls

101 lines (81 loc) · 2.59 KB

TIL 211227

Tag: SOLID-D

🔥학습 내용

  • SOLID를 벌써부터 완전히 이해하려고 하지말자.
  • 개념만 파악하고, 계속해서 의식하면서 개발하자.

Dependency Inversion Principle (의존관계 역전 원칙)

  • 상위레벨 모듈은 하위레벨 모듈에 의존하면 안된다.
  • 두 모듈은 추상화된 인터페이스(프로토콜)에 의존해야한다.
  • 추상타입은 구체타입에 의존하지 않게 된다. 구체타입이 추상타입에 의존하게 된다.
  • 하위레벨 모듈이 상위레벨 모듈을 참조하는 것은 되지만, 상위레벨 모듈이 하위레벨 모듈을 참조하는 것은 안하는게 좋다. 그런 경우는 제네릭이나 Associate를 사용
  • 모듈간의 의존성을 낮추고 클래스간의 결합도를 낮추도록 한다.
protocol TimeTraveling {
    func travelInTime(time: TimeInterval) -> String
}

final class DeLorean: TimeTraveling {
	func travelInTime(time: TimeInterval) -> String {
		return "Used Flux Capacitor and travelled in time by: \(time)s"
	}
}

final class EmmettBrown {
	private let timeMachine: TimeTraveling

    // ⚠️ Emmet Brown은 `DeLorean`을 구체적인 클래스인 `DeLorean`이 아닌, `TimeTraveling` 장치로 받는다.
	init(timeMachine: TimeTraveling) {
		self.timeMachine = timeMachine
	}

	func travelInTime(time: TimeInterval) -> String {
		return timeMachine.travelInTime(time: time)
	}
}

let timeMachine = DeLorean()

let mastermind = EmmettBrown(timeMachine: timeMachine)
mastermind.travelInTime(time: -3600 * 8760)
class 맥북13인치 {
  func 전원켜기() {}
}

class 개발자 {
  let 노트북: 맥북13인치 = 맥북13인치()
  
  func 개발시작() {
    노트북.전원켜기()
  }
}
// 변화하기 쉬운 모듈(클래스)에 의존

class 맥북13인치 {
  func 전원켜기() {}
}

class 개발자 {
  let 노트북: 맥북13인치
  
  init(노트북: 맥북13인치) {
    self.노트북 = 노트북
  }
  
  func 개발시작() {
    노트북.전원켜기()
  }
}
// 의존성 주입(DI)

protocol 노트북 {
  func 전원켜기()
}

class 개발자 {
  let 노트북: 노트북
  
  init(맥북: 노트북) {
    self.노트북 = 맥북
  }
  
  func 개발시작() {
    노트북.전원켜기()
  }
}

class 맥북13인치: 노트북 {
  func 전원켜기() {}
}

class 맥북15인치: 노트북 {
  func 전원켜기() {}
}

class 레노버: 노트북 {
  func 전원켜기() {}
}
// 하위레벨 모듈들이 상위레벨 모듈(추상화된 프로토콜)을 의존하고 있고, 상위레벨 모듈은 변화가 거의 없는 모듈