Swift์์ Struct, Class, Enum์ ์ด๊ธฐํํ ์ ์๋ Initializer์ ๋ํด์ ์์๋ณด์. ์ด ๋ถ๋ถ์์ class ์ด๊ธฐํ๋ ๋ค๋ฅธ ์ธ์ด์ ์ด๊ธฐํ ๊ณผ์ ๊ณผ ์ฝ๊ฐ ๋ค๋ฅธ ๋ถ๋ถ์ด ์๋ค. ํด๋น ๋ด์ฉ์ ์ข ๊ธธ์ด์ง ์ ์์ด ๋ค์ ํฌ์คํ ์ผ๋ก ๋๊ฒผ๋ค. ์ด๋ฒ์๋ Value type, Reference type์ ์ด๊ธฐํ ๊ณผ์ ์ ๋ํด ๊ฐ๊ด์ ์ด ๋ด์ฉ์ ์์๋ณด๋ ๊ฒ์ ๋ชฉ์ ์ผ๋ก ํ๋ค. ๊ทธ๋ผ ์์ํ์.
outline
-
class, struct, enum ์ฌ์ฉ ๊ฐ๋ฅ
-
stored property ์ด๊ธฐํ ๋ฐ instance ์ฌ์ฉ ์ํ ์ด๊ธฐํ
-
initailier๋ผ๋ method ์ฌ์ฉ
-
return value ์์
- Objective-C์ ๊ฒฝ์ฐ ์์
-
class์ ๊ฒฝ์ฐ init, deinit์ ์์ผ๋ก ๊ฐ์ง
-
Optional Property์ ๊ฒฝ์ฐ ๋ฐ๋์ ์ด๊ธฐํํ ํ์ ์์
- nil๋ก ์ด๊ธฐํ
-
Constant(
let
) Property๋ initialization ๊ณผ์ ์์ ๋ฐ๋์ ์ด๊ธฐํ ๋์ด์ผ ํจ- ์ดํ ๋ณ๊ฒฝ ๋ถ๊ฐ
-
struct์ ๊ฒฝ์ฐ, init์ ๋ฐ๋ก ์ ์ํ์ง ์์ผ๋ฉด ์๋์ผ๋ก memberwise initializer๊ฐ ๋ง๋ค์ด์ง
-
failable initializer
init?
์ผ๋ก ์ฌ์ฉ๊ฐ๋ฅํจ- ์๋ชป๋ parameter๋ ์ธ๋ถ resource๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ
- override ํด์ non-failable initializer๋ก ๋ง๋ค ์ ์์
-
Closure๋ฅผ ํตํ default property value setting์ด ๊ฐ๋ฅํจ
- class, struct ๊ฐ๋ฅ
Value Type Initialization
- Struct์ ๊ฒฝ์ฐ ์๋์ผ๋ก memberwise initailizer๋ฅผ ๊ฐ๋๋ค.
- ์ด๊ฒ ๋ญ๋
- ์ปค์คํ ์์ฑ์๋ฅผ ์ง์ ํ์ง ์์์ ๊ฒฝ์ฐ์ ์ง๊ฐ ์์์ ๋ง๋ค์ด์ฃผ๋ ๊ฒ
- ์ฒ์์ ๊ฐ์ ์ง์ ํด์คฌ์ ๋์๋ ๋์,
- ์ด๋ฏธ ๊ฐ์ ์ง์ ํด์คฌ๋ค๋ฉด ํน์ ํ๋กํผํฐ๋ง ์ด๊ธฐํํ๋ ๊ฒ๋ ๊ฐ๋ฅ
- ์์์๋ ๋ช
์๋ ์์ฑ์๊ฐ ์์ ๋, ํ๋กํผํฐ๊ฐ ์ ์ธ๋์ด ์์ด
Size()
๋ ์์ฑ์ด ๋์์ง๋ง - ์ง๊ธ๊ณผ ๊ฐ์ ๊ฒฝ์ฐ init์ ๋ช
์์ ์ผ๋ก ์์ฑํ๋ค๋ฉด, ์ถ๊ฐ์ ์ผ๋ก ์ ์ธ๋์ง ์๋๋ค.
- ์ฆ
Rect()
๋ ์์ฑ๋์ง ์๋๋ค๋ ๊ฒ - ๋ง์ฝ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด ์ถ๊ฐ์ ์ผ๋ก ์ ์ธํด์ฃผ์ด์ผ ํ๋ค.
- ์ฆ
Class Initialization
-
๋ชจ๋ stored property๋ initilization๊ณผ์ ์์ ์ด๊ธฐํ๋์ด์ผ ํจ
-
์์ ๊ด๊ณ์ ๋ชจ๋ superclass๋ ๋ง์ฐฌ๊ฐ์ง
-
์ด๋ฌํ ์์ ๊ด๊ณ์์ ์ญ์ ๋ชจ๋ property๋ฅผ ์ด๊ธฐํํ๋ ๊ฒ์ ๋ณด์ฅํ๊ธฐ ์ํด ๋๊ฐ์ง ํํ์ initializer๋ฅผ ๊ฐ์ง
- Designated initializer
- Primary initializer
- ๋ชจ๋ property๋ฅผ ์ด๊ธฐํ ์ํค๋ ์ญํ ์ ํจ
- Superclass์ property๋ฅผ ์ด๊ธฐํํ๊ธฐ ์ํด super์ init์ ์ฌ์ฉ
- ๋ชจ๋ class๋ ํ๋ ์ด์์ ์ง๋ช ์์ฑ์๋ฅผ ๊ฐ์ง
- ๋ณดํต 1๊ฐ์
Convenience initializer
- Secondary initializer
- ์ผ๋ถ property์์ default๊ฐ์ ์ฌ์ฉํ ๋ ์ฌ์ฉ
- ๋ด๋ถ์์ designated intializer๋ฅผ ํธ์ถํจ
- ํน์ usecase์์ ์ฌ์ฉ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ์ฌ์ฉ
- Designated initializer
Delegation Rule
- Designated initializer๋ ๋ฐ๋์ ์ super์ designated initializer๋ฅผ ํธ์ถํด์ผํจ
- convinience initializer๋ ๋ฐ๋์ ๊ทธ class์ ๋ค๋ฅธ initializier๋ฅผ ํธ์ถํด์ผ ํจ
- convenience intializer๋ ์ต์ข ์ ์ผ๋ก designatied initializer๋ฅผ ํธ์ถํ๋ ํํ์ด์ผ ํจ
Two-Phase Initialization
- Phase 1
- initializer ํธ์ถ๋จ
- ์๋ก์ด instance๋ฅผ ์ํ memory๊ฐ alloc๋จ
- memory ์ด๊ธฐํ๋ ์์ง์
- designated intiailizer๊ฐ ๋ชจ๋ stored property์ ๋ํ ์ด๊ธฐํ ์งํ
- designated initializer๊ฐ super class์ initializer๋ฅผ ํธ์ถ
- root class๊น์ง ๋ฐ๋ณต ํธ์ถ
- ๋ชจ๋ stored property๊ฐ ์ด๊ธฐํ๋๊ณ phase 1 ์ข ๋ฃ
- Phase 2
- root class๋ก๋ถํฐ ์ญ์ผ๋ก ์ํ
- ๋ชจ๋ class๋ instance๋ฅผ customizerํ ์ ์์
- self์ accessํ๊ณ , property ์์ ํ๊ณ , instance method ํธ์ถ ๊ฐ๋ฅ
- ๋ณด๋ค ์์ธํ ์ค๋ช ์ ๋ค์ ๊ธ์ ์์ฑํ๋๋ก ํ๊ฒ ์
- ์ด๋ ๊ฒ ํ๋ ์ด์ ๋, ๋ชจ๋ stored property๋ฅผ ์ด๊ธฐํํ๊ณ , ๊ทธ ๋ค์์ ๊ฐ์ ๋ณ๊ฒฝํ๋๋ก ํ๊ธฐ ์ํจ์
require initializer
- ๋ชจ๋ subclass๋ค์ด ๊ตฌํํด์ผ ํ๋ initializer
required
์ฌ์ฉ- overriding์์๋
required
์ฌ์ฉํด์ผ ํจ