Flutter Keys
์๋ฌธ: Flutter Keys
ํค ๋งค๊ฐ ๋ณ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ์์ ฏ ์์ฑ์์์ ์ฐพ์ ์ ์์ง๋ง ์ฌ์ฉ ๋น๋๋ ๋ฎ๋ค. ์์ ฏ์ด ์์ ฏ ํธ๋ฆฌ์์ ์ด๋ํ ๋ ํค๋ ์ํ๋ฅผ ์ ์งํ๋ค. ์ค์ ๋ก ์ด๋ ์ฝ๋ ์ ์ ์์ ํ ๋ ์ฌ์ฉ์์ ์คํฌ๋กค ์์น๋ฅผ ์ ์งํ๊ฑฐ๋ ์ํ๋ฅผ ์ ์งํ๋ ๋ฐ ์ ์ฉ ํ ์ ์์์ ์๋ฏธํ๋ค.
๋ค์ ๊ธฐ์ฌ๋ ๋ค์ ๋น๋์ค์์ ์ฑํ๋์๋ค.
์ฝ๊ธฐ๋ณด๋ค๋ ๋ฃ๊ธฐ /๋ณด๊ธฐ๋ฅผ ์ ํธํ๋ค๋ฉด, ๊ทธ ๋น๋์ค๋ ๋ชจ๋ ๋์ผํ ๋ด์ฉ์ ํฌํจํด์ผํ๋ค.
The Inside Scoop on Keys
Most of the timeโฆ you donโt need keys! Generally, thereโs no harm adding them, but itโs also unnecessary and just takes up unnecessary space, just like the new keyword, or declaring types on both the right side and left side of a new variable (Iโm looking at you, Map<Foo, Bar> aMap = Map<Foo, Bar>()). But, if you find yourself adding, removing, or reordering a collection of widgets of the same type that hold some state, using keys is likely in your future!
๋๋ถ๋ถ์ ๊ฒฝ์ฐ ... ํค๊ฐ ํ์ํ์ง ์๋๋ค! ์ผ๋ฐ์ ์ผ๋ก ๊ทธ๊ฒ๋ค์ ์ถ๊ฐํด๋ ์๋ฌด๋ฐ ํด๊ฐ ์์ง๋ง ๋ถํ์ํ๋ฉฐ ์๋ก์ด ํค์๋์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ถํ์ํ ๊ณต๊ฐ์ ์ฐจ์งํ๊ฑฐ๋ ์๋ก์ด ๋ณ์์ ์ค๋ฅธ์ชฝ๊ณผ ์ผ์ชฝ ๋ชจ๋์ ์ ํ์ ์ ์ธํ๋ค (์ ๋ ์ฌ๋ฌ๋ถ์ ๋ณด๊ณ ์๋ค, Map<Foo, Bar> aMap = Map<Foo, Bar> ()). ํ์ง๋ง, ์ํ๋ฅผ ์ ์งํ๋ ๊ฐ์ ์ ํ์ ์์ ฏ ๋ชจ์์ ์ถ๊ฐ, ์ ๊ฑฐ ๋๋ ์ฌ์ ๋ ฌํ๋ ๊ฒฝ์ฐ ํค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฏธ๋์ ๊ฐ๋ฅํ ๊ฒ์ด๋ค!
์ผ๋ถ ์ํ๋ฅผ ๋ณด์ ํ๋ ๋์ผํ ์ ํ์ ์์ ฏ ๋ชจ์์ ์ถ๊ฐ, ์ ๊ฑฐ ๋๋ ์ฌ์ ๋ ฌํ๋ ๊ฒฝ์ฐ ํค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฏธ๋์ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
์ ์์ ฏ ๋ชจ์์ ์์ ํ ๋ ํค๊ฐ ํ์ํ์ง ์ค๋ช ํ๊ธฐ ์ํด ๋จ์ถ๋ฅผ ๋๋ฅผ ๋ ์ฅ์๋ฅผ ๋ฐ๊ฟ ์ ์๋ ๋ ๊ฐ์ง ์์์ด์๋ ์์ ฏ์ด์๋ ๋งค์ฐ ๊ฐ๋จํ ์์ฉ ํ๋ก๊ทธ๋จ์ ์์ฑํ์๋ค.

stateless ๋ฒ์ ์ ์ฑ์๋ ๋ฌด์์๋ก ์์ฑ ๋ ์์์ด ์๋ stateless ํ์ผ ๋ ๊ฐ์ 'ํ์ผ'์ ์์น๋ฅผ ์ ์ฅํ๋ PositionedTiles๋ผ๋ StatefulWidget์ด ์๋ค. ์๋์ชฝ์ ์๋ FloatingActionButton์ ํญํ๋ฉด ๋ชฉ๋ก์์์ ์์น๊ฐ ๋ฐ๋๊ฒ๋๋ค.
๊ทธ๋ฌ๋ ์ํ ์ ์ฅ์ด ์๋ ColorfulTiles stateful์ ๋ง๋ค์ด ์ํ์ ์ ์ฅํ ๊ฒฝ์ฐ ๋ฒํผ์ ๋๋ฅด๋ฉด ์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ค.

์์ ์ฝ๋๋ ์ฌ์ฉ์๊ฐ "swap"๋ฒํผ์ ๋๋ ์ ๋ ์์์ด ์๋ก ๋ฐ๋์ง ์๋๋ค๋ ์ ์์ buggy์ด๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด Stateful ์์ ฏ์ ํค ๋งค๊ฐ ๋ณ์๋ฅผ ์ถ๊ฐ ํ ๋ค์ ์์ ฏ์ด ์ํ๋๋๋ก ์ค์ํ๋ค.

๊ทธ๋ฌ๋ ์ด๊ฒ์ ์์ ์ค์ธ ํ์ ํธ๋ฆฌ์ stateful ์์ ฏ์ด ์๋ ๊ฒฝ์ฐ์๋ง ํ์ํ๋ค. ์ปฌ๋ ์ ์ ์ ์ฒด ์์ ฏ ํ์ ํธ๋ฆฌ๊ฐ stateless ์ด๋ฉด ํค๊ฐ ํ์ํ์ง ์๋๋ค.
๊ทธ๊ฒ ๋ค์ผ! Flutter์์ ํค๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๊ธฐ์ ์ ์ผ๋ก ๋ชจ๋ ์์์ผ ํ๋ค. ๊ทธ๋ฌ๋ ๋น์ ์ด ๊ทธ๊ฒ์ ๋ชจ๋ ๊ทผ๋ณธ์ ์ธ ์ด์ ๋ฅผ ์ดํดํ๊ณ ์ถ๋ค๋ฉด ....
The Nitty Gritty of Why Keys are Sometimes Needed
๋ ์์ง ์ฌ๊ธฐ์์ด? ๊ทธ๋ฐ ๋ค์, ๊ทผ์ฒ์ ๋ชจ์ฌ ์์ ฏ๊ณผ Element Tree์ ์ง์ ํ ๋ณธ์ฑ์ ๋ฐฐ์ฐ๊ณ Flutter ์์๋ฌ๊ฐ ๋์ญ์์ค! Mwahahaha! ํํ! HA ํ! ์ํด, ์ค๋กํ๋ค.
์๋ ๋ฐ์ ๊ฐ์ด, ๋ชจ๋ ์์ ฏ์ ๋ํด Flutter๋ ํด๋น ์์๋ฅผ ๋ง๋ ๋ค. Flutter๋ ์์ ฏ ํธ๋ฆฌ๋ฅผ ์์ฑํ๋ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋กElement ํธ๋ฆฌ๋ฅผ ๋ง๋ ๋ค. ElementTree๋ ๋งค์ฐ ๊ฐ๋จํ๋ค. ๊ฐ ์์ ฏ์ type์ ๋ํ ์ ๋ณด์ children ์์์ ๋ํ ์ฐธ์กฐ ๋ง ๊ฐ์ง๊ณ ์๋ค. Flutter ์ฑ์ ๊ณจ๊ฒฉ์ฒ๋ผ ElementTree๋ฅผ ์๊ฐํด๋ณด์ญ์์ค. ์ฑ์ ๊ตฌ์กฐ๋ฅผ ๋ณด์ฌ ์ฃผ์ง๋ง ๋ชจ๋ ์ถ๊ฐ ์ ๋ณด๋ ์๋ ์์ ฏ์ ์ฐธ์กฐํ์ฌ ์กฐํ ํ ์ ์๋ค.
์์ ์์ ์์Row ์์ ฏ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ ์์์ ๋ํด ์ ๋ ฌ ๋ ์ฌ๋กฏ ์ธํธ๋ฅผ ๋ณด์ ํ๋ค. Row์์ Tile ์์ ฏ์ ์์๋ฅผ ๋ฐ๊ฟ ๋, Flutter๋ ElementTree๋ฅผ ๊ฑฐ์ณ ๊ณจ๊ฒฉ ๊ตฌ์กฐ๊ฐ ๊ฐ์์ง ํ์ธํ๋ค.

RowElement๋ก ์์ํ์ฌ ์์์ผ๋ก ์ด๋ํ๋ค. ElementTree๋ ์๋ก์ด ์์ ฏ์ด ์ด์ ์์ ฏ๊ณผ ๋์ผ ์ ํ ๋ฐ ํค์ธ์ง ํ์ธํ๊ณ , ์ผ์นํ๋ฉด ์๋ก์ด ์์ ฏ์ ๋ํ ์ฐธ์กฐ๋ฅผ ์
๋ฐ์ดํธํ๋ค. Stateless ๋ฒ์ ์์๋ ์์ ฏ์ ํค๊ฐ ์์ผ๋ฏ๋ก Flutter๊ฐ ์ ํ์ ํ์ธํ๋ค. (ํ ๋ฒ์ ๋ง์ ์ ๋ณด๊ฐ ์๋๊ฒ ๊ฐ์ผ๋ฉด ์์ ์ ๋๋ฉ์ด์
๋ค์ด์ด๊ทธ๋จ์๋ณด์ญ์์ค.)
stateful ์์ ฏ์ ๊ธฐ๋ณธ ElementTree ๊ตฌ์กฐ๋ ์ฝ๊ฐ ๋ค๋ฅด๊ฒ ๋ณด์ด๋ค. ์ด์ ๊ณผ ๊ฐ์ ์์ ฏ๊ณผ ์์๊ฐ ์์ง๋ง ์ํ ๊ฐ์ฒด ์์ด ์์ผ๋ฉฐ ์์ ์ ๋ณด๋ ์์ ฏ ์์ฒด๊ฐ ์๋ ํด๋น ์์น์ ์ ์ฅ๋๋ค.

์ํ๊ฐ ์๋ Tile (ํค๊ฐ ์๋ ๊ฒฝ์ฐ)์์ ๋ ์์ ฏ์ ์์๋ฅผ ๋ฐ๊พธ๋ฉด Flutter๋ ElementTree๋ฅผ ํ์ํ๊ณ RowWidget์ ์ ํ์ ํ์ธํ ๋ค์ ์ฐธ์กฐ๋ฅผ ์
๋ฐ์ดํธํ๋ค. ๊ทธ๋ฐ ๋ค์ TileElement๋ ํด๋น ์์ ฏ์ด ๋์ผํ type (TileWidget)์ธ์ง ํ์ธํ์ฌ ์ฐธ์กฐ๋ฅผ ์
๋ฐ์ดํธํ๋ค. ๋ ๋ฒ์งธ child์๊ฒ๋ ๋๊ฐ์ ์ผ์ด ์ผ์ด๋๋ค. Flutter๋ ElementTree์ ํด๋น state๋ฅผ ์ฌ์ฉํ์ฌ ์ฅ์น์ ์ค์ ํ์ ํ ๋ด์ฉ์ ๊ฒฐ์ ํ๋ฏ๋ก ์ฐ๋ฆฌ์ ๊ด์ ์์ ๋ณผ ๋ ์์ ฏ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ค์๋์ง ์์ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ค!

Stateful Tiles๊ฐ ์๋ ๊ณ ์น ๋ฒ์ ์์๋ ์์ ฏ์ ํค ์์ฑ์ ์ถ๊ฐํ์๋ค. ์ด์ ์ฐ๋ฆฌ๊ฐ ์์ ฏ์ ๋ฐ๊พธ๋ ๊ฒฝ์ฐ Row ์์ ฏ์ ์ด์ ์ฒ๋ผ ์ ์ฌํ์ง๋ง, ํ์ผ ์์์ ํค๊ฐ ํด๋น ํ์ผ ์์ ฏ์ ํค์ ์ผ์นํ์ง ์๋๋ค. ์ด๋ ๊ฒํ๋ฉด Flutter๊ฐ Elements๋ฅผ ๋นํ์ฑํํ๊ณ ElementTree์์ Tile Elements์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ ๊ฑฐํ๋ค. ์ผ์นํ์ง ์๋ ์ฒซ ๋ฒ์งธ Element๋ถํฐ ์์ํ๋ค.

๊ทธ๋ฐ ๋ค์ Flutter๋ ์ผ์นํ๋ ํค๊ฐ ์๋ element์ ๋ํด Row์ ์ผ์นํ์ง ์๋ ํ์ ํญ๋ชฉ์ ์ดํด ๋ณธ๋ค. ์ผ์นํ๋ ํญ๋ชฉ์ ์ฐพ๊ณ ํด๋น ์์ ฏ์ ๋ํ ์ฐธ์กฐ๋ฅผ ์
๋ฐ์ดํธํ๋ค. ํ๋ฌํฐ๋ ๋ ๋ฒ์งธ child์๊ฒ ๋๊ฐ์ ์ผ์ ํ๋ค. ์ด์ Flutter๋ ๋ฒํผ์ ๋๋ฅด๋ฉด ์์ ฏ์ด ์ฅ์๋ฅผ ๊ต์ฒดํ๊ณ ์์์ ์
๋ฐ์ดํธํ์ฌ ์์ ํ ๊ฒ์ ํ์ํ๋ค.
์์ฝํ๋ฉด ํค๋ ์ปฌ๋ ์ ์์ ์ํ ์ ์ฅ ์์ ฏ์ order ๋๋ number๋ฅผ ์์ ํ๋ ๊ฒฝ์ฐ์ ์ ์ฉํ๋ค. ์ค๋ช ์ ์ํด ์ด ์์ ์์๋ ์ํ๋ก ์์์ ์ ์ฅํ์๋ค. ์ข ์ข state๋ ํจ์ฌ ๋ ๋ฏธ๋ฌํ๋ค. ์ ๋๋ฉ์ด์ ์ฌ์, ์ฌ์ฉ์๊ฐ ์ ๋ ฅ ํ ๋ฐ์ดํฐ ํ์ ๋ฐ ์คํฌ๋กค ์์น๋ ๋ชจ๋ ์ํ๋ฅผ ํฌํจํ๋ค.
Where do I put โem?
์งง์ ๋๋ต : ์ฑ์ ํค๋ฅผ ์ถ๊ฐํด์ผ ํ๋ ๊ฒฝ์ฐ ๋ณด์กดํด์ผ ํ๋ ์ํ๋ก ์์ ฏ ํ์ ํธ๋ฆฌ์ ์๋จ์ ํค๋ฅผ ์ถ๊ฐํด์ผ ํ๋ค.
๋ด๊ฐ ๋ณด์๋ ํํ ์ค์๋ ์ฌ๋๋ค์ด ์ฒ์์ผ๋ก ์ํ ์ ์ฅ ์์ ฏ์ ํค๋ฅผ ๋ฃ์ ํ์๊ฐ ์๋ค๊ณ ์๊ฐํ์ง๋ง ์ฉ(dragon)์ด ์์๋ฟ์ด๋ค. ๋๋ฅผ ๋ฏฟ์ง ์์ต๋๊น? ์ฐ๋ฆฌ๊ฐ ์ด๋ค ์ข
๋ฅ์ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์๋์ง ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ๋๋ colorfulTile ์์ ฏ์ padding ์์ ฏ์ผ๋ก ๊ฐ์์ง๋ง ํ์ผ ์์ ํค๋ฅผ ๋์๋ค.
์ด์ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ํ์ผ์ด ์์ ํ ๋ค๋ฅธ ์์์ ์์์ผ๋ก ๋ฐ๋๋๋ค.

์ถ๊ฐ ๋ ํจ๋ฉ ์์ ฏ๊ณผ ํจ๊ป WidgetTree์ ElementTree๊ฐ ์ด๋ค ๋ชจ์ต์ธ์ง ๋ณด์ฌ์ค๋ค.

Flutter์ element-to-widget-matching ์๊ณ ๋ฆฌ์ฆ์ children๋ค์ ์์น๋ฅผ ๊ตํ ํ ๋ ํ ๋ฒ์ ํ ๋ ๋ฒจ์ ํธ๋ฆฌ๋ฅผ ๋ณธ๋ค. ๋ค์ด์ด๊ทธ๋จ์ ๋ค์ด์ด๊ทธ๋จ์์ children๋ค์ children๋ค์ ํ์์ผ๋ก ๋ง๋ค์ด์ ํ ๋ฒ์ ํ ์์ค์ ์ง์คํ ์ ์๋ค. Padding ์์๊ฐ ์๋ ์ฒซ ๋ฒ์งธ ์์ค์ children์๊ฒ๋ ๋ชจ๋ ๊ฒ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์ผ์นํ๋ค.

๋ ๋ฒ์งธ ๋ ๋ฒจ์์ Flutter๋ ํ์ผ ์์์ ํค๊ฐ ์์ ฏ์ ํค์ ์ผ์นํ์ง ์์ผ๋ฏ๋ก ํ์ผ ์์๋ฅผ ๋นํ์ฑํํ์ฌ ํด๋น ์ฐ๊ฒฐ์ ์ญ์ ํ๋ค. ์ด ์์ ์์ ์ฌ์ฉํ๋ ํค๋ LocalKeys์ด๋ค. ์ฆ ์์ ฏ์ element์ ์ผ์น ์ํค๋ฉด Flutter๋ ํธ๋ฆฌ์ ํน์ ์์ค์์ ์ฃผ์ ์ผ์น ํญ๋ชฉ์ ์ฐพ๋๋ค.
ํด๋น ํค ๊ฐ์ผ๋ก ํด๋น ๋ ๋ฒจ์ ํ์ผ element๋ฅผ ์ฐพ์ ์ ์์ผ๋ฏ๋ก ์๋ก์ด element๋ฅผ ๋ง๋ค๊ณ ์ ์ํ๋ฅผ ์ด๊ธฐํํ๋ค.์ด ๊ฒฝ์ฐ์๋ ์์ ฏ์ ์ฃผํฉ์์ผ๋ก ๋ง๋ ๋ค!

ํจ๋ฉ ์์ ฏ ์์ค์์ ํค๋ฅผ ์ถ๊ฐํ๋ ๊ฒฝ์ฐ :
Flutter๋ ์ด์ ์์ ์์์ ๊ฐ์ด ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ์ฐ๊ฒฐ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ ๋ฐ์ดํธ ํ๋ค. ์ฐ์ฃผ์์ ์ง์๊ฐ ํ๋ณต๋๋ค.

What kind of Key should I use?
Flutter API์ ํ๋ฅญํ ๊ณต๊ธ ์
์ฒด๋ ์ ํํ ์ ์๋ ๋ค์ํ Key ํด๋์ค๋ฅผ ์ ๊ณตํ๋ค. ์ฌ์ฉํด์ผ ํ๋ ํค ์ ํ์ ํค๋ฅผ ํ์๋กํ๋ ํญ๋ชฉ์ ๊ตฌ๋ณ๋๋ ํน์ฑ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค. ์์ ฏ์ ์ ์ฅํ๊ณ ์๋ ์ ๋ณด๋ฅผ ์ดํด๋ณด์ญ์์ค. ์ฌ๊ธฐ์๋ ๋ค ๊ฐ์ง ์ ํ์ ํค, ValueKey , ObjectKey, UniqueKey ๋ฐ UniqueKey์ ๋ํด ์ค๋ช
ํ๊ฒ ๋ค.
๋ค์ ํ ์ผ ๋ชฉ๋ก appยน์ ๊ณ ๋ คํ๋ผ. ์ฐ์ ์์์ ๋ฐ๋ผ TODO ๋ชฉ๋ก์ ํญ๋ชฉ์ ์ฌ์ ๋ ฌ ํ ๋ค์ ์๋ฃ๋๋ฉด ์ ๊ฑฐ ํ ์ ์๋ค.

์ด ์๋๋ฆฌ์ค์์๋ To-do ํญ๋ชฉ์ ํ
์คํธ๊ฐ ์ผ์ ํ๊ณ ๊ณ ์ ํ ๊ฒ์ผ๋ก ์์ ํ ์ ์๋ค. ์ด ๊ฒฝ์ฐ, ์๋ง๋ ValueKey์ ๋ํ ์ข์ ํ๋ณด๊ฐ ๋ ๊ฒ์ด๋ค. ํ
์คํธ๋ value์ด๋ค.
๋ค๋ฅธ ์๋๋ฆฌ์ค์์๋ ์๋ง๋ ๊ฐ ์ฌ์ฉ์์ ๋ํ ์ ๋ณด๊ฐ ๋์ด๋ ์ฃผ์๋ก ์ฑ์ ์ฌ์ฉํ์ ๊ฒ์ด๋ค. ์ด ๊ฒฝ์ฐ ๊ฐ ํ์ ์์ ฏ์ ๋ ๋ณต์กํ ๋ฐ์ดํฐ ์กฐํฉ์ ์ ์ฅํ๋ค. ์ด๋ฆ์ด๋ ์์ผ๊ณผ ๊ฐ์ ๊ฐ๋ณ ํ๋๋ ๋ค๋ฅธ ํญ๋ชฉ๊ณผ ๊ฐ์ ์ ์์ง๋ง ์กฐํฉ์ ๊ณ ์ ํ๋ค. ์ด ์๋๋ฆฌ์ค์์๋ ์๋ง๋ ObjectKey๊ฐ ๊ฐ์ฅ ์ ์ ํ ๊ฒ์ด๋ค.

์ฝ๋ ์
์ ๋์ผํ ๊ฐ์ ๊ฐ์ง ์ฌ๋ฌ ์์ ฏ์ ๊ฐ์ง๊ณ ์๊ฑฐ๋ ๊ฐ ์์ ฏ์ด all ๋ค๋ฅธ ๊ฒ๋ค๊ณผ ํ์คํ ๊ตฌ๋ณ๋๋๋กํ๋ ค๋ฉด UniqueKey ๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ฐ๋ฆฌ๊ฐ ์ฐ๋ฆฌ ํ์ผ์ ์ ์ฅํ๊ณ ์๋ ๋ค๋ฅธ ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์์๊ณ ์์ ฏ์ ๋ง๋ค ๋ ์์์ด ๋ฌด์์ธ์ง ์์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ์์ ์์ ์ ํ ์ ํ๋ฆฟ์์ UniqueKey๋ฅผ ์ฌ์ฉํ์๋ค. ๊ทธ๋๋ UniqueKey์ ์กฐ์ฌํ๋ผ! build ๋ฉ์๋ ์์์ ์๋ก์ด UniqueKey๋ฅผ ์์ฑํ๋ฉด, ๊ทธ ํค๋ฅผ ์ฌ์ฉํ๋ ์์ ฏ์ ๋น๋ ๋ฉ์๋๊ฐ ๋ค์ ์คํ๋ ๋๋ง๋ค ๋ค๋ฅธ unique ํค๋ฅผ ๊ฐ๊ฒ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํค ์ฌ์ฉ์ ์ด์ ์ ์์จ ์ ์๋ค!
๋ง์ฐฌ๊ฐ์ง๋ก, ์ฌ์ฉํ์ง ์์ผ๋ ค๋ ๊ฒ์ ํค์ ์์์ ์ซ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. ์์ ฏ์ด ๋น๋ ๋ ๋๋ง๋ค ์๋ก์ด ๋์๊ฐ ์์ฑ๋๊ณ ํ๋ ์ ์ฌ์ด์ ์ผ๊ด์ฑ์ ์๊ฒ ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ฒ์๋ถํฐ ํค๋ฅผ ์ฌ์ฉํ์ง ์์์ ์๋ ์๋ค!
PageStorageKey๋ ์ฌ์ฉ์๊ฐ ์คํฌ๋กค ์์น๋ฅผ ์ ์ฅํ๋ ํน์ ํค๋ก์, ์ฑ์ด ๋์ค์ ๊ทธ๊ฒ์ ๋ณด์กด ํ ์ ์๋๋กํ๋ค.


GlobalKeys๋ ์์ ฏ์ด ์ํ๋ฅผ ์์ง ์๊ณ ์ฑ์ ์ด๋ ์์น์์๋ ๋ถ๋ชจ๋ฅผ ๋ฐ๊ฟ ์ ์๊ฒ ํ๊ฑฐ๋ ์์ ฏ ํธ๋ฆฌ์ ์ ํ ๋ค๋ฅธ ๋ถ๋ถ์์๋ ๋ค๋ฅธ ์์ ฏ์ ๋ํ ์ ๋ณด์ ์ก์ธ์คํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ค. ์ฒซ ๋ฒ์งธ ์๋๋ฆฌ์ค์ ์๋ ๋์ผํ ์์ ฏ์ ๋ ๊ฐ์ ๋ค๋ฅธ ํ๋ฉด์ ํ์ํ๊ณ ์ถ์ง๋ง ๋ชจ๋ ๋์ผํ ์ํ๋ฅผ ์ ์งํ๋ ๊ฒฝ์ฐ GlobalKey๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. ๋ ๋ฒ์งธ ์๋๋ฆฌ์ค์์๋ ์ํธ๋ฅผ ๊ฒ์ฆํ๋ ค๊ณ ํ์ง๋ง ์ํ ์ ๋ณด๋ฅผ ํธ๋ฆฌ์ ๋ค๋ฅธ ์์ ฏ๊ณผ ๊ณต์ ํ์ง ์์ผ๋ ค๊ณ ํ๋ค. GlobalKeys๋ ํค๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ์์ ฏ์ ์ก์ธ์คํ๊ณ ๊ทธ ์ํ์ ๋ํ ์ ๋ณด๋ฅผ ์ฟผ๋ฆฌํจ์ผ๋ก์จ ํ
์คํธ์ ์ ์ฉ ํ ์ ์๋ค.

ํํ (ํญ์ ๊ทธ๋ฐ ๊ฒ์ ์๋์ง๋ง!) GlobalKeys๋ ์ ์ญ ๋ณ์์ ์กฐ๊ธ ๋น์ทํ๋ค. ์ผ๋ฐ์ ์ผ๋ก InheritedWidgets ๋๋ Redux ๋ BLoC ํจํด๊ณผ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํ์ฌ ๊ทธ ์ํ๋ฅผ ์ฐพ๋ ๋ ์ข์ ๋ฐฉ๋ฒ์ด ์๋ค.
Quick Recap
์์ฝํ๋ฉด ์์ ฏ ํธ๋ฆฌ์์ ์ํ๋ฅผ ๋ณด์กดํ๋ ค๋ฉด Keys๋ฅผ ์ฌ์ฉํ๋ผ. ์ด๋ ๋ชฉ๋ก๊ณผ ๊ฐ์ ์ ํ์ ์์ ฏ ๋ชจ์์ ์์ ํ ๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ํ๋ค. ํค๋ฅผ ๋ณด๊ดํ ์์ ฏ ํธ๋ฆฌ์ top์ ๋๊ณ ์์ ฏ์ ์ ์ฅํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉํ๋ ํค ์ ํ์ ์ ํํ๋ผ.
์ถํํด, ์ด์ ๋๋ Flutter Sorcerer๊ฐ๋๋ ๊ธธ์ ์ ๋ค๋ค๋ฅผ๊ฑฐ์ผ! ์ค, ๋ด๊ฐ ๋ง๋ฒ์ฌ๋ผ๊ณ ํ๋? ๋๋ ์ฑ ์์ค ์ฝ๋๋ฅผ ์์ฑํ๋ ์ฌ๋์ฒ๋ผ * sourcerer *๋ฅผ ์๋ฏธํ๋ค. โฆ๊ฑฐ์. โก
[1] Code for the To-do app inspired by https://github.com/brianegan/flutter_architecture_samples/tree/master/example/vanilla
Last updated