generic์ ๋ณด๋ฉด์ ๋ช๋ช ๊ณณ์์ where
ํค์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ณด์๋ค. ํ๋ฒ ์ ๋ฆฌํด์ผ ํ ๊ฒ ๊ฐ์ ๊ณต์ ๋ฌธ์์ ์ฝ์ด๋ณธ๋ค.
Generic Where Clauses
generic์๋ where
์กฐํญ์ ๋ฃ์ด ๋ฐ๋ ํ์
์ ์ธ๋ถ ์ ์ฝ์ ์ถ๊ฐํ ์ ์๋ค.
์ผ๋ฐ where
์ ์ where
ํค์๋๋ก ์์ํ ๋ค์, associated type์ ๋ํ ์ ์ฝ ์กฐ๊ฑด ๋๋ associated type ๊ฐ์ ๋๋ฑ ๊ด๊ณ ๋ฑ์ ์ ์ํ ์ ์๋ค. allItemsMatch
ํจ์๋ ๋๊ฐ์ Container ํ๋กํ ์ฝ์ ์ค์ํ๋ ๊ตฌํ์ฒด๋ฅผ ๋ฐ์ ๋ด์ฉ๋ฌผ์ด ๋ชจ๋ ๊ฐ์์ง ๋น๊ตํ๋ค. ์ด ๋, ๋๊ฐ์ Container์ associted type์ธ Item
ํ์
์ด ์๋ก ๊ฐ์์ง, ๊ทธ๋ฆฌ๊ณ Eqatable
ํ๋กํ ์ฝ์ ์ค์ํ๋์ง์ ๋ํ ์ ์ฝ์ ์ถ๊ฐํ๋ค. ์ด๋ฐ ๊ธฐ๋ฅ์ compile time์ ํ์
์ฒดํฌ๋ฅผ ํ ์ ์๊ธฐ ๋๋ฌธ์ type safeํ๊ฒ ์ฒ๋ฆฌํ ์ ์๋ ๋ฐฉ๋ฒ์ด๋ค.
Extensions with a Generic Where Clause
where
์ ์ extension์๋ ์ถ๊ฐํ ์ ์๋ค.
์์ ๋จ์ํ stack์ ๊ฒฝ์ฐ์๋ element๊ฐ์ ๋๋ฑ ์ฌ๋ถ("=="
)๋ฅผ ํ์ธํ ์ ์์๋ค. ์ด๋ Item์ด Equable
protocol์ ์ค์ํ์ง ์์๊ธฐ ๋๋ฌธ์ด๋ค. ์คํํ๋ฉด compile error๊ฐ ๋จ๊ฒ ๋ ๊ฒ์ด๋ค. ์ด๋ฐ ๊ฒฝ์ฐ, ๋ถ๋ถ์ ์ผ๋ก extension์ Item type์ where
๋ฅผ ํตํ ์ ์ฝ์ ๊ฑธ์ด ๋ถ๋ถ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
๋ง์ฝ equtable์ ์ค์ํ๊ณ ์์ง ์์ ํ์
์ผ๋ก ๋ง๋ค๋ฉด ์ด๋จ๊น?
๋น์ฐํ๊ฒ๋ compile error๊ฐ ๋ฌ๋ค.
Extension with a Protocol where clause
์ด๋ ๊ฒ extension์ where
์ ์ฌ์ฉํด์ ์ถ๊ฐ์ ์ธ ์ ์ฝ์ ๊ฑฐ๋ ๊ฒ์ protocol์์๋ ๊ฐ๋ฅํ๋ค.
protocol์ extension์ ๊ธฐ๋ณธ ๋์์ ์ ์ํ ์ ์๋๋ฐ, ์ด๊ฒฝ์ฐ where์ ํจ๊ป ์ฌ์ฉํ๋ฉด ์ถ๊ฐ์ ์ธ ์ ์ฝ์ ๊ฑธ๋ฉด์ ๊ธฐ๋ณธ๋์๊น์ง ์ฒ๋ฆฌํ ์ ์๋ค. ([9, 9, 9]
๊ฐ ์ฒ๋ฆฌ๊ฐ๋ฅ ํ ๊ฒ์ ์์์ extension Array: Container {}
๋ฅผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.)
Reference