티스토리 뷰
HealthKit에서는 데이터를 처리할 때 각각 용도에 맞게 정의된 타입으로 처리하는데요.
이에 대해 정리해보았습니다.
DataTypes (표현 방식 분류)
건강 데이터의 표현 방식을 식별하는데 사용됩니다.
let bloodType = HKObjectType.characteristicType(forIdentifier: .bloodType)
let caloriesConsumed = HKObjectType.quantityType(forIdentifier: .dietaryEnergyConsumed)
let sleepAnalysis = HKObjectType.categoryType(forIdentifier: .sleepAnalysis)
이처럼 각 데이터를 표현하기 적절한 type과 구체적인 데이터 종류인 Identifier를 통해 쿼리를 작성할 수 있습니다.
HKObjectType
HK~Type들의 슈퍼클래스
- Property: uuid, sourceRevision, device, metadata…
모든 HKDataType의 슈퍼클래스 이므로 모든 HealthKit 데이터는 이 type의 프로퍼티를 갖습니다.
즉 uuid, source, device, metadata 등이 모두 포함되어 있습니다.
HKSampleType
HKSample들의 추상클래스
- Property: startDate, endDate, 알 수 없는 기간 여부(hasUndeterminedDuration) 등
HealthKit에서 측정된 각각의 데이터를 Sample이라고 부릅니다.
각각의 데이터는 startDate, endDate등 날짜 정보를 갖습니다.
HKQuantityType
숫자값으로 저장 가능한 데이터
- 이 타입 객체는 quantity값을 가짐
예를 들어 걸음수와 같이 정량적인 데이터는 HKQuantityType으로 정의되고 quantity라는 프로퍼티로 값에 접근할 수 있습니다.
HKCategoryType
유한한 카테고리로 나눌 수 있는 데이터
- 이 타입 객체는 value값을 가짐
생리 주기같은 기간 정보는 측정가능한 값이 아닌 분류 형태로 저장됩니다.
value 프로퍼티는 각 기간의 종류를 나타내는 enum의 rawValue 값입니다.
HKWorkoutType
물리적 활동을 표현하는 데이터
- 이 타입 객체는 HKQuntity, HKWorkoutActivityType, HKWorkoutEvent 등을 가짐
운동 정보 같은 경우 기본적으로 HKQuntity 정보와 함께 HKWorkoutActivityType(운동 종류), HKWorkoutEvent(이벤트 시작, 일시정지 등등..)에 필요한 정보 등을 갖습니다.
정리
데이터(Sample)는 ObjectType + SampleType + (QuntityType or CategoryType or WorkoutType) 속성으로 구성되며, 각 Type에 대한 프로퍼티를 갖습니다.
또한 Quntity/Category, Workout은 명확한 상속관계가 있지 않아, WorkoutType안에서 QuntityType를 가질 수 있습니다.
Samples (실제 데이터)
DataType은 실제 프로퍼티를 갖는 것은 아니고 단순 식별용으로, 쿼리를 작성할 때 사용됩니다.
실제 데이터는 Sample을 이용해서 접근할 수 있습니다.
쿼리를 통해 조회한 데이터는 Sample 형태로 받아와지고, 각 프로퍼티에 접근할 수 있습니다.
HKQuantitySample
- HKQuntityType: HKQuntityType
- quantity: HKQuantity
- count: Int (quntity 수)
- startDate: Date
- endDate: Date
HKCategorySample
- HKCategoryType: HKCateotryType
- value: Int (enum rawValue)
- startDate: Date
- endDate: Date
더보기
그 외
HKDiscreteQuantitySample
이산형 데이터
- averageQuantity: HKQuantity
- maximumQuantity: HKQuantity
- minimumQuantity: HKQuantity
- mostRecentQuantity: HKQuantity
- mostRecentQuantityDateInterval: DateInterval
HKCumulativeQuantitySample
누적 수량
- sumQuantity: HKQuantity
HKCorrelation
상관 데이터
- correlationType: HKCorrelationType
- objects: Set<HKSample>
Util
HKQuntity
- Unit: HKUnit
- value: double
HKUnit
- 인치, 센치 등 quantity의 단위를 나타냅니다.
Identifier (건강 데이터 종류)
실제로 HealthKit이 수집하고 있는 구체적인 데이터 종류입니다.
종류가 많아 예시만 들겠습니다.
HKQuantityTypeIdentifier
- heartRate: 맥박수
- stepCount: 걸음 수
- height: 키
HKCategoryTypeIdentifier
- sleepAnalysis: 수면 정보
- mindfulSession: 명상 정보
- menstrualFlow: 생리 주기
사용
let heartRate = HKObjectType.quantityType(forIdentifier: .heartRate)
let sleepAnalysis = HKObjectType.categoryType(forIdentifier: .sleepAnalysis)
위에서 본 것 같이 HKObjectType에서 해당하는 메소드를 선택하고 forIdentifier에 해당 식별자를 적어주면 됩니다.
마치며
대략적으로 설명해보자면
Input: Identifier+Type --Query--> Output: Sample
형태입니다.
전체적인 구조는 이정도이고 데이터 종류나 형은 훨씬 많아서 필요할 때마다 찾아서 구현하려고합니다.
감사합니다!
ref.
공식문서
'iOS' 카테고리의 다른 글
[iOS] XCTest 에러: Cannot find type 'AnyViewModel' in scope (0) | 2023.04.06 |
---|---|
[iOS] LaunchScreen 로고 비율 깨짐 문제 (0) | 2023.03.29 |
[iOS] HealthKit으로 수면데이터 가져오기 (0) | 2023.03.29 |
[iOS] Build input file cannot be found: '/file path'. Did you forget to declare this file as an output of a script phase or custom build rule which produces it? 에러 (1) | 2023.03.28 |
[iOS] iOS에 CSS 방식 적용하기 - FlexLayout (2) | 2022.12.09 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- GetX
- Swift Concurrency
- Architecture Pattern
- programmers
- MVI
- TestCode
- 리액티브 프로그래밍
- Flutter
- SWM
- 소프트웨어마에스트로
- coordinator pattern
- ios
- Bloking/Non-bloking
- reactive programming
- MVC
- DocC
- RX
- healthkit
- swift
- Flux
- SwiftUI
- notion
- 코디네이터 패턴
- MVVM
- combine
- 비동기/동기
- 프로그래머스
- design pattern
- 아키텍쳐 패턴
- 노션
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함