-
[Swift] ํ๋กํ ์ฝ ์์ฑ์ ์๊ตฌ์ฌํญ (Initializer Requirements)iOS/๐ Swift 2021. 1. 19. 14:36
์ฐธ๊ณ ์๋ฃ: Protocols - swift.org
Syntax
ํ๋กํ ์ฝ์์ Initializer ๋ ๋ฉ์๋ ์ ์ธ ๋ฐฉ์๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก { } (curly brace) ์์ด init(...) ๊ณผ ๊ฐ์ ๊ผด๋ก ์ ์ธํด์ค๋๋ค.
protocol SomeProtocol { init(someParameter: Int) }
Protocol ์ ์ฑํํ Class์ Initializer ๊ตฌํ
ํ๋กํ ์ฝ์ ์ฑํํ ํ์ ์ Initializer๋ฅผ designated initializer๋ convenience initializer๋ก ๊ตฌํํ ์ ์์ต๋๋ค.
ํ๋กํ ์ฝ์ class, struct, enum ํ์ ๋ง ์ฑํํ ์ ์์ต๋๋ค.
๋ ๊ฒฝ์ฐ ๋ชจ๋ `required` ํค์๋๋ฅผ initializer ์์ ๋ถ์ฌ์ฃผ์ด์ผ ํฉ๋๋ค.
SomeClass ๋ฅผ ์๋ธํด๋์ฑํ ํด๋์ค๋ค๋ ํด๋น ํ๋กํ ์ฝ์ conform ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
class SomeClass: SomeProtocol { required init(someParameter: Int) { // implementation code } }
๋จ protocol๋ฅผ ๊ตฌํํ๋ ํด๋์ค๊ฐ `final class` ๋ผ๋ฉด `required` ๋ฅผ ๋ถ์ผ ํ์๊ฐ ์์ต๋๋ค.
`final class`๋ ์๋ธํด๋์ฑ์ด ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
/* required ํค์๋๊ฐ ์์ด๋ Compile Error ๊ฐ ๋ฐ์ํ์ง ์๋๋ค.*/ final class myClass: SomeProtocol { init(number: Int) { ... } }
๊ด๋ จ ๊ธ: Preventing Overrides - swift.org
์ถ๊ฐ์ ์ผ๋ก protocol ์ ์ธ๋ถ์์ initializer์์ `final` ์ ๋ถ์ผ ์ ์๋ค๋ ์ ์ ์๊ธฐํ๊ณ ๊ฐ๊ฒ ์ต๋๋ค.
Failable Initializer Requirements
protocol Something { init?() } struct Some: Something { init() { } }
ํ๋กํ ์ฝ์ ์ ์ธ๋ failable initializer๋ฅผ conforming type์ด non-failable๋ก ๊ตฌํํด๋ ํ๋กํ ์ฝ ์๊ตฌ์กฐ๊ฑด์ ์ถฉ์กฑ๋ฉ๋๋ค.
์ฆ, init?() ์ด๋ init!()์ผ๋ก ์ ์ธ๋ ์์ฑ์๋ฅผ init() ์ผ๋ก ๊ตฌํํ๋ ๊ฒ
๋ฐ๋๋ก non-failable initailizer๋ non-failable ์ด๊ฑฐ๋ IUO failable initializer๋ก ๊ตฌํํด์ผ ํ๋กํ ์ฝ ์๊ตฌ์กฐ๊ฑด์ด ์ถฉ์กฑ๋ฉ๋๋ค.
init()์ผ๋ก ์ ์ธ๋์๋ค๋ฉด init() ์ด๋ init!() ์ผ๋ก ๊ตฌํ๋์ด์ผํ๋ค๋ ๊ฒ
โ๏ธํ๋กํ ์ฝ ์๊ตฌ์ฌํญ์ ์ต์์กฐ๊ฑด์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํฉ๋๋ค.
๊ด๋ จ ๊ธ: Failable Initializer - Initializer
๋!
๋ค์ ๊ธ: Protocol as Types - Protocols
'iOS > ๐ Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Type Casting Overview - Type Casting (0) 2021.01.21 [Swift] ํ์ ์ผ๋ก์์ ํ๋กํ ์ฝ ( Protocol as Type ) (0) 2021.01.19 [Swift] @main ๊ณผ ์ปค์คํ ์ํธ๋ฆฌ ํฌ์ธํธ (2) 2021.01.19 Mutating Method - Methods (0) 2021.01.18 [Swift] ํ๋กํ ์ฝ ๋ฉ์๋ ์๊ตฌ์ฌํญ (Method Requirements) (0) 2021.01.18