yoogail105 / KkokkoSwift

꼬리에 꼬리를 무는 swift 개념 정리
28 stars 0 forks source link

# 객체지향 프로그래밍의 5 원칙: SOLID #43

Open yoogail105 opened 2 years ago

yoogail105 commented 2 years ago

객체지향 프로그래밍의 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)

yoogail105 commented 2 years ago

의존성에 대하여!

Dependency: 의존성

Injection: 주입

DI(Dependency Injection)

의존성 주입의 장점

yoogail105 commented 2 years ago

의존성 주입 예시

변경 전

class Outfit {
    func top() {
        print("맨투맨")
    }

    func bottom() {
        print("조거팬츠")
    }
}

struct Person {
    var todayOOTD: Outfit
    func top() {
        todayOOTD.top()
    }

    func bottom() {
        todayOOTD.bottom()
    }
}

변경 후1: 의존성 주입(init 을 통해 외부에서 객체를 생성 → 내부에 주입)

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() // 오늘 입은 하의는 조거팬츠입니다.

변경 후2: 내부의 객체 → 외부에 넣어서 의존성 주입

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()  //오늘 입은 상의는 블라우스입니다.
yoogail105 commented 2 years ago

🔖 참고

Youngminah commented 2 years ago

최고에요