개발자로써 자주 듣고 접하게되는 추상화의 개념에 대해 간략하게 이해하고 있지만 누군가에게 설명할정도의 이해가 없기에 학습하게 되었습니다.

추상화

추상화 사용 이유

추상화 예제

// 추상화 정의 프로토콜
protocol Animal {
    var name: String { get }
    func move()
}

// 추상화 채택 Dog
struct Dog: Animal {
    var name: String = "dog"
    func move() {
        print("\\(name)가 대지를 달린다.")
    }
}

// 추상화 채택 Bird
struct Bird: Animal {
    var name: String = "bird"
    func move() {
        print("\\(name)가 하늘을 난다.")
    }
}

// 추상화를 사용한 다형성
func moveAnimal(using animal: Animal) {
    animal.move()
}

let dog = Dog()
let bird = Bird()

// 인수를 추상화 Animal로 받는 관계로 Animal을 채택하는 어떠한 객체든 인자로 사용 가능
moveAnimal(using: dog)
moveAnimal(using: bird)
// dog가 대지를 달린다.
// bird가 하늘을 난다.

<aside> ❓

다형성: 동일한 객체에 따라

</aside>

// 추상화 정의 클래스
class Animal {
    
    var name: String
    
    init(name: String) {
        self.name = name
    }
    
    // 추상 메소드드, 자식에서 오버라이딩하여 구현예정
    func makeSound() {
        fatalError("This method should be overridden")
    }
    
}

// 추상화 사용 Dog
class Dog: Animal {
    override func makeSound() { // 추상화로 정의된 클래스의 함수인 makeSound를 사용하여 구체화
        print("\\(name)가 월월한다!")
    }
}

// 추상화 사용 Cat
class Cat: Animal {
    override func makeSound() {
        print("\\(name)가 냐옹한다!")
    }
}

// 추상화 개념의 Animal을 상속받는 클래스는 해당 배열에 삽입 가능
let animals: [Animal] = [Dog(name: "강지"), Cat(name: "냥이")]

for animal in animals {
    animal.makeSound()
}
// 강지 월월한다!
// 냥이 냐옹한다!