๊ทธ ๋์ ๋ง์ฐํ๊ฒ๋ ํ์ ์ด๋ ธํ ์ด์ (๋ช ์)๊ฐ ์ปดํ์ผ ์๋๊ฐ ๋ ๋น ๋ฅด๋ค๊ณ ์๊ฐํ๋์ง๋ผ ์๋ฌด ์๊ฐ ์์ด ํ์ ๋ช ์๋ฅผ ํ๋ ์ต๊ด์ ๋ค์ด๊ณ ์์๋ค. ๊ทธ๋ฌ๋ ์ต๊ทผ ๋ฃ๊ณ ์๋ ๊ต์ก ๊ณผ์ ์์ ๋ฉํ ๋๊ป์ ํ์ ์ถ๋ก ์ ํ๋ ๊ฒ์ด ๋ ๋์๋ณด์ธ๋ค๋ผ๋ ๋ง์์ ํด์ฃผ์ จ๊ณ , ์์ธ์ง ๊ถ๊ธํ๋์ง๋ผ ์ฌ์ญค๋ณด๊ฒ ๋์๋ค. ๋ต๋ณ ์ฃผ์ ๊ฒ์ผ๋ก๋ ์ปดํ์ผ๋ฌ์ ์ฑ๋ฅ์ด ์ ์ ๋ ๊ฐ์ ๋๊ณ ์๊ณ , ํ์ ์ถ๋ก ์ด ์ปดํ์ผ ์๋๊ฐ ๋ ๋น ๋ฅด๋ค๋ ์คํ ๊ฒฐ๊ณผ๋ ์๋ค๊ณ ๋ต๋ณ์ฃผ์ จ๋ค.
์ค์ ๋ก ์๋์ ์ฒจ๋ถํ ๋งํฌ๋ฅผ ๋ณด๋ฉด ๊ฐ๋จํ ์คํ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํด๋ณผ ์ ์๋ค.
https://forums.swift.org/t/regarding-swift-type-inference-compile-time-performance/49748/2
let a = "hello, world!" // type is inferred
let b = String("hello, world!") // type is inferred from String(...) and then passed to the root (the constant b)
let c: String = .init("hello, world!") // type inference is not required
let d: String = "hello, world!" // type inference is not required
๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด 1๋ฒ(ํ์ ์ถ๋ก )์ ํ ๊ฒ์ด ์๋๊ฐ ๊ฐ์ฅ ๋นจ๋๋ค.
Benchmark #1: xcrun swiftc -typecheck a.swift
Time (mean ยฑ ฯ): 175.7 ms ยฑ 3.5 ms [User: 82.9 ms, System: 81.9 ms]
Range (min โฆ max): 171.0 ms โฆ 182.8 ms 16 runs
Benchmark #1: xcrun swiftc -typecheck b.swift
Time (mean ยฑ ฯ): 224.8 ms ยฑ 2.8 ms [User: 131.1 ms, System: 81.7 ms]
Range (min โฆ max): 220.2 ms โฆ 228.2 ms 13 runs
Benchmark #1: xcrun swiftc -typecheck c.swift
Time (mean ยฑ ฯ): 672.3 ms ยฑ 8.0 ms [User: 568.3 ms, System: 93.7 ms]
Range (min โฆ max): 662.4 ms โฆ 685.1 ms 10 runs
Benchmark #1: xcrun swiftc -typecheck d.swift
Time (mean ยฑ ฯ): 213.3 ms ยฑ 2.0 ms [User: 119.8 ms, System: 81.6 ms]
Range (min โฆ max): 210.2 ms โฆ 216.5 ms 13 runs
๋๋ ํ์ ์ ์ถ๋ก ํ๋๋ฐ ๋ ๋ง์ ๋ฆฌ์์ค๊ฐ ๋ค ๊ฒ์ด๋ผ๊ณ ๊ทธ๋ฅ ์๊ฐํ๊ณ ์์๋๋ฐ ํ์ ์ถ๋ก ์ด ์๋๊ฐ ๋ ๋น ๋ฅด๋ค๋... ๋ฌผ๋ก ์คํ ๊ฒฐ๊ณผ ์ค 1๊ฐ์ง์ด๊ธด ํ์ง๋ง ๋๊ฒ ์ ๊ธฐํ๋ค. ๋ง๋ถ์ฌ์ ๋ฉํ ๋๊ป์๋ ํ์ ์ ๋ช ์ํ๊ฒ ๋๋ฉด ์ปดํ์ผ๋ฌ๊ฐ ๋ช ์๋ ํ์ ๊ณผ ์ด๊น๊ฐ์ ๋น๊ตํ๋ ์์ ์ด ์ถ๊ฐ๋์ด์ ๋ ๋๋ฆฌ๊ณ , ์ ์ด์ ํ์ ๋ช ์์ ํ์ ์ถ๋ก ์๋ ์ฐจ์ด ์์ฒด๋ ๋ฐ๋ฆฌ์ธ์ปจ๋ ๋จ์ ์ฐจ์ด๋ก ๋ฏธ์ธํ๋ค๋ผ๊ณ ๋ง์ ํด์ฃผ์ จ๋ค.
์ปดํ์ผ ์ฑ๋ฅ ์์ฒด์ ์ํฅ์ ํฌ๊ฒ ์ฃผ๋ ๊ฒ์ด ์๋๋ผ๋ฉด, ํ์ ๋ช ์๋ฅผ ํ๋ํ๋ ํด์ฃผ๋ ๊ฒ์ ์ ๋ง ๋นํจ์จ์ ์ธ ์์ ์ผ ๊ฒ์ด๋ค. ํ์ ์ถ๋ก ์ ํ๋ ๋ฐฉํฅ์ผ๋ก ์ฝ๋ ์์ฑ ์ต๊ด์ ๋ฐ๊พธ๋๋ก ํด์ผ๊ฒ ๋ค. ๊ทธ๋ฆฌ๊ณ ํ์คํ ๊ทผ๊ฑฐ ์์ด ๋ง์ฐํ ๋ฌด์์ด ๋ ์ข๊ฒ ๋ค๋ผ๊ณ ์๊ฐํ๋ ๋ ์์ ์ ๋ฐ์ฑํ๊ณ ์ ํ๋ค.
'๐ iOS & Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[WWDC19] Introducing Combine (0) | 2022.08.10 |
---|---|
[iOS] DateFormat, ์ด๊ฑฐํ์ผ๋ก ์ข ๋ ์ฝ๊ฒ ๋ค๋ฃจ๊ธฐ (8) | 2022.08.09 |
[WWDC21] SheetViewController (Session. Customize and resize sheets in UIKit) (0) | 2022.08.02 |
Enum์ ํ์ฉํด TableViewController ๊ตฌ์ฑํ๊ธฐ (1) | 2022.07.19 |
forEach์ for-in์ ๋ํ ๊ณ ์ฐฐ (0) | 2022.07.19 |
๊ทธ ๋์ ๋ง์ฐํ๊ฒ๋ ํ์ ์ด๋ ธํ ์ด์ (๋ช ์)๊ฐ ์ปดํ์ผ ์๋๊ฐ ๋ ๋น ๋ฅด๋ค๊ณ ์๊ฐํ๋์ง๋ผ ์๋ฌด ์๊ฐ ์์ด ํ์ ๋ช ์๋ฅผ ํ๋ ์ต๊ด์ ๋ค์ด๊ณ ์์๋ค. ๊ทธ๋ฌ๋ ์ต๊ทผ ๋ฃ๊ณ ์๋ ๊ต์ก ๊ณผ์ ์์ ๋ฉํ ๋๊ป์ ํ์ ์ถ๋ก ์ ํ๋ ๊ฒ์ด ๋ ๋์๋ณด์ธ๋ค๋ผ๋ ๋ง์์ ํด์ฃผ์ จ๊ณ , ์์ธ์ง ๊ถ๊ธํ๋์ง๋ผ ์ฌ์ญค๋ณด๊ฒ ๋์๋ค. ๋ต๋ณ ์ฃผ์ ๊ฒ์ผ๋ก๋ ์ปดํ์ผ๋ฌ์ ์ฑ๋ฅ์ด ์ ์ ๋ ๊ฐ์ ๋๊ณ ์๊ณ , ํ์ ์ถ๋ก ์ด ์ปดํ์ผ ์๋๊ฐ ๋ ๋น ๋ฅด๋ค๋ ์คํ ๊ฒฐ๊ณผ๋ ์๋ค๊ณ ๋ต๋ณ์ฃผ์ จ๋ค.
์ค์ ๋ก ์๋์ ์ฒจ๋ถํ ๋งํฌ๋ฅผ ๋ณด๋ฉด ๊ฐ๋จํ ์คํ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํด๋ณผ ์ ์๋ค.
https://forums.swift.org/t/regarding-swift-type-inference-compile-time-performance/49748/2
let a = "hello, world!" // type is inferred
let b = String("hello, world!") // type is inferred from String(...) and then passed to the root (the constant b)
let c: String = .init("hello, world!") // type inference is not required
let d: String = "hello, world!" // type inference is not required
๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด 1๋ฒ(ํ์ ์ถ๋ก )์ ํ ๊ฒ์ด ์๋๊ฐ ๊ฐ์ฅ ๋นจ๋๋ค.
Benchmark #1: xcrun swiftc -typecheck a.swift
Time (mean ยฑ ฯ): 175.7 ms ยฑ 3.5 ms [User: 82.9 ms, System: 81.9 ms]
Range (min โฆ max): 171.0 ms โฆ 182.8 ms 16 runs
Benchmark #1: xcrun swiftc -typecheck b.swift
Time (mean ยฑ ฯ): 224.8 ms ยฑ 2.8 ms [User: 131.1 ms, System: 81.7 ms]
Range (min โฆ max): 220.2 ms โฆ 228.2 ms 13 runs
Benchmark #1: xcrun swiftc -typecheck c.swift
Time (mean ยฑ ฯ): 672.3 ms ยฑ 8.0 ms [User: 568.3 ms, System: 93.7 ms]
Range (min โฆ max): 662.4 ms โฆ 685.1 ms 10 runs
Benchmark #1: xcrun swiftc -typecheck d.swift
Time (mean ยฑ ฯ): 213.3 ms ยฑ 2.0 ms [User: 119.8 ms, System: 81.6 ms]
Range (min โฆ max): 210.2 ms โฆ 216.5 ms 13 runs
๋๋ ํ์ ์ ์ถ๋ก ํ๋๋ฐ ๋ ๋ง์ ๋ฆฌ์์ค๊ฐ ๋ค ๊ฒ์ด๋ผ๊ณ ๊ทธ๋ฅ ์๊ฐํ๊ณ ์์๋๋ฐ ํ์ ์ถ๋ก ์ด ์๋๊ฐ ๋ ๋น ๋ฅด๋ค๋... ๋ฌผ๋ก ์คํ ๊ฒฐ๊ณผ ์ค 1๊ฐ์ง์ด๊ธด ํ์ง๋ง ๋๊ฒ ์ ๊ธฐํ๋ค. ๋ง๋ถ์ฌ์ ๋ฉํ ๋๊ป์๋ ํ์ ์ ๋ช ์ํ๊ฒ ๋๋ฉด ์ปดํ์ผ๋ฌ๊ฐ ๋ช ์๋ ํ์ ๊ณผ ์ด๊น๊ฐ์ ๋น๊ตํ๋ ์์ ์ด ์ถ๊ฐ๋์ด์ ๋ ๋๋ฆฌ๊ณ , ์ ์ด์ ํ์ ๋ช ์์ ํ์ ์ถ๋ก ์๋ ์ฐจ์ด ์์ฒด๋ ๋ฐ๋ฆฌ์ธ์ปจ๋ ๋จ์ ์ฐจ์ด๋ก ๋ฏธ์ธํ๋ค๋ผ๊ณ ๋ง์ ํด์ฃผ์ จ๋ค.
์ปดํ์ผ ์ฑ๋ฅ ์์ฒด์ ์ํฅ์ ํฌ๊ฒ ์ฃผ๋ ๊ฒ์ด ์๋๋ผ๋ฉด, ํ์ ๋ช ์๋ฅผ ํ๋ํ๋ ํด์ฃผ๋ ๊ฒ์ ์ ๋ง ๋นํจ์จ์ ์ธ ์์ ์ผ ๊ฒ์ด๋ค. ํ์ ์ถ๋ก ์ ํ๋ ๋ฐฉํฅ์ผ๋ก ์ฝ๋ ์์ฑ ์ต๊ด์ ๋ฐ๊พธ๋๋ก ํด์ผ๊ฒ ๋ค. ๊ทธ๋ฆฌ๊ณ ํ์คํ ๊ทผ๊ฑฐ ์์ด ๋ง์ฐํ ๋ฌด์์ด ๋ ์ข๊ฒ ๋ค๋ผ๊ณ ์๊ฐํ๋ ๋ ์์ ์ ๋ฐ์ฑํ๊ณ ์ ํ๋ค.
'๐ iOS & Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[WWDC19] Introducing Combine (0) | 2022.08.10 |
---|---|
[iOS] DateFormat, ์ด๊ฑฐํ์ผ๋ก ์ข ๋ ์ฝ๊ฒ ๋ค๋ฃจ๊ธฐ (8) | 2022.08.09 |
[WWDC21] SheetViewController (Session. Customize and resize sheets in UIKit) (0) | 2022.08.02 |
Enum์ ํ์ฉํด TableViewController ๊ตฌ์ฑํ๊ธฐ (1) | 2022.07.19 |
forEach์ for-in์ ๋ํ ๊ณ ์ฐฐ (0) | 2022.07.19 |