ํฐ์คํ ๋ฆฌ ๋ทฐ
class๋ func๋ฑ์ ์ ์ํ ๋, ์ฐ๋ฆฌ๋ ์์ final์ด๋ผ๋ ํค์๋๋ฅผ ์ฌ์ฉํ๊ณ ๋ ํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๋ฐ final์ ์ญํ ์ ์ด๋ค ๊ฒ์ผ๊น์??
์ฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก, final์ ๋ง ๊ทธ๋๋ก '๋ง์ง๋ง, ์ ์ผํ'์ด๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๋๋ค.
์ฆ, class์์ final์ ๋ถ์ด๊ฒ๋๋ฉด ํด๋น class๋ '์์ํ ์ ์๋ class'๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
import Foundation
final class ์์๋ถ๊ฐ๋ฅํํด๋์ค{
}
class final์_์์ํด๋ณผ๊น : ์์๋ถ๊ฐ๋ฅํํด๋์ค{
// [Inheritance from a final class '์์๋ถ๊ฐ๋ฅํํด๋์ค'] ๋ผ๋ error๊ฐ ๋ฐ์ํ๋ค.
}
๋ง์ฐฌ๊ฐ์ง๋ก, func์ final์ ๋ถ์ด๊ฒ ๋๋ฉด 'overrideํ ์ ์๋ func'๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
import Foundation
class ์์๊ฐ๋ฅํํด๋์ค{
final func override์๋๋ํจ์(){}
}
class class๋ฅผ_์์ํด๋ณผ๊น : ์์๊ฐ๋ฅํํด๋์ค{
override func override์๋๋ํจ์(){}
// [Instance method overrides a 'final' instance method]๋ผ๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
}
์ด๋ฌํ ํน์ง ๋๋ถ์, final์ ์ฑ๋ฅ์ ์ธ ์ด์ ๋ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค.
์ฝ๊ฒ ์ค๋ช ํ์๋ฉด, ์ฐ๋ฆฌ๊ฐ final๋ก ์ ์ธํ class๋ func๋ ํ๋ก์ ํธ์์ '์ ์ผํจ' ์ ๋ณด์ฅ๋ฐ์ต๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์, run-time๋์ค์ ํจ์ํธ์ถ์ ๊ฒฐ์ ํ์ง ์๊ณ compile-time์์ ํจ์ํธ์ถ์ ๊ฒฐ์ ํ ์ ์๊ฒ ๋ฉ๋๋ค.
์ด๋ฌํ ๊ฐ๋ ์ Static-Dispatch & Dynamic-Dispatch์ ์ฐ๊ด๋์ด ์๋๋ฐ, ์ด ๊ธ์์๋ ๊ตณ์ด ๊น๊ฒ ๋ค์ด๊ฐ์ง๋ ์๊ฒ ์ต๋๋ค.
๋ค๋ง, ์ฐ๋ฆฌ๋
'์~ final๋ก ์ ์ธํ๋ฉด ์์ํ ์ ์๊ฑฐ๋ overrideํ ์๊ฐ ์๊ตฌ๋!
๋ฐ๋ผ์ compile-time์ ํจ์ํธ์ถ์ ๊ฒฐ์ ํ๋ฏ๋ก ์ผ๋ฐ class๋ func๋ณด๋ค ์ฑ๋ฅ์ ์ด์ ์ด ์์ด!'
๋ผ๋ ์ฌ์ค์ ์๊ณ ์์ผ๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค.
'๐ > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] associatedtype๊ฐ ๋ฌด์์ด๋? (0) | 2023.03.07 |
---|---|
[Swift] @discardableResult ๋? (0) | 2023.03.06 |
[Swift] lazy ํค์๋๋? (2) | 2023.01.30 |