๋ค์ด๊ฐ๋ฉฐ
SwiftUIํ์ SwiftUI๋ฅผ ์ค๊ณํ ๋ ๋ช
ํํ๊ฒ ์ ์๋ ์์น์ ๋ฐํ์ผ๋ก ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ค๊ณ ๋
ธ๋ ฅํ๋๋ฐ, ๊ทธ ์์น ์ค ํ๋์ธ โProgressive Disclosureโ ์ ๋ํด์ ๋ค๋ฃจ๋๋ก ํ๊ฒ ์ต๋๋ค.
์ด๋ฒ ์ธ์
์์๋ SwiftUIํ์ ์ค๊ณ ๊ณผ์ ์ด ์ด๋ป๊ฒ ์งํ๋๋์ง ๋ณด์ฌ์ฃผ๊ณ โProgressive Disclosureโ์ ๊ดํด ๋ฐฐ์ด ๊ฑธ ๊ณต์ ํฉ๋๋ค. ๋ค์์ ์ฌ์ฌ์ฉ ์์๋ ์ถ์ํ ์์
์ ํ ์์ ์๋ก์ด ๋๊ตฌ๋ก ํ์ฉํ ์ ์๊ฒ ๋ง์ด์ฃต.
Progressive Disclosure
Progressive Disclosure๋ API ์ค๊ณ์์๋ง ์ฌ์ฉํ๋ ์ฉ์ด๊ฐ ์๋๋ผ๊ณ ํด์. ์ผ๋ฐ์ ์ธ macOS UI์์๋ ๋ณผ ์ ์๋ ๊ฐ๋
์
๋๋ค.
์๋ฅผ ๋ค์ด์, macOS์ ์๋ ์ ์ฅํ๊ธฐ ์ฐฝ์ ๋ณผ๊ฒ์.
์ฒ์ ์ ์ฅํ๊ธฐ ์ฐฝ์ด ๋ํ๋ ๋๋ ๊ธฐ๋ณธ ์ ์ฅ ์์น๊ฐ ์ค์ ๋์ด ์์ต๋๋ค.
์ฐฝ์ ๋๋กญ๋ค์ด ๋ฉ๋ด์๋ ์ฃผ๋ก ์ฌ์ฉํ๋ ์์น๊ฐ ์์ด์ ์ ํ ๊ฐ๋ฅ์ฑ์ด ํฐ ์์น์ ์ฝ๊ฒ ์ ๊ทผ์ด ๊ฐ๋ฅํฉ๋๋ค.
์ํ๋ ๊ฒฝ๋ก๋ฅผ ์ฐพ๊ธฐ ์ํด์ ํ์ผ ์์คํ
์ ๊ฒ์ํ๋ ค๊ณ ์ฐฝ์ ๋ ํ๋ํ๋ฉด ์์ UI๊ฐ ๋ํ๋ฉ๋๋ค.
ํ์ํ ๋๋ง๋ค ๋จ๊ณ์ ์ผ๋ก ๋ ๋ณต์กํ UI๊ฐ ๋๋ฌ๋๋ ๊ฑธ ๋ณผ ์ ์์ด์.
์ด๋ฐ ๊ฒฝํ์ API์์๋ ์ ๊ณตํ๊ณ ์ ํด์. ๋ฉ์ง UI ๊ฒฝํ์ ์ฝ๋์์ ์ ๊ณตํ๋ ค๋ฉด API๋ฅผ ์ฌ์ฉํ๋ ๋๋์ด ์ข์์ผ ํฉ๋๋ค.
๊ฐ๋ฐ์๋ค์ ์ฝ๋๋ฅผ โDeclaration siteโ์ ์
์ฅ์์ ์ฝ๋๋ฅผ ๋ฐ๋ผ๋ด์. ํ์ง๋ง ์ฝ๋ ์ฌ์ฉ์ ๋๋์ ์ข๊ฒ ํ๋ ค๋ฉด ๋ค๋ฅธ ๊ด์ ์์ ๋ด์ผ ํฉ๋๋ค.
์ฝ๋๊ฐ ์ค์ ๋ก ์ฌ์ฉ๋๋ ๊ณณ, โCall Siteโ์์ ๋ด์ผ ํฉ๋๋ค.
API ์ค๊ณ์์๋ Use case์ ๋ณต์ก๋์ ๋ฐ๋ผ Call Site์ ๋ณต์ก๋๊ฐ ์ฆ๊ฐํ๋ฉฐ โProgressive Disclosureโ๋ฅผ ์ ์ฉํฉ๋๋ค.
์ด๋ ๊ฐ๋ฐ์๋ค์๊ฒ ํฐ ์ด์ ์ ์ค์!
โข
์ฒซ ๋น๋์ ์คํ์ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์ต์ํํ์ฌ API๋ฅผ ๋น ๋ฅด๊ฒ ์ฌ์ฉํ ์ ์์ด์.
โข
learning curve๊ฐ ๋ฎ์์ ์ฝ๋์ ์ฝ๊ฒ ์ต์ํด์ง ์ ์์ด์.
โข
ํผ๋๋ฐฑ ์ฃผ๊ธฐ๊ฐ ๊น๋ํด์ง๋๋ค. Progressive Disclosure๋ฅผ ์ฑํํ๋ API๋ ๊ฐ ๋จ๊ณ์ ๋ง๋ค ๊ฑธ ๋ณด๊ณ ํ ๋ถ๋ถ์ฉ ์ถ๊ฐ๊ฐ ๊ฐ๋ฅํด์ ธ์.
1.
Consider common use cases : ๊ธฐ๋ฅ์ Progressive disclosureํ๊ธฐ ์ํด ๋จ์ํ ์ผ์ด์ค์ ํํ ํ์
2.
Provide intelligent defaults : ํ์ํ ๋๋ง ์ผ๋ฐ์ ์ธ ์ฌ๋ก๋ฅผ ๊ตฌ์ฒดํ
3.
Optimize the call site : call site์ ๋ชจ๋ ๊ธ์์ ๋ชฉ์ ์ ๋ถ์ฌ
4.
Compose, donโt enumerate : ์ด๊ฑฐํ๋ ๋์ ๊ฐ ์กฐ๊ฐ์ ๊ตฌ์ฑ
Consider common use cases
Consider common use cases์ ์๋ฅผ ๋ณผ๊ฒ์. SwiftUI์ Label์ด ์ด ๋ถ๋ถ์ ์ ๋ด๊ณ ์์ด์.
๋ฒํผ์ ๋ง๋ค๋ฉด ์ฐ๋ฆฌ๋ ๋ฒํผ์ ๋ ์ด๋ธ์ ๋ง๋ค๋ผ๋ ์๊ตฌ๋ฅผ ๋ฐ์ต๋๋ค. ๋ณดํต์ ๋ฒํผ์ ํ
์คํธ๋ฅผ ํ๋จ์ ์ด๋ฏธ์ง์ฒ๋ผ SwiftUI๋ก ์ฝ๊ฒ ์์ฑํ ์๊ฐ ์์ฃ .
ํ์ง๋ง ๋ฒํผ์ ์ปค์คํ
ํํ๊ณ ์ถ๋ค๋ฉด SwiftUI์ ๋ค๋ฅธ override ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ๋ ์ด๋ธ ํํ์ ์์์ ๋ทฐ๋ก ๋ํ๋ผ ์ ์์ด์. ๊ทธ ๋๋ ๊ฐ๋จํ ์ปจํธ๋กค์๋ ๋ณต์กํ ๊ธฐ๋ฅ์ ๋ฃ์ ์ ์๊ฒ ๋์ฃ .
๋๋ถ๋ถ(99%)์ ๊ฐ๋จํ ๋ฒ์ ๋ง ํ์ํ๊ธด ํฉ๋๋ค.
Provide intelligent defaults
Common use case ์ฌ๋ก๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ๋ง๋ค๊ธฐ ์ํด ๋ช
์์ ์ผ๋ก ๊ตฌ์ฒดํํ์ง ์๋ Intelligent defaults๋ฅผ ์ ๊ณตํฉ๋๋ค. SwiftUI ์ ์ฒด์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ API๋ฅผ ๋ฐ๊ฒฌํ ์ ์์ ๊ฒ๋๋ค.
ํ
์คํธ!
Text ๋ ๊ธฐ๋ณธ๊ฐ์ ๋ํ๋ด๊ธฐ์ ์ข์ ์์์ฃ . ์ด ์ฝ๋๋ค์ ์์ฑํ๋ ๋์ ๋ฐ๋ก ์ง์ ํด์ผ ํ๋ ๊ฒ๋ค์ ๋ํด์ ๋ฐ๋ก ์๊ฐํ ํ์๋ ์์์ ๊ฒ๋๋ค
SwiftUI๋ ํ๊ฒฝ Local์ ์ฑ ๋ฒ๋ค ์์ ์๋ Localization ์คํธ๋ง์ ๊ฒ์ํด์ ํ
์คํธ๋ฅผ ํ์งํ ์์ผ์ค์.
ํ์ฌ ์ค์ ํ ์์์ ์๋์ผ๋ก ๋ง์ถฐ์ ๋คํฌ ๋ชจ๋๋ฅผ ๋ฐ๋ก ์ง์ํด์ฃผ๊ธฐ๋ ํฉ๋๋ค.
Dynamic type๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ํฌ๊ธฐ ์ค์ ์ ๋ฐ๋ผ ๊ธ์ ํฌ๊ธฐ๊ฐ ์๋์ผ๋ก ์ปค์ง๊ฑฐ๋ ์์์ง๋๋ค.
2๊ฐ์ ํ
์คํธ๋ฅผ ์์๋๋ก ๋ฐฐ์นํ ๊ฒฝ์ฐ ํ
์คํธ ์ฌ์ด์ ๊ฐ๊ฒฉ์ ํ์ฌ ํ
์คํธ์ ๋งฅ๋ฝ์ ๋ง๊ฒ ์๋์ผ๋ก ์กฐ์ ํด์.
๋ชจ๋ ๋์์ ์๋์ผ๋ก ์ง์ ํ ์ ์์ง๋ง SwiftUI์ Intelligent default ๋๋ถ์ common use case์ ๊ด๋ จ ์๋ ๋ด์ฉ์ call site์ ๋ํ๋์ง ์์์.
Toolbar๋ฅผ ์์๋ก ๋ค์ด๋ณผ๊ฒ์.
๋ฒํผ์ด ์ฌ๋ฌ ๊ฐ ์๋ Toolbar๊ฐ ์์ต๋๋ค. ๊ฐ ๋ฒํผ์ ์์น๋ฅผ ๋ช
์์ ์ผ๋ก ์ง์ ํ์ง ์์๋ ๋ฒํผ์ด ํ๋ซํผ์ ๋ง๊ฒ ๋ฐฐ์น๋ ๊ฒ๋๋ค.
macOS์์๋ Toolbar๊ฐ ์ผ์ชฝ์ ๋ํ๋์ง๋ง iOS์์๋ ๋ด๋น๊ฒ์ด์
๋ฐ์ ๋ํ๋ฉ๋๋ค. watchOS์์๋ ์ฒซ ๋ฒ์งธ ํญ๋ชฉ๋ง์ด ๋ด๋น๊ฒ์ด์
๋ฐ ์๋ ๊ณ ์ ๋ผ์ด ์์ด์.
์ํ๋ค๋ฉด ์ธ์ ๋ ์ง ์ปค์คํ
ํ ์ ์์ง๋ง Intelligent default๊ฐ ๋๊ฐ์ ์ฌ๋ก๋ฅผ ์ฒ๋ฆฌํด์ค์. 
Optimize the call site
Common Use case๋ฅผ ๊ณ ๋ คํ๊ณ Intelligent default๋ฅผ ์ ๊ณตํ๋ฉด ๋ฉ์ง ๊ฒฝํ์ ๋ง๋ค ์ ์์ง๋ง API๊ฐ ๋ฌด๊ฒ๊ฒ ๋๊ปด์ง๊ฑฐ๋ ์ ์ ๋์ง ์์ผ๋ฉด ๊ฒฝํ์ ๋ง์น ์ ์์ด์. ๊ทธ๋์ ๋์จ ๋ง์ง๋ง ์ ๋ต์ด Call site ์ต์ ํ์
๋๋ค.
Table๋ฅผ ์ดํด๋ณผ๊ฒ์.
์ด์ด ์ฌ๋ฌ ๊ฐ์ธ ํ๋ ๊ธฐ๋ฅ์ด ์ค์ ํ ๊ฒ ๋ง๊ณ ๊ธฐ๋ฅ๋ ๋ง์์. ํ์ง๋ง ๋๋ถ๋ถ์ ํจ์ฌ ๊ฐ๋จํ๊ฒ ์ฌ์ฉํ๊ณ ๋ค์ํ ๊ธฐ๋ฅ์ด ํ์ ์์ด์.
Common usecase์๋ ํ๋ฅญํ ๊ฒฝํ์ ์ ๊ณตํ๊ณ ์ถ์ด์. ๊ทธ๋ฌ๋ฉด ๊ฐ๋จํ ํ์ ๊ดํ ์ฝ๋๋ฅผ ๋ณด๋ฉด์ ์ด๋ป๊ฒ ์ต์ ํํ ์ง ์์๋ด
์๋ค. ํ๋ ๊ฐ ํ์ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ช
์ํด์.
์ด ํ๋ ํ์ฌ ์ฝ๋ ์ฑ
์ ์ด๊ฑฐํ๊ณ ์์ด์. ๊ฐ ์ฑ
์ ๋ํ ํ๋ ๋ง๋ค๊ณ ์์ต๋๋ค. ๋ค์์๋ ๊ฐ ํ์ ๋ฐ์ดํฐ๋ฅผ ์ด์ ๋ฐฐ์นํ๋ ๋ฐฉ์์ ๋ช
์ํฉ๋๋ค. ํ์๋ ์ ๋ชฉ ์ด๊ณผ ์๊ฐ ์ด์ด ์๋ค์.
๋ํ ์ ๋ ฌ ์์๋ฅผ ์ง์ ํ์ฌ ์ฌ์ฉ์๊ฐ ์ด์ ์ ๋ชฉ์ ํด๋ฆญํ ๋ ์ ๋ ฌ์ด ๋ณ๊ฒฝ๋๋๋ก ํ์ฃ .
๋ง์ง๋ง์ผ๋ก ์ ๋ ฌ ์์๊ฐ ๋ฐ๋์์ ๋ ํ๋ฅผ ์ฌ์ ๋ ฌํ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ์ต๋๋ค ์ ๋ณด๊ฐ ๋ง์ผ๋๊น ์ผ๋จ ์ดํด๋ณด๋ฉด์ Progressive disclosure๋ฅผ ์ ์ฉํ์ฌ call site๋ฅผ ์ต์ ํํด ๋ณด์ฃ
๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ํ์ฉ ์ฌ๋ก๋ ํ๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค. ๋๊ฐ๋ ํ ์์ญ์ด ์ด ์์์ ๋น์ทํ ๊ฑฐ์์ ์ปฌ๋ ์
์ ForEach ๋ฌธ์ ๋๋ ค ๊ฐ ํญ๋ชฉ์ ํ์ ์ ๊ณตํ์ฃ
ํ์ง๋ง ๊ฐ๋ฐ์๊ฐ ์ด ๊ณผ์ ์ ๋ฃจํํ ํ์๊ฐ ์์ต๋๋ค.
์ปฌ๋ ์
์ ํ์ ์ง์ ํต๊ณผ์์ผ ForEach ๋์์ ๋ฐฐ๊ฒฝ์์ ์ํ๋๋๋ก ํ์ฌ Call site๋ฅผ ๋จ์ํํ์ต๋๋ค. ํ์ง๋ง ๋ ๋จ์ํํ ์ ์์ด์.
๋๋ถ๋ถ์ ํ์ ๋ํ๋ด๋ ค๋ ๊ฐ์ด String์ด๋ฉด Text๋ฅผ ์ด์ฉํ์ฌ ์ด์ ํ์ํฉ๋๋ค. ์ผ์ด์ค์ ๋ง๊ฒ Call site๋ฅผ ์ต์ ํํ์ฃ .
๊ฐ์ ํคํจ์ค๊ฐ ์คํธ๋ง์ ์ง์ ํ ๋ TableColumn๊ณผ ๊ด๋ จ๋ ๋ทฐ๋ฅผ ์ญ์ ํ ์ ์์ต๋๋ค.
๋ ์ต์ ํํด๋ณผ๊ฒ์.
Call site์ ์๋ ์ ๋ณด ์ค์์ ๋ชจ๋ ํ์ ํ์ํ์ง ์์ ์ ๋ ฌ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ๊ฐ์ฅ ๋จ์ํ ํ์ฉ ์ฌ๋ก๋ ์ ๋ ฌ์๋ ๊ด์ฌ์ด ์์ด์.
์ฆ, ์ด๊ฒ ์ต์ข
์ฝ๋๊ฒ ๊ตฐ์.!
Call site์ ๋ชจ๋ ๊ธ์๊ฐ ๋ช
ํํ ๋ชฉ์ ์ ์ํํ๋๋ฐ Processiveํ๊ฒ ์ค์ํ ์ง๋ฌธ 2๊ฐ๋ฅผ ๋์ก๊ธฐ ๋๋ฌธ์
๋๋ค.
API์ ์ฃผ๋ ์ํฅ์ ์ ๋๋ก ๊ณ ๋ คํ์ง ์์ผ๋ฉด ๊ธธ์ ์์ ์๋ ์๊ฒ ์ฃ ?
Compose, donโt enumerate
Stacks, ํนํ HStack๋ฅผ ์ฌ์ฉํด์ ์ค๋ช
ํด๋ณผ๊ฒ์.
์ผ๋จ HStack์์ ๊ฐ์ฅ ํต์ฌ ์ ๋ณด๊ฐ ๋ฌด์์ธ์ง ์๊ฐํด๋ด
์๋ค. HStack์ ์ฝํ
์ธ ๋ฅผ ์ง์ ํ๋ ๋ทฐ ๋น๋๊ฐ ์์ผ๋ ์ ๋ ฌ์ ์ด์ ์ ๋ง์ถฐ์ ์งํํ ๊ฒ์.
์ผ์ชฝ์ ์์๋ฅผ ๋ฐฐ์นํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ผ๋ฐ์ ์ด๊ฒ ์ฃ . ์ค์์ ๋ฐฐ์นํ๋ ๊ฒ๋ ์ผ๋ฐ์ ์ธ ์ผ์ด์ค์
๋๋ค ์์๋ฅผ ์ค๋ฅธ์ชฝ์ ๋ง์ถฐ ์ ๋ ฌํ ์๋ ์์ฃ .
VStack์๋ ์ด๋ฏธ ์ ๋ ฌ ๊ด๋ จ API๊ฐ ์๋๋ฐ enum์ ์ฌ์ฉํ์ฌ ์์๋ก ์ฌ์ฉํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ธ๊ธํ ๋ชจ๋ ์ผ์ด์ค๋ฅผ ์ง์ํ์ฃ .
๋ง์ฝ ์ฐ๋ฆฌ๊ฐ ์์์ ๊ฐ๊ฒฉ์ ์ผ์ ํ๊ฒ ๋ง๋ค๊ณ ์ถ๊ฑฐ๋ ์์ ์ฌ์ด์๋ง ๊ฐ๊ฒฉ์ ๋๊ฑฐ๋ ๋ง์ง๋ง ์์ ์ ์๋ง ๊ฐ๊ฒฉ์ ๋๊ณ ์ถ์ผ๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น์?
์ด๋ ๊ฒ ํญ๋ชฉ์ด ๋ง์์ง๊ฒ๋๋ค.
์ด๋ฐ ๊ตฌ์กฐ๋ฅผ ์ ์งํ๊ธฐ๋ ํ๋ค๊ณ , ์ํ๋ ๋ชจ๋ ์ผ์ด์ค๋ฅผ enum์ ์ถ๊ฐํด์ผ ํ๋๋ฐ ์ ์ฉํ ์ผ์ด์ค๋ฅผ ์๊ฐํด๋ด์ง ๋ชปํ ์๋ ์์ด์.
์ผ๋ฐ์ ์ธ ์ผ์ด์ค๋ง ์ด๊ฑฐํ๊ณ ํธ์์ฑ์ ์ ๊ณตํ์ง ์๋๋ค๋ฉด API๋ฅผ ๊ตฌ์ฑํ ์ ์๋ ์กฐ๊ฐ์ผ๋ก ๋๋ ์ ํด๊ฒฐ์ฑ
์ ๋ง๋ค์ด๋ณด์ธ์!
์ด๊ฑฐ ๋์ ๊ตฌ์ฑํ์ธ์.
Stack์ ๊ฒฝ์ฐ์๋ SwiftUI๋ Spacer๋ฅผ ์ ๊ณตํ์ฌ ์ฐ๋ฆฌ๊ฐ ์ด๊ฑฐํ๋ ๋ชจ๋ ์ ๋ ฌ ๋ฐฉ์์ ๋ฌผ๋ก ํจ์ฌ ๋ง์ ์ ๋ ฌ์ ๊ตฌ์ฑํ ์ ์๊ฒ ๋์์ต๋๋ค.
โProcessive disclosureโ๋ฅผ ํตํด Call site๋ฅผ ์ต์ํํ๋ ๊ฒ๋ฟ๋ง ์๋๋ผ Call site์์ ๋ชจ๋ ์ผ์ด์ค๋ฅผ ๋ค๋ฃฐ ์ ์๋๋ก ์ ์คํ๊ฒ ๊ณ ๋ คํ๊ณ Compose๋ฅผ ํตํด์ ํด๊ฒฐ์ฑ
์ ์ฐพ์์ด์!
โข
โProcessive disclosureโ๋ฅผ ์ ์ฉํ๋ฉด Common use case์์ ์๊ฐ์ ์๊ปด์ค
โข
Intelligent default๋ก Common use case์ ๊ดํ ์ธ๋ถ ์ฌํญ์ ๊ณ ๋ คํ์ง ์์๋ ๋จ
โข
Call site๋ฅผ ์ต์ ํํ์ฌ ๋ฐ๋ณต ์์
์ ๋น ๋ฅด๊ฒ ์ํ
โข
Compose๋ฅผ ํตํด ๋ชจ๋ ํ์ฉ ์ฌ๋ก๋ฅผ ์ฒ๋ฆฌํ๋ ์ ์ฐํ API ๋ง๋ค๊ธฐ ๊ฐ๋ฅ
์ฌ๋ฌ๋ถ๋ API ์ค๊ณ์์ด๋ฏ๋ก ์ด๋ฌํ ๋ด์ฉ์ ์์ฑํ๋ ์ฝ๋์ ์ ์ฉํ ์ ์์ฃ . ๋ค๋ฅธ ์ฌ๋์ ์ํด ์ค๊ณํ ์๋ ์๊ณ ๊ฐ์ธ ์ฉ๋์ผ ์๋ ์์ต๋๋ค.




































