Notice
Recent Posts
Recent Comments
Link
투케이2K
69. (TWOK/ALGORITHM) [Ios] 패턴 - KVO (Key Value Observing) 패턴 설명 및 예제 - 프로퍼티의 상태 변경 반응 확인 본문
투케이2K 알고리즘
69. (TWOK/ALGORITHM) [Ios] 패턴 - KVO (Key Value Observing) 패턴 설명 및 예제 - 프로퍼티의 상태 변경 반응 확인
투케이2K 2022. 11. 20. 11:18[환경 설정 및 설명]
언 어 : Ios
설 명 : 패턴 - KVO (Key Value Observing) 패턴 설명 및 예제 - 프로퍼티의 상태 변경 반응 확인
[설 명]
1. KVO 는 다른 객체의 변경사항 (특정 키의 값의 변화) 을 알려주는 코코아 프로그래밍 패턴 입니다
2. KVO 는 모델 객체의 어떤 값이 변경 되었을 경우 이를 UI 및 로직에 반영하기 위해서 컨트롤러는 모델 객체에 Observing 을 도입하여 딜리게이트에 특정 메시지를 보내 작업을 처리합니다
3. KVO 는 메소드나 다른 액션에서 나타나는 것이 아니라 프로퍼티의 상태에 반응합니다
4. KVO 사용 방법 및 이점 :
- Model 과 View 와 같이 분리된 파트 간의 변경사항을 전달하는데 유용함니다
- NSObject 를 상속한 클래스에서만 KVO를 사용할 수 있습니다 (@objc)
[소스 코드]
// MARK: - [KVO 형식 클래스 선언 실시]
class User: NSObject {
// [전역 변수 선언 실시]
let name: String
@objc dynamic var age: Int // [dynamic 반응 속성 위해 선언]
// [클래스 생성자 초기화]
init(name: String, age: Int) {
self.name = name
self.age = age
print("")
print("====================================")
print("[User >> init() :: 클래스 생성자 초기화]")
print("name :: \(self.name)")
print("age :: \(self.age)")
print("====================================")
print("")
}
}
// MARK: - [테스트 메인 함수 정의 실시]
func testMain() {
print("")
print("====================================")
print("[\(self.ACTIVITY_NAME) >> testMain() :: 테스트 함수 시작 실시]")
print("====================================")
print("")
/*
-------------------------------
[요약 설명]
-------------------------------
1. KVO 는 다른 객체의 변경사항 (특정 키의 값의 변화) 을 알려주는 코코아 프로그래밍 패턴 입니다
-------------------------------
2. KVO 는 메소드나 다른 액션에서 나타나는 것이 아니라 프로퍼티의 상태에 반응합니다
-------------------------------
3. NSObject 를 상속한 클래스에서만 KVO 를 사용할 수 있습니다 (@objc)
-------------------------------
*/
// [로직 처리 수행]
DispatchQueue.main.async {
// [클래스 인스턴스 생성 실시]
let user = User(name: "투케이", age: 29)
// [반응 상태 감지를 위한 observe 등록]
let observation = user.observe(\.age , options: [.old, .new]) { (object, change) in
print("")
print("====================================")
print("[\(self.ACTIVITY_NAME) >> testMain() :: observation 데이터 변경 확인]")
print("old name :: \(object.name)")
print("old age :: \(String(describing: change.oldValue!))")
print("new age :: \(String(describing: change.newValue!))")
print("====================================")
print("")
}
// [데이터 변경 수행 실시]
user.age = 30
}
}
반응형
'투케이2K 알고리즘' 카테고리의 다른 글
Comments