개발자로써 자주 듣고 접하게되는 추상화의 개념에 대해 간략하게 이해하고 있지만 누군가에게 설명할정도의 이해가 없기에 학습하게 되었습니다.
간단한 개념
으로 변환프로토콜
또는 클래스의 상속
개념을 정의하여 추상화필수적
인터페이스(프로토콜)를 공개하여 가독성
증대재사용성
향상확장성
증가// 추상화 정의 프로토콜
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()
}
// 강지 월월한다!
// 냥이 냐옹한다!