3월 14일 (목)
Iteration 3 中 1일 차
Enum 데이터 UserDefaults에 접근하기
사용자의 알레르기 정보를 받아서 Allergy 배열을 UserDefaults에 저장하고자 했다.
그래서 UserDefaults에 알러지 데이터를 담고자
아래와 같이 코드를 작성했는데..
오류가 발생했다.
기억을 더듬어보니 UserDefaults에는 swift 기본 타입인
Bool , Int, Double, Float, String, URL 등...만 접근할 수 있다.
그런데 나는 Enum인 Allergy를 담으려 했던 것🚨
UserDefaults에 직접 만든 구조체나 열거형을 담을 수는 없을까?
여기서 DTO(Data Transfer Object)라는 개념을 학습했다.
DTO는 데이터 전송 객체로,
데이터를 담아 다른 곳으로 보내기 위해 사용하는 일종의 컨테이너라고 할 수 있다.
예를 들어,
1. 네트워크를 통해 서버에서 클라이언트로 데이터를 전송할 때
2. 앱 (화면-> 화면), (서버 -> 화면) 등에서 데이터를 주고받을 때
사용될 수 있다고 한다.
DTO는 myAllergies 프로퍼티에서 직접 정의한 열거형 Allergy의 배열을
JSON 형태로 인코딩하고 디코딩하는 과정에 사용했다.
인코딩 과정에서는 Allergy 객체들의 배열을 Data 객체로 변환한다.
JSON으로 변환하는 과정에서, 이 객체들은 DTO 역할을 수행한다.
디코딩 과정에서는 UserDefaults에서 Data 객체를 검색하고 이를 다시 Allergy 객체들의 배열로 변환한다.
이 과정 역시, DTO를 사용한다. 이 또한 JSON 형태로 저장된 데이터를 Allergy 객체들로 변환한다.
이렇게해서 사용자 생성 객체를 UserDefaults에 getter와 setter를 시킬 수 있다는 것!!!
오늘 한 일
오늘은 앱에서 이용되는 UserDefaults 데이터 타입을 정의하고
싱글톤 패턴을 적용시킨 클래스 UserDefaultsManager.swift를 만들었다.
그리고 알러지 String을 가공하는 함수를 작성해서
내가 원하는 문자열을 검출해서 이를 알러지 타입으로 빼
배열로 바꾸는 과정을 수행했다.
고민되는 점
알러지 문자열을 가공하는 함수를 작성했다.
extension으로 작성해야할까, 유틸리티 클래스 또는 구조체로 작성해야하는지 고민을 했다.
extension이 뭔가 더 불러오기 적합하다 느껴져서 이 방법을 선택했지만,
아직 적절한 선택의 근거가 없어서 망설여진다.
느낀점
DTO라는 개념을 학습했다
새로운 기술을 구현하고자 하면서 다양한 용어와 개념들을 접한다.
이 과정에서 내가 원하는 기능을 구현할 때는 뿌듯함을 느낀다.
얼마전 2차 Recap 수행 후, 피드백을 보면서
'라우터'라는 용어를 보고 "이게 뭐지?" 했다.
아직 내가 구현하는 기술의 용어적인 부분 마저 익히지 못했다니
부끄럽게 느껴졌다.
'개발일지 > 알러지키미' 카테고리의 다른 글
[개발일지/알러지키미] #8. rootViewController 교체 (0) | 2024.03.20 |
---|---|
[개발일지/알러지키미] #7. 레이아웃 이슈와 문자열 예외 처리 (0) | 2024.03.18 |
[개발일지/알러지키미] #5. CollectionView로 Tag List 구현하기 (1) | 2024.03.14 |
[개발일지/알러지키미] #4. 절대 다시 잊지못할 .gitignore 처리하기 (0) | 2024.03.13 |
[개발일지/알러지키미] #3. 네이버 지도 API 추가하기 (2) | 2024.03.11 |