SwiftUI ๋ด๋ถ ์๋ ์๋ฆฌ ์ดํดํ๊ธฐ
SwiftUI๊ฐ ๋ด๋ถ์ ์ผ๋ก ์ด๋ค ์์ ์ ์ํํ๋์ง ์ดํดํ๊ธฐ ์ํด์ ์ฝ๋๋ฅผ ๋ณผ ๋ ์๋ ์ธ ๊ฐ์ง๋ฅผ ์ ์ํด์ผ ํฉ๋๋ค.
- Identity: SwiftUI๊ฐ ์ฑ์ ์์๋ฅผ ์ ๋ฐ์ดํธํ๊ธฐ ์ํด์ ์์๋ฅผ ๋์ผํ๊ฒ, ๋๋ ์๋ก ๋ค๋ฅด๊ฒ ์ธ์ํ๋ ๋ฐฉ๋ฒ
- Lifetime: SwiftUI๊ฐ ์๊ฐ์ ๋ฐ๋ผ ๋ทฐ์ ๋ฐ์ดํฐ์ ์กด์ฌ๋ฅผ ์ถ์ ํ๋ ๋ฐฉ๋ฒ
- Dependencies: SwiftUI๊ฐ ์ธํฐํ์ด์ค๋ฅผ ์ธ์ ์ ๋ฐ์ดํธํ๊ณ , ์ด๋ฅผ ์ดํดํ๋ ๋ฐฉ๋ฒ
View Identity
์๋ ์ฌ์ง์์๋ ํ๋ฉด ์ด๋๋ ํญํ๋ฉด ์ํ๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
์์ด์ฝ์ ์ด์ฒจ์ ๋ง์ถ์ด ๋ณด๋ฉด, ์๋ก ์์ ํ ๋ค๋ฅธ ๋ทฐ๋ก ๋ณด๋์ง ์๋๋ฉด ์์น์ ์์๋ง ๋ค๋ฅผ ๋ฟ ๊ฐ์ ๋ทฐ๋ก ๋ณด๋์ง์ ๋ฐ๋ผ ์ธํฐํ์ด์ค์ ์ํ๋ฅผ ์ ํํ๋ ๋ฐฉ์์ด ๋ฌ๋ผ์ง๋๋ค.
์ด๊ฒ์ด ๋ฐ๋ก View Identity์ ํต์ฌ ๊ฐ๋ ์ ๋๋ค. ๋์ผํ Identity๋ฅผ ๊ณต์ ํ๋ ๋ทฐ๋ ๋์ผํ UI ์์์ ๋ค์ํ ์ํ๋ฅผ ๋ํ๋ด๊ณ , ๋ฐ๋ฉด์ ์๋ก ๋ค๋ฅธ UI ์์๋ฅผ ๋ํ๋ด๋ ๋ทฐ๋ ํญ์ ์๋ก ๋ค๋ฅธ Identity๋ฅผ ๊ฐ์ต๋๋ค.
์ด ๋๊ฐ์ง ์ ํ์ ๋ฐ๋ผ ๋ทฐ๋ฅผ ์๋ณํ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
- Explicit Identity (๋ช ์์ ): ์ฌ์ฉ์ ์ ์ ๋๋ ๋ฐ์ดํฐ ๊ธฐ๋ฐ์ ์๋ณ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- Structural Identity (๊ตฌ์กฐ์ ): ๋ทฐ ๊ณ์ธต ๊ตฌ์กฐ์์ ๋ทฐ์ ์ ํ๊ณผ ์์น์ ๋ฐ๋ผ ๋ทฐ๋ฅผ ๊ตฌ๋ณํฉ๋๋ค.
Explicit Identity
๊ฐ์๋ณด์ด๋ ์ฌ๋ฌ ๊ฐ์ฒด๋ ๋ช ์์ ์ผ๋ก ์ด๋ฆ์ด๋ ์๋ณ์๋ฅผ ํ ๋นํ์ฌ ํด๋น ๊ฐ์ฒด๋ค์ ์ถ์ ํ ์ ์์ต๋๋ค.
UIKit๊ณผ AppKit ์ ์ฒด์ ์ฌ์ฉ๋๋ ํฌ์ธํฐ Identity๊ฐ ๋ช ์์ Identity์ ํ ํํ์ ๋๋ค. UIKit๊ณผ AppKit์ NSView๋ ํด๋์ค์ด๋ฏ๋ก ๊ฐ๊ฐ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๋ํด ๊ณ ์ ํ ํฌ์ธํฐ๋ฅผ ๊ฐ์ต๋๋ค. ๊ฐ๋ณ ๋ทฐ๋ ํฌ์ธํฐ๋ฅผ ํตํด์๋ง ์ฐธ์กฐ๋๋ฉฐ ๋ค๋ฅธ ๋ทฐ๊ฐ ํฌ์ธํฐ๋ฅผ ๊ณต์ ํ๋ ๊ฒฝ์ฐ ์ค์ ๋ก๋ ๋์ผํ ๋ทฐ๋ฅผ ๋ฐ๋ผ๋ณด๊ณ ์์์ ๋ณด์ฅํฉ๋๋ค.
ํ์ง๋ง SwiftUI๋ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค. SwiftUI๋ ๊ฐ ํ์ ์ด๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ๊ตฌ์กฐ์ฒด๋ก ํํ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
SwiftUI๋ ๋ทฐ์ ์๊ตฌ์ ์ธ Identity๋ฅผ ์ํ ์ฐธ์กฐ๊ฐ ์๋ ๋์ ์ ๋ค๋ฅธ ํํ์ ๋ช ์์ Identity๊ฐ ์กด์ฌํฉ๋๋ค. ForEach์ id ์์ฑ๊ฐ์ ํตํด Identity๋ฅผ ์ค์ ํ๊ฑฐ๋, id(:) ๋ชจ๋ํ์ด์ด์ scrollTo(:) ๋ฉ์๋๋ฅผ ํตํด์ ๋ทฐ๋ฅผ ๋ช ์์ ์ผ๋ก ์๋ณํ๊ณ ํน์ ๋ทฐ๋ก ์ด๋ํ๋ผ๊ณ ์๋ฆด ์ ์์ต๋๋ค.
์ด์ฒ๋ผ ๋ชจ๋ ๋ทฐ๋ฅผ ์๋ณํ ํ์ ์์ด ์ฝ๋์ ๋ค๋ฅธ ๊ณณ์์ ์ฐธ์กฐํด์ผ ํ๋ ๋ทฐ๋ง ์๋ณํ๋ฉด ๋๋ ์ฅ์ ์ด ์์ต๋๋ค.
Structural Identity
SwiftUI๋ ๋ทฐ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ์์์ ์ผ๋ก Identity๋ฅผ ์์ฑํ๊ณ , ๋ทฐ์ ์ ํ๊ณผ ์์น์ ๋ฐ๋ผ์ ๋ทฐ๋ฅผ ๊ฒฐ์ ํ๊ณ ์๋ณํฉ๋๋ค. SwiftUI๋ API ์ ์ฒด์์ Structural Identity๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๋ํ์ ์ผ๋ก View ์ฝ๋ ๋ด์์ if๋ฌธ๊ณผ ๊ฐ์ ์กฐ๊ฑด๋ฌธ์์ ์ฌ์ฉํฉ๋๋ค.
ํ์ง๋ง ์ด ๋ฐฉ๋ฒ์ ๋ทฐ์ ์์น๊ฐ ์ ์ ์ผ ๋๋ง ์๋ํ๊ณ ๊ฐ ๋ถ๊ธฐ์ ๋ทฐ๊ฐ ์๋ก ๋ค๋ฅธ Identity๋ฅผ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
if๋ฌธ ์ฝ๋๋ฅผ ์ฐธ/๊ฑฐ์ง ์ ๋ณด๋ฅผ ๊ฐ์ง๋ ํ๋์ ์ ๋ค๋ฆญ ํ์ ์ ๋ทฐ์ธ _ConditionalContent๋ก ๋ณํํฉ๋๋ค. ์ด๋ ViewBuilder ๊ธฐ๋ฐ์ผ๋ก ์ํ๋๋ฉฐ, View ํ๋กํ ์ฝ์์๋ body ํ๋กํผํฐ๋ฅผ ์์์ ์ผ๋ก ViewBuilder๋ก ๋ํํ์ฌ ํ๋์ ๋จ์ผ ๋ทฐ๋ก ๊ตฌ์ฑํฉ๋๋ค.
๋ฐ๋ผ์ ์ด ์ ๋ค๋ฆญ ํ์ ์ ์ฌ์ฉํ์ฌ SwiftUI๋ True์ธ ๋ทฐ๊ฐ ํญ์ AdoptionDirectory์ด๊ณ , False์ธ ๋ทฐ๊ฐ ํญ์ DogList๊ฐ ๋๋๋ก ์์์ ์ผ๋ก Identity๋ฅผ ํ ๋นํฉ๋๋ค.
SwiftUI๋ ์๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ ๋ชจ๋ ์๋ํ์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ธ ๋จ์ผ Identity์ ์ ์งํ๋ฉด์ ์ ์ฐํ๊ฒ ์ธํฐํ์ด์ค๋ฅผ ์ ํํ๋ ๋ฐฉ๋ฒ์ ๊ถ์ฅํ๊ณ ์์ต๋๋ค.
์ด๋ ๋ทฐ์ Lifetime๊ณผ ์ํ๋ฅผ ๋ณด์กดํ๋ ๋ฐ ๋์์ด ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
AnyView ์ฌ์ฉ์ ์ง์ํ ๊ฒ
๋ง์ฝ ๊ฐ ์กฐ๊ฑด ๋ถ๊ธฐ์ ์๋ก ๋ค๋ฅธ View๋ฅผ ๋ฐํํ๋ค๊ณ ๊ฐ์ ํ๋ค๋ฉด, ํจ์์ ๋ฆฌํด ํ์ ์ ํ๋์ผ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ทธ ํ์ ์ ๋ง์ถฐ์ฃผ๊ธฐ ์ํด AnyView๋ก ๋ํํ๊ฒ ๋ ๊ฒ์ ๋๋ค.
ํ์ง๋ง ์ด๋ฌํ ๊ตฌ์กฐ๋ Static type ์ ๋ณด๋ฅผ ์จ๊ฒจ ์ปดํ์ผ๋ฌ๊ฐ ์ ์ ์๊ธฐ ๋๋ฌธ์ ์ค๋ฅ์ ๊ฒฝ๊ณ ๊ฐ ํ์๋์ง ์์ ์ ์์ต๋๋ค. ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๊ณ , ๊ฐ๋ ์ฑ์ด ๋งค์ฐ ๋จ์ด์ง๋๋ค.
๋ฐ๋ผ์ AnyView๋ฅผ ์ ๊ฑฐํ์ฌ ์ฝ๋๋ฅผ ๋จ์ํํ๊ณ , ViewBuilder๋ฅผ ํตํด ๋จ์ผ ๋ทฐ๋ก ๋ํํ์ฌ ์ฝ๋๋ฅผ ์์ ํ ์ ์์ ๊ฒ์ ๋๋ค.
View Lifetime
Identity๊ฐ ๋ทฐ์ ๋ฐ์ดํฐ์ ์๋ช ๊ณผ ์ด๋ป๊ฒ ์ฐ๊ฒฐ๋๋์ง ์์๋ณด๋ฉด์ SwiftUI์ ์๋ ๋ฐฉ์์ ์ดํดํ ์ ์์ต๋๋ค.
- ๋ทฐ์ ๊ฐ์ ์ผ์์ ์ด๋ฏ๋ก Lifetime์ ์์งํด์๋ ์ ๋๋ค.
- ๋ทฐ์ Lifetime์ ์ผ์์ ์ด์ง ์๊ธฐ ๋๋ฌธ์ ์๊ฐ์ด ์ง๋๋ ์ฐ์์ฑ์ ๋ถ์ฌํด์ผ ํ๋ค.
- ๋ทฐ์ Identity๋ ์ ์ด๊ฐ ๊ฐ๋ฅํ๋ฉฐ, ๋ทฐ์ Lifetime์ ๋ช ํํ ํ ์ ์๋ค.
- SwiftUI๋ Identifiable ํ๋กํ ์ฝ์ ์ต๋ํ ํ์ฉํ๋ฏ๋ก ๋ฐ์ดํฐ์ ๋ํ ์์ ์ ์ธ ์๋ณ์๋ฅผ ์ ํํ๋ ๊ฒ์ด ์ค์ํ๋ค.
View Value์ View Identity๋ ๋ค๋ฅด๋ค.
๋ทฐ์ ๊ฐ์ ์ผ์์ ์ธ ๊ฒ์ด๋ฏ๋ก Lifetime์ ์์กดํด์๋ ์ ๋ฉ๋๋ค.
๋ทฐ๋ Lifetime ๋์ ๋ค๋ฅธ ์ํ ๊ฐ์ ๊ฐ์ง ์ ์์ง๋ง ๋์ผํ Identity๋ฅผ ๊ฐ๋ ์ด์ ๋์ผํ ๋ทฐ๋ก ์ธ์ํฉ๋๋ค.
๋ทฐ์ ์๋ช ์ ๋ทฐ์ ์ฐ๊ฒฐ๋ Identity์ ์ง์๊ธฐ๊ฐ์ด๋ค.
๋ทฐ์ Lifetime์ด๋ ๋ทฐ์ Identity๊ฐ ์ง์๋๋ ๊ธฐ๊ฐ์ ์๋ฏธํฉ๋๋ค.
๋ฐ๋ผ์ ๋ทฐ์ Identity ์๋ช ์ ๋ทฐ์ ์๋ช ๊ณผ ์ฐ๊ฒฐ ์ง๋ ๊ฒ์ด SwiftUI๊ฐ ๋ทฐ์ ์ํ๋ฅผ ์ ์งํ๋ ๋ฐฉ๋ฒ์ ์ดํดํ๋ ๊ฒ์ ๋๋ค.
๋ทฐ๊ฐ ์ฒ์ ์์ฑ๋๊ณ ๋ํ๋ ๋ SwiftUI๋ ์์์ Identity๋ฅผ ํตํด ๋ทฐ์ Identity๋ฅผ ํ ๋นํฉ๋๋ค. ์๊ฐ์ด ์ง๋ ์ ๋ฐ์ดํธ ๋์ด ๋ทฐ์ ๋ํ ์๋ก์ด ๊ฐ์ด ์์ฑ๋์ด๋ SwiftUI ๊ด์ ์์๋ ๋์ผํ ๋ทฐ์ ๋๋ค. ๋ทฐ์ Identity๊ฐ ๋ณ๊ฒฝ๋๊ฑฐ๋ ๋ทฐ๊ฐ ์ ๊ฑฐ๋๋ฉด Lifetime์ด ์ข ๋ฃ๋ฉ๋๋ค.
State ์๋ช ๊ณผ View์ ์๋ช ์ ๋์ผํฉ๋๋ค.
์๋ ์์ ์์ SwiftUI๋ ์ฒ์ ์กฐ๊ฑด ๋ถ๊ธฐ์ ์ง์ ํ๋ฉด ์ด๊ธฐ๊ฐ์ ์ฌ์ฉํ์ฌ ์๊ตฌ ์ ์ฅ์์ ์ํ ๊ฐ์ ํ ๋นํฉ๋๋ค.
ํ์ง๋ง ์กฐ๊ฑด ๊ฐ์ด ๋ฐ๋๊ณ ๋ธ๋์น๊ฐ ๋ฐ๋๋ฉด ์ด์ ํด๋นํ๋ ์ ์ฅ์๊ฐ ์๋ก ์์ฑ๋๊ณ ์ด์ ์ ์ ์ฅ์๋ ํ ๋น์ด ํด์ ๋ฉ๋๋ค.
SwiftUI๊ฐ ๋ทฐ๋ฅผ ์ฒ์ ์์ฑํ ๋ ์ด๊ธฐ๊ฐ์ State๋ StateObject์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ์ ์ฅ์์ ํ ๋นํฉ๋๋ค. ๋ทฐ์ Lifetime ๋์ ๋ทฐ๊ฐ ๋ณํ๋๊ณ body๊ฐ ์ฌํ๊ฐ๋์ด๋ ์ด ์ ์ฅ์๋ ์ ์ง๋ฉ๋๋ค.
Identifiable ํ๋กํ ์ฝ
SwiftUI๋ ๋ฐ์ดํฐ์ Identity๋ฅผ ๋ทฐ์ ๋ช ์์ Identity๋ก ์ฌ์ฉํ๋ ๋ช ๊ฐ์ง ๋ฐ์ดํฐ ๊ธฐ๋ฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋๋ฐ, ๋ํ์ ์ธ ์๋ก ForEach๊ฐ ์์ต๋๋ค.
ForEach๋ ์ผ๋ฐ์ ์ผ๋ก ๊ณ ์ ๋ ๋ฒ์ ๋ด์์ Identity๋ฅผ ์์ ์ ์ผ๋ก ๋ณด์ฅํด์ฃผ์ง๋ง, ๋์ ์ธ ์ปฌ๋ ์ ์ ์ํด์๋ ForEach์ id ์์ฑ์ ํตํด ์์์์ ์์ฑ๋ ๋ชจ๋ ๋ทฐ์ Identity๋ฅผ ํ ๋นํด์ผ ํฉ๋๋ค. ForEach์ id ์์ฑ์ ํด์๊ฐ ๊ฐ๋ฅํด์ผ ํฉ๋๋ค.
KeyPath๋ก ๊ฐ๋ฅํ๋, Identifiable ํ๋กํ ์ฝ์ ์ฑํํ์ฌ ๋ฐ์ดํฐ๊ฐ ์์ ์ ์ธ Identity๋ฅผ ์ป์ด์ฌ ์ ์์ต๋๋ค.
Dependency
dependency๋ ๋จ์ํ๊ฒ ๋ทฐ์ ๋ํ ์ ๋ ฅ์ ๋๋ค. dependency๊ฐ ๋ณ๊ฒฝ๋๋ฉด ๋ทฐ์์ ์๋ก์ด body๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.
body๋ ๋ทฐ์ ๋ํ ๊ณ์ธต ๊ตฌ์กฐ(hierarchy)๋ฅผ ๋น๋ํ๋ ์์ญ์ด๊ณ , action์ ๋ทฐ์ dependency๋ฅผ ๋ณ๊ฒฝํ๋ ํธ๋ฆฌ๊ฑฐ์ ๋๋ค.
dependency์ ์ข ๋ฅ์๋ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ต๋๋ค. ์ฌ๋ฌ ๊ฐ์ง ํ๋กํผํฐ ๋ํผ๋ฅผ ์ฌ์ฉํ์ฌ dependency๋ฅผ ํ์ฑํ ์ ์์ต๋๋ค.
- Binding
- Environment
- State
- StateObject
- ObservedObject
- EnvironmentObject
Dependency graph
์ ์ฝ๋๋ฅผ ๋ค์ด์ด๊ทธ๋จ์ผ๋ก ๋ํ๋ด๋ฉด ํธ๋ฆฌ ๊ตฌ์กฐ ํํ๋ก ๋ํ๋ผ ์ ์์ต๋๋ค. ํ์ง๋ง ๋์ผํ ์ํ๋ ๋ค๋ฅธ ๋ฐ์ดํฐ์ ๋ฐ๋ผ ์ฌ๋ฌ ๊ฐ์ง ๋ทฐ๊ฐ ์กด์ฌํ ์ ์์ต๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ์ฌ์ค ๊ทธ๋ํ์ ๊ตฌ์กฐ๋ฅผ ํ์ฑํ๊ณ ์์ต๋๋ค.
๋ทฐ๋ ๊ฐ ํ์ ์ด๋ฏ๋ก SwiftUI๋ ๋ทฐ์ ์ฌ๋ฐ๋ฅธ ํ์ ์งํฉ๋ง ์ ๋ฐ์ดํธํ๊ธฐ ์ํด ๋ทฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๋น๊ตํ ์ ์๊ณ , ์ body๊ฐ ํ์ํ ๋ทฐ๋ง ํจ์จ์ ์ผ๋ก ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค.
Explicit Identity์์์ ๊ณ ๋ ค ์ฌํญ
Lifetime์์ ์ด์ผ๊ธฐํ๋ฏ์ด ๋ทฐ์ ์๋ช ์ ๋ทฐ์ Identity์ ์ง์ ์๊ฐ์ด๋ฉฐ, ์ด๋ ์๋ณ์์ ์์ ์ฑ์ด ๋งค์ฐ ์ค์ํฉ๋๋ค.
Identifier stability
์์ ์ ์ธ ์๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด SwiftUI๊ฐ ๋ทฐ์ ๋ํ ์ ์ฅ์๋ฅผ ์ง์์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด Lifetime์ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ์ํ์ ์์ค์ ๋ฐฉ์งํ ์ ์๊ณ , ์ ์ฅ์๋ฅผ ์๋ก ์์ฑํ๊ฑฐ๋ ๊ทธ๋ํ๋ฅผ ์ ๋ฐ์ดํธํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ๋ ํฅ์๋ฉ๋๋ค.
์๋ ์ฝ๋์์ Identifier๋ก UUID๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋ฐฐ์ด์ ์ธ๋ฑ์ค id์ธ indices๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
์ด๋ ์์ ํ์ง ์์ต๋๋ค. UUID๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ์๋ก์ด ID๋ฅผ ์ป๊ฒ ๋๊ณ , indices๋ฅผ ์ฌ์ฉํ๋ฉด ๋ง์ง๋ง ์์น์ ์ธ๋ฑ์ค์ ๊ฐ์ฒด๊ฐ ์ฝ์ ๋๊ธฐ ๋๋ฌธ์ ID๊ฐ ๋ณ๊ฒฝ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
databaseID ๋ฑ๊ณผ ๊ฐ์ด ๊ณ ์ ํ ๊ฐ์ ID๋ก ์ฌ์ฉํ์ฌ ์์ ํ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
Identifier Uniqueness
์๋ ์ฝ๋์์ name์ ID๋ก ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์ด๋ฆ์ ๊ณ ์ ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค.
์๋ฆฌ์ผ ๋๋ฒ์ ๊ฐ์ ๊ณ ์ ํ ID๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๋์ ์ ๋๋ฉ์ด์ ๊ณผ ์ฑ๋ฅ์ด ๋ณด์ฅ๋ฉ๋๋ค. SwiftUI์์ ๋ชจ๋ Identifier๋ ๋ณ๊ฒฝ๋์ง ์๊ณ ์์ ์ ์ด๋ฉฐ ๊ณ ์ ํ ๊ฐ์ ๊ฐ์ ธ์ผ ํฉ๋๋ค.
Structural Identity์์์ ๊ณ ๋ ค ์ฌํญ
์๋ ์ฝ๋์์ ๋ธ๋์น๋ฅผ ํตํด ๋ทฐ๊ฐ ๋ถ๊ธฐ๋์ด ์์ต๋๋ค. ์ฆ ๊ฐ๊ฐ์ ๋ทฐ๋ ์๋ก ๋ค๋ฅธ ๋ทฐ๋ผ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
๋ถ๊ธฐ ์กฐ๊ฑด์ modifier์ ์๊ธฐ ๋๋ฌธ์ modifier ๋ด๋ถ์ ์กฐ๊ฑด๋ฌธ์ ์ฎ๊ฒจ ์๋ก์ด ๋ทฐ Identity๊ฐ ์๊ธฐ๋ ๋ฌธ์ ๋ฅผ ํผํ ์ ์์ต๋๋ค.
๋ธ๋์น๋ฅผ ์ถ๊ฐํ ๋๋ ์ฌ๋ฌ ๋ทฐ๋ฅผ ํํํ๋์ง, ๋จ์ผ ๋ทฐ์ ๋ ๊ฐ์ง ์ํ๋ฅผ ํํํ๋์ง ๊ณ ๋ คํด์ผ ํ ํ์๊ฐ ์์ต๋๋ค.
๋ธ๋์น๋ ํ๋ฅญํ๋ฉฐ ์กด์ฌํ๋ ๋ฐ ์ด์ ๊ฐ ์์ง๋ง, ๋ถํ์ํ๊ฒ ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ ์ ํ, ์ ๋๋ฉ์ด์ ๋ฌธ์ ๋ฑ์ด ๋ฐ์ํ ์ ์๊ณ , ์ํ์ ์์ค๊น์ง ๋ฐ์ํ ์ ์์ต๋๋ค.
WWDC
https://developer.apple.com/videos/play/wwdc2021/10022/
Demystify SwiftUI - WWDC21 - Videos - Apple Developer
Peek behind the curtain into the core tenets of SwiftUI philosophy: Identity, Lifetime, and Dependencies. Find out about common patterns,...
developer.apple.com