์ค๋ ์ฝ๋ฉํ ์คํธ ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ๋ฐ๊ฒฌํ ์๋ฌ์ฌํญ์ ๋ํด์ ํฌ์คํ ํ๋ ค๊ณ ํ๋ค. ๋ฐ๊ฒฌํ ๋ฌธ์ ๋ ๋ฐ๋ก ์ด๊ฒ.
โ ๏ธ ์๋ฌ ์ฌํญ
Cannot convert value of type 'Any' to expected argument type 'Int'.
Any๋ฅผ Int ๋ก ๋ณํํ ์ ์๋ค?? ๊ทธ๋๊น ์ด ์๋ฌ๋ ๋๋ถ๋ถ type ์ด ๋ค๋ฅผ ๋ ๋ฐ์ํ๋ ์๋ฌ๋ก ์๊ณ ์๋๋ฐ, ์ง๊ธ ์ ์ฝ๋์์ next๋ก ์ง์ ๋ ๊ฐ์ด Int ๊ฐ ์๋๋ผ Any ํ์ ์ด๋ผ๋ ๋ป์ธ ๊ฒ ๊ฐ๋ค.
๊ทผ๋ฐ graph ์์ ๋ค์ด๊ฐ์๋ ๋ชจ๋ ์์๋ Int ์ธ๋ฐ, ์ ์ด๋ฐ ์๋ฌ๊ฐ ๋ฐ์ํ ๊น?
๋ฐ๋ก๋ฐ๋ก! ์๋์ฒ๋ผ, ์ด๋ฐ์ ๋ด๊ฐ 2์ฐจ์ ๋ฐฐ์ด์ธ graph๋ฅผ ์ ์ํ ๋, array์์ [] ๋น๋ฐฐ์ด์ ํ์ ์ง์ ์์ด ๋ฃ์ด์ฃผ์๊ธฐ ๋๋ฌธ์ Any๋ก ํ์ ์ด ์ค์ ๋ ๊ฒ์ด๋ค.
var graph = Array(repeating: [], count: nm[0]+1)
๊ทธ๋์ ํด๋น graph ์์์ next๋ฅผ ๋ถ๋ฌ์ฌ๋๋ ์๋ ์ฌ์ง์ฒ๋ผ Int๋ก ๋ถ๋ฌ์ ์ง์ง๋ง,
graph ๋ด๋ถ์ array ๊ทธ ์์ฒด๋ anyํ์ ์ ๋ด๋ array ์ด๊ธฐ ๋๋ฌธ์ธ ๊ฒ์ผ๋ก ์ถ์ ๋๋ค.
๋ฐ๋ผ์ ํด๋น ์๋ฌ๋ฅผ "ํ์ ์บ์คํ "์ด๋ผ๋ ๊ฐ๋ ์ ์ฌ์ฉํด์ ๊ณ ์ณ์ฃผ์ด์ผ ํ๋ค. (ํน์ 2์ฐจ์ ๋ฐฐ์ด์ ๋ง๋ค ๋, [[Int]] ํํ๋ก ๋ง๋ค์ด์ฃผ์ด๋ ์๋ฌ๋ ํด๊ฒฐ๋๋ค.)
์ด๋ ๊ฒ!! ์ด์ ํ์ ์บ์คํ ์ ๋ํ ๊ฐ๋ ์ ์กฐ๊ธ ์ง๊ณ ๋์ด๊ฐ๋ณด์.
๐ค ํ์ ์บ์คํ ์ ํํ์ (as)
ํ์ ์บ์คํ ์๋ ๋ค๊ฐ์ง ํํ์์ด ์กด์ฌํ๋ค.
a is Int
a as Int
a as? Int
a as! Int
์ด๋ ๊ฒ is, as, as?, as! ์ธ๊ฐ์ง๊ฐ ์กด์ฌํ๋ค.
a๊ฐ ๋ณํํ Int์ ํธํ๋๋ค๋ฉด, ๋ณํํ Int๋ก ์บ์คํ ๋ ์ธ์คํด์ค๋ฅผ ๋ฆฌํดํ๋ค. ๊ฐ๋จํ๊ฒ ์ค๋ช ํด๋ณด์๋ฉด,
is : ๋ฐํ์ ์์ ์์ ํ์
์ ์ฒดํฌํ๋ ์ฐ์ฐ์๋ก ๋ฐํ๊ฐ์ Bool ํํ์ด๋ค.
as : ์ปดํ์ผ ๋จ๊ณ์์ ์บ์คํ
์ด ์คํ๋๋ค. ํน์ type์ผ๋ก ์บ์คํ
์ด ์ฑ๊ณตํ ๋๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
as? : ๋ฐํ์์์ ์บ์คํ
ํ์ฌ ํน์ type ์ ์ต์
๋ ๊ฐ์ ๋ฆฌํดํ๋ค. ์ฑ๊ณตํ๋ฉด ์ต์
๋ ๊ฐ์ ๋ฐํํ๊ณ , ์คํจํ๋ฉด nil ์ ๋ฐํํ๋ค.
as! : ๋ฐํ์์์ ํน์ type์ผ๋ก ๊ฐ์ ์บ์คํ
ํ๋ค. ์บ์คํ
์ ์คํจํ ๊ฒฝ์ฐ, ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์๋ค.
์ง๊ธ ๋ด๊ฐ ์ ๋ฌธ์ ์์ ์ฌ์ฉํ ํ์
์บ์คํ
์, ๊ทธ๋ฅ ๊ฐ์ ๋ก Int ํ์
์ผ๋ก ๋ฐ๊พธ์ด์คฌ๋ค๊ณ ์๊ฐํ๋ฉด ํธํ๋ค.
ํ์ง๋ง ํ์
์บ์คํ
์ ์ฃผ๋ก, class ์ ํจ๊ป ์ฌ์ฉ๋๋ค.
๐ค ํ์ ์บ์คํ ์ด๋?
์ธ์คํด์ค์ ํ์
์ ํ์ธํ๊ฑฐ๋ ํด๋น ์ธ์คํด์ค๋ฅผ ์ํผํด๋์ค๋, ํ์ ํด๋์ค๋ก ์ทจ๊ธํ๋ ๋ฐฉ๋ฒ์ด๋ค. (๋ฌด์จ๋ง์ธ๊ฐ..)๋ง ๊ทธ๋๋ก ํ์
์ ๋ญ ๋ณํํด์ฃผ๊ณ ,, ๊ทธ๋ฐ ํ์
๊ณผ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ ํ๋ ๊ฒ ๊ฐ๋ค.
๐ ํ์ ์ ํ์ธํ๋ ์ฐ์ฐ์, is
ํํ์ is type
ํ์ ์ ํ์ธ(์ฒดํฌ)ํด์ฃผ๋ ์ฐ์ฐ์๋ก, ๋ฐํ์ ์์ ์์ ํ์ธ์ด ์ด๋ฃจ์ด์ง๋ค. ํํ์๊ณผ ํ์ธํ๋ ค๊ณ ํ๋ type์ด ๊ฐ์ ๊ฒฝ์ฐ, True๋ฅผ ๋ฐํํ๊ณ ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ false ๋ฅผ ๋ฐํํ๋ค. (์๋ ๋ ธ๋์๋ฌ๋ ๋ฌด์ํ๊ณ ์ค๋ฅธ์ชฝ ๊ฒฐ๊ณผ๊ฐ์ ๋ณด๋ฉด ๋จ)
ํน์ ํํ์์ด type์ ์๋ธํด๋์ค์ธ ๊ฒฝ์ฐ๋ true๋ฅผ ๋ฐํํ๋ค. ๋๋์ฒด ์ด๊ฒ ๋ฌด์จ๋ง์ด๋.
์ ์์ ์์ Human์ด๋ผ๋ ํด๋์ค๋ฅผ Teacher๋ผ๋ ํด๋์ค๊ฐ ์์๋ฐ๊ณ ์๋ค.
์ด๋ teacher๋ผ๋ ์ธ์คํด์ค๋ Teacher ํด๋์ค๋ก๋ถํฐ ์์ฑ๋์๋๋ฐ, Humanํ์
๋ ๋ง์กฑํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๐ ํ์ ์บ์คํ : as
ํํ์ as ๋ณํํ ํ์
ํํ์ as? ๋ณํํ ํ์
ํํ์ as! ๋ณํํ ํ์
- ํํ์์ด ๋ณํํ ํ์ ๊ณผ ํธํ๋๋ค๋ฉด, ๋ณํํ ํ์ ์ผ๋ก ์บ์คํ ๋ ์ธ์คํด์ค๋ฅผ ๋ฆฌํดํ๋ค.
- ์์๊ด๊ณ์ธ ์ ์บ์คํ ๊ณผ ๋ค์ด์บ์คํ ์์ ์ฌ์ฉํ๋ค.
- Any์ AnyObjectํ์ ์ ์ฌ์ฉํ ๊ฒฝ์ฐ, ์์ ๊ด๊ณ๊ฐ ์๋๋๋ผ๋ ์์ธ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค. -- ๋ด๊ฐ ๋ฐ๋ก ์ด ์์ธ์ ์ธ ๊ฒฝ์ฐ๋ฅผ ํ์ฉํด์ ์๋ฌ๋ฅผ ํด๊ฒฐํ ๊ฒ์ด๋ค
์ผ๋จ, anyํ์ ์ as๋ก ํ์ ์ ์บ์คํ ํ ์ ์๋ค๋ ๊ฒ์, ์์์ ์๋ฌ๋ฅผ ํด๊ฒฐํด๋ณด๋ฉด์ ์์์ผ๋๊น, ๋๋ฒ์งธ๋ก ์ฐ์ฌ์๋ "์ ์บ์คํ "๊ณผ "๋ค์ด์บ์คํ "์ ๋ํด ์์๋ณด์.
๐ ์ ์บ์คํ (Upcasting)
์๋ธํด๋์ค ์ธ์คํด์ค๋ฅผ ์ํผํด๋์ค ํ์
์ผ๋ก ์ฐธ์กฐํ๋ค. ๊ทธ๋ฆฌ๊ณ ์
์บ์คํ
์ ํญ์ ์ฑ๊ณตํ๋ค. (์์๊ด๊ณ๋๊น!)
์๋ ์ฝ๋๋ฅผ ๋ณด์. ์๋ ์ฝ๋๋ ์๋ฌ ์์ด ๋ฌด์ฌํ ์คํ๋์๋ค.
people ์ธ์คํด์ค๋ฅผ ์์ฑํ์ ๋, ์ฐ๋ฆฌ๋ ๊ทธ ์์ Human ํ์ ์ ๋ฃ์๋ค. ๊ทผ๋ฐ ๊ทธ ์์ Teacher ๊ณผ Student ํ์ ์ด ๋ค์ด๊ฐ๋๋ฐ๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์์๋ค. ์ด๊ฒ ๋ฐ๋ก ์ ์บ์คํ ! Teacher ๊ณผ Student์ ์ํผํด๋์ค๊ฐ Human ์ด๊ธฐ ๋๋ฌธ์, Human ํด๋์ค๋ก ์ ์บ์คํ ๋๊ฒ์ด๋ค.
์์๊ด๊ณ๋ฅผ ์ด์ฉํ ์ ์บ์คํ ์ ํ๋ฒ ํด๋ณด์.
Human์ด๋ผ๋ ํด๋์ค์ name์ด ์กด์ฌํ๊ณ , Teacher, Student ํด๋์ค๋ Human์ ์์๋ฐ๋๋ค. ๊ทธ๋ฆฌ๊ณ human์ด๋ผ๋ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ , ํด๋น ์ธ์คํด์ค๋ Teacher ํ์ ์ผ๋ก ์์ฑ๋์์ง๋ง as Human ์ด๋ผ๊ณ ์์ฑํด์ ์ ์บ์คํ ํด์ฃผ์๋ค.
๊ทธ๋ ๊ฒ ํ๊ณ human.name ์ด๋ผ๊ณ ์ถ๋ ฅํด๋ณด๋ฉด, Human์ด๋ผ๊ณ ์ ์บ์คํ ๋์๊ธฐ ๋๋ฌธ์ ๋ถ๋ชจํด๋์ค Human์ name์ ์ ์์ ์ผ๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ์ง๋ง, ์๋ธํด๋์ค์ธ Teacher ์ ๋ฉค๋ฒ์ธ subject์๋ ์ ๊ทผํ ์ ์๋ค. ์ฆ, ์ด๋ ๊ฒ ์ ์บ์คํ ํ๊ฒ ๋๋ฉด, Human์๋ง ์ ๊ทผ ๊ฐ๋ฅํ๋๋ก ํ์ ๋๋ ๊ฒ์ด๋ค. ๊ทธ๋์ subject์ ์ ๊ทผํ๋ฉด ์๋ฌ๊ฐ ๋๋ ๊ฒ์ด๋ค..
์ด๋ฐ์์ผ๋ก as ๋ฅผ ์์๊ด๊ณ์์ ์ฌ์ฉํ ์ ์๋ค.
๐ ๋ค์ด ์บ์คํ (Downcasting)
๋ค์ด์บ์คํ ์, ์ ์บ์คํ ๋ ์ธ์คํด์ค๋ฅผ ๋ค์ ์๋ ์๋ธํด๋์ค ํ์ ์ผ๋ก ์ฐธ์กฐํ ๋ ์ฌ์ฉํ๋ค. ๋ค์ด์บ์คํ ์ ์คํจํ ์๋ ์๊ธฐ ๋๋ฌธ์, as?๋ as!๋ฅผ ์ฌ์ฉํ๋ค.
์ด ์ฝ๋์์, human์ ์ ์บ์คํ ์ ํตํด Human ์ด๋ผ๋ ํด๋์ค์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๊ฒ ๋์๋ค. ํ์ง๋ง ์ด๋ Teacher๋ผ๋ ์๋ธํด๋์ค์ ๋ค์ ์ ๊ทผํ๊ณ ์ถ๋ค๋ฉด? ๋ค์ด์บ์คํ ์ ์ฌ์ฉํ๋ค.
Human ํ์ ์ผ๋ก ์ ์บ์คํ ๋ human ์ธ์คํด์ค๋ฅผ ๋ค์ ํ์ ํด๋์ค์ธ Teacherํ์ ์ผ๋ก ๋ณํํด์ ๋ฃ์ด์ค ์ฝ๋์ด๋ค. ์ด๊ฒ ๋ฐ๋ก ๋ค์ด์บ์คํ !
์ด๋ ๊ฒ ํ๊ฒ ๋๋ฉด, ์๋ ์ฝ๋ ์ฒ๋ผ teacher ๋ณ์๋ ์๋ธํด๋์ค์ธ Teacher์ ๋ฉค๋ฒ์ธ subject์๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
์ ์์ ์ผ๋ก ์ ๊ทผํ์ฌ, math๊ฐ ์ถ๋ ฅ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์ฌ๊ธฐ์ as? ์ as!์ ์ฐจ์ด์ ์, ์ต์ ๋๊ฐ์ผ๋ก ๋ฐํํ๋๋, ๊ฐ์ ๋ก ๊ทธ๋ฅ ๋ค์ด์บ์คํ ์ ์ํค๋๋์ ์ฐจ์ด์ด๋ค. ์์์ ์ค๋ช ํ๋ฏ, ์๋์ ๊ฐ์ ๊ฐ๋ ์ผ๋ก ์ดํดํ๋ฉด ๋๋ค.
as? : ๋ฐํ์์์ ์บ์คํ
ํ์ฌ ํน์ type ์ ์ต์
๋ ๊ฐ์ ๋ฆฌํดํ๋ค. ์ฑ๊ณตํ๋ฉด ์ต์
๋ ๊ฐ์ ๋ฐํํ๊ณ , ์คํจํ๋ฉด nil ์ ๋ฐํํ๋ค.
as! : ๋ฐํ์์์ ํน์ type์ผ๋ก ๊ฐ์ ์บ์คํ
ํ๋ค. ์บ์คํ
์ ์คํจํ ๊ฒฝ์ฐ, ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๊ณผ์ฐ ์ด๊ฒ ์ฑ๊ฐ๋ฐ์ ํ ๋ ํ์ ์์ ์ด๋ป๊ฒ ์ฌ์ฉ๋ ๊น? ๊ถ๊ธํ๋ค,,, ์์ง ์ฌ์ฉํด๋ณธ์ ์ด Any ํ์ ์ ๋ณํํ ๋ ๋ฐ์ ์๋ค ใ