Open yoogail105 opened 2 years ago
Dependency Injection
(DI, 의존성 주입)init
등을 활용해서 의존성 주입 가능class Outfit {
func top() {
print("맨투맨")
}
func bottom() {
print("조거팬츠")
}
}
struct Person {
var todayOOTD: Outfit
func top() {
todayOOTD.top()
}
func bottom() {
todayOOTD.bottom()
}
}
protocol Clothes {
func printTop()
func printBottom()
}
class Outfit: Clothes {
var top: String
var bottom: String
init(top: String, bottom: String) {
self.top = top
self.bottom = bottom
}
func printTop() {
print("오늘 입은 상의는 \(top)입니다.")
}
func printBottom() {
print("오늘 입은 하의는 \(bottom)입니다.")
}
}
struct DayOOTD {
func printTop() {
todayOOTD.printTop()
}
func printBottom() {
todayOOTD.printBottom()
}
}
let dayOutfit = Outfit(top: "맨투맨", bottom: "조거팬츠")
var april01 = DayOOTD(todayOOTD: dayOutfit)
april01.printTop() // 오늘 입은 상의는 맨투맨입니다.
april01.printBottom() // 오늘 입은 하의는 조거팬츠입니다.
protocol Clothes {
func printTop()
func printBottom()
}
class Outfit: Clothes {
var top: String
var bottom: String
init(top: String, bottom: String) {
self.top = top
self.bottom = bottom
}
func printTop() {
print("오늘 입은 상의는 \(top)입니다.")
}
func printBottom() {
print("오늘 입은 하의는 \(bottom)입니다.")
}
}
struct DayOOTD {
var todayOOTD: Outfit
func printTop() {
todayOOTD.printTop()
}
func printBottom() {
todayOOTD.printBottom()
}
mutating func changeClothes(outfit: Outfit) {
self.todayOOTD = outfit
}
}
let dayOutfit = Outfit(top: "맨투맨", bottom: "조거팬츠")
let nightOutfit = Outfit(top: "블라우스", bottom: "슬랙스")
var april01 = DayOOTD(todayOOTD: dayOutfit)
april01.printTop() // 오늘 입은 상의는 맨투맨입니다.
april01.printBottom() // 오늘 입은 하의는 조거팬츠입니다.
april01.changeClothes(outfit: nightOutfit)
april01.printTop() //오늘 입은 상의는 블라우스입니다.
var todayOOTD: OOTD
: todayOOTD 변수가 추상적인 객체 OOTD를 의존changeClothes(outfit: OOTD)
: 이 함수를 통해서 의존성을 주입Outfit
, DayOOTD
는 독립적인 객체
→ 둘 중 하나를 수정한다고 해서 다른 객체를 함께 수정하지 않아도 OK최고에요
객체지향 프로그래밍의 5 원칙: SOLID
시작하기 전에 내가 솔리드 기억한 방법..솔리드→ 싱오리인디: ~노래하는 오리는 아무래도 인디겠지..ㅋ..킼..풉..킼..~
지금부터 SOLID의 5가지에 대해서 알아보겠습니다.
S: SRP(Single Responsibility Principle)
O: OCP(Open-Closed Principle)
L: LSP(Liskov Substitution Principle)
I: ISP(Interface Segregation Principle)
D: DIP(Dependency Inversion Principle)
protocol
)