์์ฝ
๋ทฐ์ ๋๋ก์ ์ฌ์ดํด์๋ ํฌ๊ฒ 3๊ฐ์ง๊ฐ ์์ต๋๋ค. ๋จผ์ Constraints(์ ์ฝ)์ ์ ๋ฐ์ดํธํ๊ณ ์ฌ๋ฐฐ์นํ๊ณ ๋ค์ ๋ทฐ๋ฅผ ๊ทธ๋ฆฌ๋ ๋ฐฉ์์ ๋๋ค. ๊ตฌ์ฒด์ ์ธ ๋ฉ์๋๋ก๋ ์คํ ๋ ์ด์์์ ์ ๋ฐ์ดํธ ํ๋ updateConstraints(), ํ์ ๋ทฐ์ ๋ ์ด์์ ์์น์ ํฌ๊ธฐ๋ฅผ ์ฌ์กฐ์ ํ๋ layoutSubviews(), ์์/์ด๋ฏธ์ง/ํ ์คํธ ๋ฑ ์ค์ ๋ด๋ถ ์ปจํ ์ธ ๋ฅผ ๋ค์ ๊ทธ๋ฆฌ๋ draw() ๋ฉ์๋๊ฐ ์์ต๋๋ค.,
๋ถ๊ฐ์ค๋ช
app์ด ์คํ๋๋ฉด iOS์ UIApplication์ด Main Thred์์ main run loop๋ฅผ ์คํ์ํจ๋ค. ๋ฉ์ธ๋ฐ๋ฃจํ๋ ํ์ดํ๋๋ก ํ๋ฐํด์ฉ ๋๋ฉฐ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ค. ๋ทฐ๋ฅผ ์ ๋ฐ์ดํธ ํ๋ ์ฌ์ดํด์ ๋ฉ์ธ ๋ฐ๋ฃจํ์์ ๋ฐ์ํ๋ค๊ณ ๋ณผ ์ ์๋ค.
๋ฉ์ธ ๋ฐ๋ฃจํ๋ 3.5ghz๋ก 1์ด์ 35์ต๋ฒ์ ์ผ์ ์ฒ๋ฆฌํ๋ค. ๋ง์ง๋ง ์ ๋ฐ์ดํธ ์ฌ์ดํด์์๋ ์์ดํฐ ํ๋ฉด ์ฃผ์ฌ์จ์ด 60hz๋ผ๊ณ ํ์ ๋ ํ๋ฉด์ 1์ด์ 60๋ฒ ๋ฉ์ธ์ค๋ ๋์์ ๊ทธ๋ฆฌ๊ฒ ๋๋ค. ๋ฌผ๋ก ํ๋ฉด์ ๋งค๋ฒ 1์ด์ 60๋ฒ์ฉ ๊ทธ๋ฆฌ๋ ๊ฒ์ ์๋๊ณ ๋ทฐ์ ๋ณ๊ฒฝ์ฌํญ์ด ์์ ๋๋ง ๋ค์ ๊ทธ๋ฆฌ๊ฒ๋๋ค. ๋ทฐ์ ๋ณ๊ฒฝ์ฌํญ์ด ์์ด์ผ๋ง ๋ค์ ๊ทธ๋ฆฐ๋ค๋ฉด ๋ทฐ์ ๋ณ๊ฒฝ์ฌํญ์ด ์๋ ํน์ ์์ ์ ์ด๋ป๊ฒ ํ๋จํ ๊น?
๊ณต์๋ฌธ์์์๋ ์์๊ฐ์ 4๊ฐ์ง ์ํฉ์ "ํน์ ์์ "์ผ๋ก ํ๋จํ๊ณ ๋ทฐ๋ฅผ ๋ค์ ๊ทธ๋ฆฐ๋ค๊ณ ํ๋ค. ํน์ ์์ ์ด ์๋ ๊ฒฝ์ฐ์๋ ์ค๋ ์ท์ ์บก์ณํด์ ๋นํธ๋งต ์ปจํ ์คํธ๋ก ์ ์ฅํด๋ํ ๋ณด์ฌ์ค๋ค. ๊ทธ๋ ๋ค๋ฉด ํน์ ์์ ์์ ๋ง์ง๋ง ์ง์ ๊ฐ๋ฐ์๊ฐ ์ ๋ฐ์ดํธ ์์ฒญํ๋ ๊ฒฝ์ฐ์์๋ ์ด๋ป๊ฒ ์์ฒญํ ์ ์์๊น?
๋จผ์ ์์๋ ์ง์์ ๋ทฐ์๊ฒ ์ธ์ ์ปค์คํ ํ๊ฒ ์์ฒญํด์ผํ๋ ๊ฒ์ด๋ค. ์์ฒญ์์ ๋ ๊ฐ-ํ๋ต๊ฒ ์ธ๋ถํ๋์ด์๋ค. ํ๋์ ๋ฉ์๋๋ก ๋ทฐ ์ฌ๋๋ก์์ ํ์น๋ ๊ฒ ์๋๋ผ setNeedsDisplay() ์ ์ ๋ณด๋ฅผ ๋ด์๋๋ค ๋ง์ง๋ง draw() ๋ฉ์๋ ํธ์ถ์์ ์์ ๋ทฐ๊ฐ ๋ค์ ๊ทธ๋ ค์ง๋ค.
ํ ๋ฐ์๊ตญ ๋ ๋์๊ฐ์๊ฐ. ๋ทฐ๋ฅผ ์ง์ ๊ทธ๋ฆฌ๋ ๊ฑด ์ฌ์ค ๋ฐ๋ฃจํ๊ฐ ์๋๋ค. ๋ฐ๋ฃจํ๋ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๊ณ ํน์ ์์ ์ ์ธ์งํ๋๊ฑฐ์ง ์ง์ง๋ก ๋ทฐ๋ฅผ ๊ทธ๋ฆฌ๋๊ฑด OS ๋จ๊ณ์์ ์ด๋ฃจ์ด์ง๋ค.( Core Animation, Metal ๋๋ OpenGL ๊ฐ์ ๊ทธ๋ํฝ ํ๋ ์์ํฌ์ ๊ด๋ จ) ์ด๋ฌํ ๋ทฐ๋ฅผ ๊ทธ๋ฆฌ๋ ๋จ๊ณ๋ฅผ Render Loop ๋ผ๊ณ ํ๋ค. ๊ฐ๋ฐ์๊ฐ ์ปค์คํฐ๋ง์ด์งํ๋ ์์ฒญ์ ๋ฉ์๋๋ฅผ ํตํด RunLoop์ RenderLoop๋ฅผ ์ด์ด์ฃผ๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ RenderLoop ์์ ์ ๋ฐ๋ผ ํ ์ ์๋ ์์ฒญ๋ ์ธ๋ถํ๋๋ค.
Render Loop๋ ์ด 3๋จ๊ณ๋ก ๊ตฌ๋ถ๋๋ค. ๋ฐ๋ก Update Constraints, Layout, Display ๋จ๊ณ๋ค์ด๋ค. Update Constraints ์์๋ ์ ์ฝ์ ์ ๋ฐ์ดํธํ๋ค. Layout์์๋ ์ ๋ฐ์ดํธ๋ ์ ์ฝ์ ํตํด ์๋ง์ ๊ณณ์ ์์น์์ผ์ค๋ค. Display๋ ์์น์ํจ ๋ทฐ๋ฅผ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๋ ๋จ๊ณ์ด๋ค. ๊ตฌ์ฒด์ ์ธ ์์๋ ์์ ๊ฐ๋ค. ์ ์ฝ์ ์ ๋ฐ์ดํธ ํ ๋๋ ๊ฐ์ฅ ํ์๋ทฐ๋ถํฐ ์์๋ทฐ ์์๋๋ก ์ ์ฝ์ ์ ๋ฐ์ดํธํ๋ค. ์ ์ฝ์ ๋ง๋ ์์น๋ ์์๋ทฐ๋ถํฐ ํ์๋ทฐ ์์๋๋ก ์์น์ํจ๋ค(๋น์ฐํ ์ด์ผ๊ธฐ์ด๊ธดํ๋ค. ์์๋ทฐ ์์น๋ ๋ชจ๋ฅด๋๋ฐ ํ์๋ทฐ ์์น๋ฅผ ์ก์ ์ ์๊ธฐ ๋๋ฌธ์). ์์น๊น์ง ๋ง์ท์ผ๋ฉด ์ด์ ์์๋ทฐ๋ถํฐ ํ์๋ทฐ๋ก ๋ด๋ ค์ค๋ฉด์ ๊ทธ๋ ค๋ธ๋ค.
๊ฐ Phase ๋ง๋ค ํธ์ถ๋๋ ๋ฉ์๋๋ค์ด๋ค. ๊ฐ์ ๊ฐ๋ก์ค์ ์๋ ๋ฉ์๋๋ค์ ์๋ฏธ๋ ์ญํ ๋ง ๋ค๋ฅผ ๋ฟ ํ๋ ์ผ์ ๊ฐ๋ค. ์์ draw ๋ฉ์๋๊ฐ ์ฐ์ผ๋ก ๋ทฐ๋ฅผ ๊ทธ๋ฆฌ๋ ๋ฉ์๋๋ผ๊ณ ํ๋ค. ๋ฐ๋ผ์ updateConstraints() ๋ฉ์๋๋ ์ฐ์ผ๋ก ์ ์ฝ์ ์ ๋ฐ์ดํธํ๊ณ layoutSubview() ๋ ์ฐ์ผ๋ก ๋ทฐ๋ค์ ์์น์ํจ๋ค. ๊ฐ phase๋ง๋ค ๋งํ ์น๋ ๋ ์๋ค์ด๋ผ๊ณ ๋ณผ ์ ์๋ค. ๋ง์ง๋ง ์ค updateConstraintsIfNeeded() ์ layoutIfNeeded() ๋ฉ์๋๋ค์ ๊ฒฝ์ฐ์๋ ํธ์ถํ์๋ง์ ์ฆ๊ฐ์ ์ผ๋ก ๊ฐ๊ฐ ์ ์ฝ์ ์ ๋ฐ์ดํธํ๊ณ ์์น์ก๊ธฐ๋ฅผ ์ ๋ฐ์ดํธํ๋ค.
์ข ๋ ๊น์ด ๋ค์ด๊ฐ๋ณด์. UpdateConstraints ๋ ์ด๋ป๊ฒ ๋์ํ๋๊ฑธ๊น? ๋จผ์ ์ฐ๋ฆฌ๋ ์๋์ฐ ์์ ๋ทฐ๊ฐ ์๊ณ ๋ทฐ ์์ Constraint ์ ๋ณด๊ฐ ์๋ค๋ ๊ฒ์ ์๊ณ ์๋ค. ๊ทธ๋ ๋ค๋ฉด ์ ์ฝ์ ๋ณด๋ง ๊ฐ์ง๊ณ ์ด๋ป๊ฒ ์์น๋ฅผ ์ํฌ๊น? ๋ฐ๋ก Equation ๋๋ถ์ด๋ค. Equiation์ ์ ๋นจ๊ฐ ๋ฐ์ค์ฒ๋ผ ์์น๊ฐ์ ์ฐ์ถํ ์ ์๋ ๋ฐฉ์ ์์ด๋ค.
์์ง์ ๋ฐฉ์ ์์ ๋ฐ๋ผ ๋ทฐ์ ์ ์ฝ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ฆฌ์กฐ๋ฆฌ ์๋ฆฌํ ํ์ ์์ฑ์ํจ ํ Variable ์ ๋ณด๋ก view์ ์ ๋ฌํ๋ค.
๋ค์์ ์์ง์ ๋ทฐ์๋ค ๊ฐ ๋ฐ๋์์ด~ ๋นจ๋ฆฌ ์์น๋ค์์ก์๋ผ๊ณ ํธ๋ฆฌ๊ฑฐ๋ง์ ํ๋ค. (์ด๋ ๊ฐ์ฅ ์์๋ทฐ์ ์ ๋ฌํ๋ค. ๊ทธ๋์ ์์น์ก๋ ์์๊ฐ ์์๋ทฐ -> ํ์๋ทฐ๋ก ์ด์ด์ง๋ค)
์์์ ์ ์ฝ๊ฐ์ด ์๊ธฐ๋ฉด ์์ง์ด ๋ฐฉ์ ์์ ๋ฐ๋ผ ๊ณ์ฐํด์ค๋ค๋ ๊ฒ์ ์ฐ๋ฆฌ๋ ๋ฐฐ์ ๋ค. ๊ทธ๋ ๋ค๋ฉด ์ฐ๋ฆฌ๊ฐ ํ์ง ๋ง์์ผํ ํ๋์ ๋ถ๋ช ํ๋ค. updateConstraints() ๋ฉ์๋ ์์์ ์ ์ฝ์ deactivateํ๋ค๊ฐ activate ์์ผ์๋ ์๋๋ค. ๋นํ์ฑํํ๋๋ผ๋ ์์ง์์๋ ๋ฐฉ์ ์์ ๋๋ ค์ ๊ฐ์ ์ฐ์ถํ๋ ์์ฌ์์ ์ด ๊ณ์ ์ผ์ด๋๊ธฐ ๋๋ฌธ์ด๋ค. ์ฐจ๋ผ๋ฆฌ nil๊ฐ์ ๋ฃ์๋ค๊ฐ ์ ์ฝ๊ฐ์ ๋ฃ์ด์ฃผ์ด์ผํ๋ค. (nil์ด๋ฉด ๊ณ์ฐ์ ์ํ๋๊น) ์ด๋ ๊ฒ ์์ง์๊ฒ ๋ถํ์ํ ๋ฐฉ์ ์ ๊ณ์ฐ์ ํ๊ฒ ๋ง๋๋ ๊ฑธ WWDC์์๋ Churning (ํ์ ๋ค) ์ด๋ผ๊ณ ํํํ๋ค.
๊ตฌ์ฒด์ ์ธ ํธ์ถ ์์๋ ์์ ๊ฐ๋ค. ์ด๋ก์์ ๋ทฐ์ปจ ๋ผ์ดํ์ฌ์ดํด์ด๊ณ ํ๋์์ ๋ทฐ ๋๋ก์ ์ฌ์ดํด์ด๋ค.
'๐ฆ Flutter' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Flutter Widget์ ์๋์๋ฆฌ (0) | 2024.05.10 |
---|---|
| Combine | 4. Filtering Operators (0) | 2024.05.09 |
| Combine | 3. Transforming Operators (0) | 2024.05.08 |
| Combine | 2. Operators and Subjects (0) | 2024.05.07 |
ViewController์ ์๋ช ์ฃผ๊ธฐ (0) | 2024.05.06 |