객체지향 프로그래밍이란?

DTO, DAO로 보는 객체지향

객체지향의 4대 특징

추상화

// 프로토콜을 사용하여 추상화
// 추상화의 개념을 사용하기위해 구현한 Animal
protocol Animal {
    func makeSound()
}

class Dog: Animal {
    func makeSound() {
        print("멍멍!")
    }
}

class Cat: Animal {
    func makeSound() {
        print("야옹!")
    }
}

let dog: Animal = Dog()
let cat: Animal = Cat()

dog.makeSound() // 멍멍!
cat.makeSound() // 야옹!

캡슐화, 은닉화

// 은닉화된 데이터를 사용하는 함수를 하나의 클래스로 묶어서 캡슐화
class Yoonds {
		// 외부에서 직접 접근하지 못하도록 private 선언하여 은닉화
    private var myScore: Int = 0 
		
		// 저장속성과 묶어 사용하는 캡슐화된 함수
    func increase() {
        myScore += 10
    }
		
		func getMyScore() -> Int {
        return myScore
    }

}

let yoonds = Yoonds()
yoonds.increase() // myScore += 10

// 직접적으로 myScore 속성에 접근하지 않고 private으로 두어
// 함수를 통해 간접적으로 접근한다.

상속성

// 부모 클래스
class Animal {
    func makeSound() {
        print("동물이 소리를 냅니다.")
    }
}

// 자식 클래스
class Dog: Animal {
    // 오버라이드 하여 부모클래스의 함수를 재사용(코드의 재활용)
    override func makeSound() {
        print("멍멍!")
    }
}

// 부모 클래스의 인스턴스 생성
let animal = Animal()
animal.makeSound() // 동물이 소리를 냅니다.

// 자식 클래스의 인스턴스 생성
let dog = Dog()
dog.makeSound() // 멍멍!

다형성