KVO
와 Notification Center
은 타입 사이의 결합도를 낮출 수 있다
연관관계(Association) vs 의존관계(Dependency)
연관관계
다른 객체의 참조를 가지는 인스턴스 변수를 가지고 있을 때 두 클래스는 연관 관계라고 합니다. 아래 그림은 Phone 클래스가 Button 클래스를 참조하는 연관 관계를 보여줍니다.
(Phone -> Button)
class Phone {
// buttons 프로퍼티의 타입이 Button 클래스
let button: Button
}
class Button {
}
중요) 생성된 인스턴스에 대한 참조를 유지한다는 것이 특징
의존관계
한 클래스가 다른 클래스를 참조하는 관계입니다. 한 클래스의 내부 프로퍼티에 저장하지 않고 사용하는 관계를 의존 관계라고 합니다. 아래 그림은 User 클래스가 Scheduel 클래스를 의존하는 관계를 보여줍니다.
class Schedule {
func date() {
}
}
class User {
func createSchedule() -> Schedule {
Schedule()
}
func useSchedule(schedule: Schedule) {
schedule.date()
}
}
중요) 즉 의존 클래스의 인스턴스 변수를 유지하지 않는다
한 클래스의 메소드가 다른 클래스를 인자로 받아 메소드내에서 사용
한 클래스의 메소드 내에서 다른 클래스를 생성하고 생성된 클래스의 메소드를 사용한다 (메소드 내에서만 사용하고 메소드 반환시 의존 클래스 인스턴스도 함께 사라진다
-> 즉 로컬 변수로만 사용)
프로토콜 내에서 프로퍼티는 이름, 타입, get, set 만 명시 (항상 var로 선언)
클래스 전용 프로토콜의 경우 class
AnyObject
키워드를 프로퍼티에 상속?, 채택시킴
Delegation
클래스 상속과 프로토콜 : 클래스에서 상속과 프로토콜 채택을 동시에 하려면 상속받으려는 클래스를 먼저 명시하고 그 뒤에 채택할 프로토콜 목록을 작성합니다. 반드시 클래스 먼저 명시해야된다!!!
Required
라고 써 있으며 클래스 내에 반드시 메서드를 구현해야 한다
Optional
이라고 써 있으면 클래스 내에 필요하면 메서드를 구현함
아직 많이 부족함을 깨닫고 장기전을 준비하자...
지혜롭고, 계획적으로 준비하자. 너무 다급해하지 말자...