ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

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๋ณด๋‹ค ์„ฑ๋Šฅ์  ์ด์ ์ด ์žˆ์–ด!'

 

๋ผ๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ณ ์žˆ์œผ๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•

'๐ŸŽ > Swift' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Swift] associatedtype๊ฐ€ ๋ฌด์—‡์ด๋ƒ?  (0) 2023.03.07
[Swift] @discardableResult ๋ž€?  (0) 2023.03.06
[Swift] lazy ํ‚ค์›Œ๋“œ๋ž€?  (2) 2023.01.30
๋Œ“๊ธ€
๋ฐ˜์‘ํ˜•
๋งํฌ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
Total
Today
Yesterday