๊ณต์๋ฌธ์
EnvironmentObject
A Property wrapper type of an observable object that a parent or ancestor view supplies.
→ ๋ถ๋ชจ ํน์ ์กฐ์ ๋ทฐ๊ฐ ์ ๊ณตํ๋ observable object์ propery wrapper ํ์
OverView
An environment object invalidates the current view whenever the observable object that conforms to Observable Object changes.
→ environment object๋ observable object์ ๋ณํ๋ฅผ ๊ฐ์งํ์ฌ ํ์ฌ ๋ทฐ๋ฅผ ๋ฌดํจํํฉ๋๋ค.
(์ด ๋ง์ ํ์ฌ ๋ทฐ์ ๋ณํ๋ฅผ ์
๋ฐ์ดํธํด์ค๋ค๋ ์๋ฏธ ๊ฐ์์.)
If you declare a property as an environment object, be sure to set a corresponding model object on an ancestor view by calling its environmentObject( :) modifier.
→ ๋ง์ฝ ๋น์ ์ด environment object๋ฅผ ํ๋กํผํฐ๋ก ์ ์ธํ๋ค๋ฉด, environmentObject( :) ๋ชจ๋ํ์ด์ด๋ฅผ ํธ์ถํด์ ์กฐ์ ๋ทฐ(์์ ๋ทฐ)์์ ํด๋น ๊ฐ์ฒด๋ฅผ ์ค์ ํด์ผํฉ๋๋ค.
(environmentObject( :) - https://developer.apple.com/documentation/swiftui/view/environmentobject(_:))
Note
If your observable object conforms to the Observable protocol, use Environment instead of Environment Object and set the model object in an ancestor view by calling its environmnet( :) or environment( : : ) modifier.
→ ๋ง์ฝ ๋น์ ์ observable object๊ฐ Observable ํ๋กํ ์ฝ์ ์ค์ํ๊ณ ์๋ค๋ฉด, Environment Object ๋์ Environment๋ฅผ ์ฌ์ฉํ๊ณ , environment( :) ํน์ environment(: :) ๋ชจ๋ํ์ด์ด๋ฅผ ํธ์ถํด์ ์กฐ์ ๋ทฐ(์์ ๋ทฐ)์์ ๋ชจ๋ธ ๊ฐ์ฒด๋ฅผ ์ค์ ํฉ๋๋ค.
์ ๋ด์ฉ์ Swift ๊ณต์๋ฌธ์์ ๋์์๋ ๋ด์ฉ์ ๋๋ค. (๋ฒ์ญ์ด ์กฐ๊ธ ์ด์ํ ์ ์์ด์. ๐)
์ ๋ฆฌ
๊ทธ๋์ EnvironmentObject์ด ์ด๋ค ๋
์์ธ์ง ๋ค์ ํ ๋ฒ ์ ๋ฆฌํด๋ณด์๋ฉด!
์ฑ์์ ๋ค์ํ ๋ทฐ์์ ๊ณต์ ๋์ด์ผํ๋ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ์ EnvironmentObject๋ผ๋ property wrapper๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
(์ ๋ ์ด์ ์ ์ง๋ ์ฑ์ ๊ตฌํํ๋ฉด์ ํ์ฌ ์์น์ ๋ํ ์ ๋ณด๋ฅผ ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฉํ๊ณ ์์ด EnvironmentOjbect๋ฅผ ํ์ฉํ์์ด์.)
๋ณดํต SwiftUI์์ ํ๋์ ๋ทฐ์์ ๋ค๋ฅธ ๋ทฐ๋ก ๋์ด๊ฐ ๋, ๊ฐ ์ ๋ฌ ํน์ ๋ฐ์ธ๋ฉ์ ํตํด์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํด์ ์ฌ์ฉํฉ๋๋ค.
์ฌ๋ฌ ๋ทฐ์์ ํด๋น ๋ฐ์ดํฐ๊ฐ ํ์ํด์ ์ ๋ฌ ์ ๋ฌ ์ ๋ฌ.. ํ๋ค๋ณด๋ฉด ์ฝ๋๊ฐ ์กฐ๊ธ ๋ณต์กํด์ง๊ธฐ๋ ํ๊ณ , ๊ฐ๋
์ฑ์ด ๋จ์ด์ง๋ค๊ณ ์๊ฐํด์.
์ด๋ฐ ๊ฒฝ์ฐ! EnvironmentObject๋ฅผ ์ฌ์ฉํ๋ฉด, ๋ฐ์ดํฐ๋ฅผ ๋งค๋ฒ ๋ช
์์ ์ผ๋ก ์ ๋ฌํ ํ์ ์์ด, ์์ ๋ทฐ์์ ํ ๋ฒ๋ง! @EnvironmentObject๋ฅผ ํตํด์ ๊ฐ์ฒด๋ฅผ ์ฃผ์
ํ๋ฉด, ํ์ ๋ทฐ์์ ์ ๊ทผ์ด ๊ฐ๋ฅํฉ๋๋ค. ์ ์ญ์ ์ผ๋ก ๋ฐ์ดํฐ ๊ณต์ ๊ฐ ๊ฐ๋ฅํฉ๋๋ค! (๋ณ๋์ ์ ๋ฌ ๊ณผ์ X)
์ด๋ ๊ฒ EnvironmentObject๋ ๋ฐ์ดํฐ๋ฅผ ์ค์์์ ๊ด๋ฆฌํ๋ฉด์, ๋์ผํ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ๋ทฐ๋ค์ ์ฌ์ฌ์ฉํ๊ธฐ๋ ์ฉ์ดํด์ง๋๋ค.
"์.. ๊ทธ๋ฌ๋ฉด.. ๊ทธ๋ฅ EnvironmentObject๋ฅผ ๋ค ์ฌ์ฉํ๋ฉด ๋๋๊ฑฐ ์๋๊ฐ? ๋๋ฌด ํธ๋ฆฌํ๋ฐ???"๋ผ๋ ์๊ฐ์ด ๋ค ์ ์์ํ
๋ฐ์!
๋ ๋ค๋ฅธ ์ธก๋ฉด์์ ํ ๋ฒ ์์๋ณด๋ ค๊ณ ํฉ๋๋ค!
(์๋ ์ฅ์ ์ด ์์ผ๋ฉด, ๋จ์ ๋ ์๊ธฐ ๋ง๋ จ์
๋๋ค..ใ
ใ
๊ทธ๋ฌ๋๊น ์ํฉ์ ๋ง๊ฒ ๊ฐ๋ฐ์๊ฐ ํ๋จํด์ ๊ฐ๋ฐํด์ผํ๋ ๊ฒ ๊ฐ์์.)
์ฐ์ EnvironmentObject๋ ๋ฐ์ดํฐ๊ฐ ์ด๋์ ๋ณ๊ฒฝ๋๋์ง, ์ด๋ค ๋ทฐ์์ ์ฌ์ฉ๋๋์ง ์ถ์ ํ๋๋ฐ ์ด๋ ค์์ด ์์ต๋๋ค.
๊ทธ๋์ ์์ ํ๋ก์ ํธ์์๋ ๊ด์ฐฎ์์ง๋ชฐ๋ผ๋, ํ๋ก์ ํธ๊ฐ ์ปค์ง๊ณ ๋ณต์กํด์ง๋ฉด ๋ฐ์ดํฐ ํ๋ฆ์ ๊ฐ๋ฐ์๊ฐ ํ์
ํ๋๋ฐ ํ๋ค์ด์ง ์ ์์ด์.
๋ ๋ฒ์งธ๋ก๋ ์์กด์ฑ ๋ฌธ์ ์
๋๋ค. ์์ ๋ทฐ์์ ํด๋น ๊ฐ์ฒด๋ฅผ ์ฃผ์
ํ์ง ์์ผ๋ฉด ๋ฐํ์์๋ฌ๊ฐ ๋ฐ์ํ ์ ์์ด์. ๋ทฐ๊ฐ ๋
๋ฆฝ์ ์ผ๋ก ๋์ํ ์ ์์ด์ง๋๋ค. ๊ทธ๋์ ๊ฐ์ฒด๊ฐ ๋๋ฝ๋๋ฉด ์ฑ์ด ํฐ์ง๋ ํฌ๋์๋ ์ ๋๋ก ๋์ํ์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฑ๊ธํค ํจํด์ ์ฅ๋จ์ ์ฒ๋ผ @EnvironmentObject๋ ์ ์ญ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์ ๊ธฐ์ ๋จ์ฉํ๊ฒ ๋๋ค๋ฉด,
์ฑ์ ์ํ ๊ด๋ฆฌ๊ฐ ์ด๋ ค์์ง ์ ์์ต๋๋ค.
๋ง๋ฌด๋ฆฌ
EnvironmentObject๋ SwiftUI์์ ์ํ๋ฅผ ์ฝ๊ฒ ๊ณต์ ํ๊ณ , ๋ทฐ ์ฌ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ํธ๋ฆฌํ ๋ฐฉ๋ฒ์
๋๋ค.
๊ทธ๋ฌ๋ ๋จ์ฉํ ๊ฒฝ์ฐ ์ฝ๋ ๋ณต์ก๋๊ฐ ์ฆ๊ฐํ ์ ์๊ณ , ์ํ ํ๋ฆ์ ์ถ์ ํ๊ธฐ ์ด๋ ค์์ง ์ ์์ต๋๋ค.
๋ํ, ๋ทฐ ๊ฐ์ ์์กด์ฑ์ด ๋์์ง ์ ์์ต๋๋ค.
๊ทธ๋์ ์ฌ์ฉํ ๋์๋ ์ ์คํ๊ฒ ์ฌ์ฉํด์ผํ๋ฉฐ, ์ ์ญ ์ํ๋ฅผ ๊ด๋ฆฌํ ๋ ํ์ํ ๋ฐ์ดํฐ๋ง @EnvironmentObject๋ก ์ ๋ฌํ๊ณ ,
๊ทธ ์ธ์๋ @StateObject, @Binding, @ObservedObject ๋ฑ์ผ๋ก ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ข์ต๋๋ค.โบ๏ธ