일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- sqoop
- SWIFT
- 데이터베이스 공부
- ObservableObject
- react
- 치지직
- 네이버 부스트캠프
- Apple Developer Academy @ POSTECH
- 애플 디벨로퍼 아카데미
- OS
- Swift 디자인패턴
- 데이터베이스
- Swift 문법
- ObservedObject
- iOS 개발 오류
- 운영체제
- 앱 비교 프로젝트
- useReducer
- apple developer academy 후기
- 네이버 치지직
- 제앱소
- 애플 아카데미 후기
- 숭실대
- 애플 디벨로퍼 아카데미 후기
- 애플 디벨로퍼 아카데미 21주차 회고
- StateObject
- Swift 기능
- swift문법
- global soop
- 소프트웨어분석및설계
- Today
- Total
사과하는 제라스
[Swift 지식] Single Source Of Truth(SSOT)란? 본문
목차
서론
안녕하세요~! 개발자 제라스입니다! 👋🏻🤖👋🏻
제가 최근에 Apple Developer Academy를 하면서 SwiftUI 학습을 하고 있었는데요.
제가 또 이게 처음이다보니 @State, @Binding을 공부하면서 Single Source Of Truth(SSOT)라는 개념을 보게 되었습니다.
이게 또 뭔가!!!
그래서!
이 SSOT가 뭔지 한번 정리해보고자 합니다. 뭔가 이건 정리해둬야 할 중요한 개념이라고 생각을 했거든요ㅎㅎ
그럼 오늘도 한번 시작해보겠습니다.
Single Source Of Truth(SSOT)가 뭔데??
아니 무슨 이렇게 별.다.줄이 많나 싶지만 이건 뭔가 중요해보이는 개념처럼 읽혀요.
저만 그런가요??ㅋㅋㅋ
일단 이거 한국어로 해석하면 단일 진실 공급원입니다.
말이 이해가 어렵죠...??
일단 정의부터 적어보자면,
정보 시스템 설계 및 이론 중 하나로 정보와 스키마를 오직 하나의 출처에서만 생성하거나 편집하도록 하는 방법론입니다.
즉, 어떤 데이터가 있으면 그걸 오직 하나의 저장소에서만 관리하는 방식이라는 겁니다.
그럼 이 개념이 왜 필요한건가?
왜냐하면 데이터가 한 곳에서 만들어지고 수정되는 것이 데이터의 흐름을 관리하고 유지보수할 때 이해하기 편하기 때문입니다.
우리가 어떤 데이터를 여러 곳에 분산해놓고서 이걸 여러 곳에서 다룬다고 합시다.
그럼 우리는 이 데이터가 어디서 오는지 일일이 추적을 해야하기에 그것을 찾아내는 건 무척 귀찮고 힘들죠.
근데, 하나의 저장소를 뽝! 하고 두고 거기서 데이터가 나오고 들어가도록만 해두면 어느 곳에서든 그 저장소에 방문해서
"A 값 줘!", "B값 이거로 저장해줘!"
이런 방식이 가능해집니다.
그리고 생각해보면 어떤 데이터를 한 곳에서만 다뤄야 동기화 같은 걱정도 안해도 되잖아요? 예를 들면 A저장소, B저장소에 각각이 있다고 하면 A에서 변경하도록 요청했는데 B에서 변경이 안 일어나거나 변경 전의 데이터를 내줄 수도 있으면 같은 데이터에 대해 값이 달라지는 문제가 생깁니다.
그럼 이 개념은 왜 공부해요?
일단 SwiftUI를 공부하면서 이 개념은 Property Wrapper 학습 시 중요한 부분이에요.
일단 iOS 17 이전에 주로 쓰던 Property Wrapper들을 적어보자면,
/// SwiftUI에서의 여러가지 속성 래퍼(Property Wrapper)
@State: 값 유형의 속성에 대한 저장소로 사용
@Binding: 두 개의 View 간에 데이터를 전달하고 동기화 시 사용
@ObservedObject: 관찰 가능한 객체를 생성
@EnvironmentObject: 앱의 전역 상태를 나타낼 때 사용
이런 방식으로 속성 래퍼들을 변수 혹은 class, struct 앞에 붙여서 사용하는데 이때 붙이는 이유는 데이터의 연동, 흐름을 이어주거나 제공하기 위해서입니다.
보통은 @State를 붙여둔 데이터와 @Binding을 붙여둔 변수를 갖는 View 간에 의존성을 만드는 과정이 주입니다.
(다만, 이건 용법적인 면에서의 개인 견해이기 때문에 혹시 더 알아보고 싶으시다면 직접 찾아보시면 좋을 것 같습니다.)
즉, Binding으로 받아온 데이터에 변화를 주면 @State 처리되어 있는 데이터도 변화가 생기고 그것을 사용하고 있는 다른 View들에서이 데이터들도 값을 변화시키죠. 그렇기에 데이터가 모두 동일한 값을 갖도록 합니다.
근데... 지금 이렇게 쓰면서 '으엥? 이거 어디서 들어본 거 같긴 한데...?' 했는데 생각해보니 제가 한창 React Native 공부할 때 썼던 Redux도 이 패러다임을 적용한 상태 관리 라이브러리입니다...!!
아 왠지 익숙하더라...🤦🏻♂️🤦🏻♂️🤦🏻♂️
간단히 상태관리 라이브러리인 Redux에 대해서 얘기해보자면 Redux에는 3가지 원칙이 있습니다.
1. Single Source Of Truth(SSOT)
2. Read-Only State
3. Changes from pure functions
참고: https://redux.js.org/understanding/thinking-in-redux/three-principles
Redux도 Store에서 데이터를 갖고 있고 이걸 각 View에서 가져다가 쓰죠.
만약 변경을 해야하는 경우라면 Action을 통해 Reducer를 거쳐서 값이 Update 됩니다.
마무리
아 뭔가 SwiftUI에서 알게 된 SSOT를 공부하다가 갑자기 Redux로 끝난 기분인데..😅😅
이 개념이 오직 스유에서만 쓰는 패러다임이 아니니 개념의 적용 범위를 넓게 봐주시면 좋을 것 같아요.
SSOT라는 개념이 사실 무지 어려운 개념은 아니에요.(겉만 보고 쉽다는 제라스... 겸손해라.)
그렇기 때문에 단순히 SwiftUI 개발을 하면서 이 개념을 아주 깊게 파보거나 Apple에서 바라보는 패러다임을 깊게 이해하려 하지 않는 이상 이정도만 이해하고 넘어가도 좋을 것 같습니다!
그럼 오늘도 끝까지 읽어주셔서 감사드리고 더 좋은 포스팅으로 돌아오겠습니다.👍🏻😃👍🏻
참고
https://onlyfor-me-blog.tistory.com/696
https://ssangq.netlify.app/posts/react-redux
아직 꼬꼬마 개발자입니다.
더 나은 설명이나 코드가 있다면 언제든 환영입니다.
적극적인 조언과 피드백 부탁드립니다!
그럼 오늘도 개발 가득한 하루되세요!
- Xerath -
🤖🤖🤖🤖🤖🤖🤖
'제라스의 iOS 공부 > Swift 지식' 카테고리의 다른 글
[Swift 지식] UITableView Cell의 생명주기(feat.prefetch를 써보자!) (0) | 2024.05.10 |
---|---|
[Swift 지식] @ObservedObject vs @StateObject 이 둘 언제 쓰는데? (feat.Observation) - (24.06.07 업데이트) (0) | 2024.05.05 |
[Swift 지식] @Bindable 딥다이브(였던 것) feat. 사실 Observable 딥다이브... (3) | 2024.04.07 |
[Swift 지식] Swift에서 프로토콜이 클래스를 상속한다고? (1) | 2024.03.31 |
[Swift 지식] removeAll(keepingCapacity: Bool)의 성능 비교 (1) | 2024.03.14 |