์ฝ๋ ๋ฆฌ๋ทฐ ๋ต๋ณ ์์ฑํ๋ฉด์ ์ ๋ฆฌํ ๋ด์ฉ
if let vs. guard let
1. ์์(let)์ ์ฌ์ฉ๋ฒ์๊ฐ ๋ค๋ฆ
๋๋ค.
์ต์
๋ ๋ฐ์ธ๋ฉ๋ ์์์ scope๊ฐ ๋ค๋ฆ
๋๋ค. ์ฆ, ์์๋ฅผ ์ฌ์ฉํ ์ ์๋ ๋ฒ์๊ฐ ๋ค๋ฆ
๋๋ค.
if let ๊ฐ์ ๊ฒฝ์ฐ, ์ต์
๋ ๋ฐ์ธ๋ฉ๋ ์์๋ฅผ if๋ฌธ ๋ฐ์์ ์ฐ๋ ๊ฒ์ด ๋ถ๊ฐํ๊ณ
guard let์ ๊ฒฝ์ฐ์๋ ํด๋น ์์๋ฅผ ํจ์ ๋ด์์ ์ง์ญ ์์์ฒ๋ผ ์์ ๋กญ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค. (๋จ, else๋ฌธ์์๋ ์ฌ์ฉ๋ถ๊ฐ)
2. else์ ์๋ต ๊ฐ๋ฅ ์ฌ๋ถ์ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
if let์ ํด๋น ์กฐ๊ฑด์ด true์ธ ๊ฒฝ์ฐ๋ฅผ ๊ฐ์กฐํ๋ ๋ฌธ๋ฒ์
๋๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ else๊ตฌ๋ฌธ์ ๊ผญ ์จ์ฃผ์ง ์์๋ ๋ฉ๋๋ค.
ํ์ง๋ง, guard let์ ๊ฒฝ์ฐ nil์ธ ๊ฒฝ์ฐ์ ๋ฌด์กฐ๊ฑด ํจ์๋ฅผ ์ข
๋ฃ์์ผ๋ฒ๋ฆฌ๊ธฐ ๋๋ฌธ์ else ๊ตฌ๋ฌธ์ ๊ผญ ์จ์ฃผ์ด์ผ ํฉ๋๋ค.
๋ํ, else๊ตฌ๋ฌธ ์์ return, break ๋ฑ๊ณผ ๊ฐ์ด ํจ์๋ฅผ ์ข
๋ฃ์ํฌ ์ ์๋ ๋ช
๋ น์ด๊ฐ ๊ผญ ํ์ํฉ๋๋ค.
๊ฐ๊ฐ์ ์ด๋จ ๋ ์ฌ์ฉํ๋ ๊ฒ ์ข์๊น?
if ๊ตฌ๋ฌธ์์ ์กฐ๊ฑด์ด ์ฐธ์ด ์๋ ์, ํด๋น ํจ์๋ฅผ ์ข ๋ฃ ์ํค๊ฑฐ๋ ๋ฃจํ, ์กฐ๊ฑด๋ฌธ์์ ๋น ๋ฅด๊ฒ ํ์ถ์ํค๊ณ ์ถ์ ๊ฒฝ์ฐ guard let์ ์ฌ์ฉํ๊ณ ์กฐ๊ฑด์ด ์ฐธ์ด ์๋๋๋ผ๋ ์ฝ๋๋ฅผ ๊ณ์ ์งํํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ๋ if let์ ์ฌ์ฉํ๊ฒ ๋๋ ๊ฒ ๊ฐ์!
์์ ์ ์ ๋ฆฌ๋ฅผ ์ ํด๋จ๋ค...
์ ๊ทผ ์ ์ด (Access Control )
์ ์ธ, ํ์ผ, ๋ชจ๋์ ์ํด ์ฝ๋์ ๊ฐ์์ฑ์ ๊ด๋ฆฌํฉ๋๋ค.
์ ๊ทผ ์ ์ด (Access control) ๋ ๋ค๋ฅธ ์์ค ํ์ผ๊ณผ ๋ชจ๋์์ ์ฝ๋ ์ ๊ทผ์ ๋ํด ์ ํํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ์ฝ๋์ ๊ตฌํ ์ธ๋ถ๋ฅผ ์จ๊ธฐ๊ณ ํด๋น ์ฝ๋์ ์ ๊ทผํ๊ณ ์ฌ์ฉ๋ ์ ์๋ ๊ธฐ๋ณธ ์ธํฐํ์ด์ค๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค.
ํน์ ์ ๊ทผ ์์ค์ ๊ฐ๋ณ ํ์ (ํด๋์ค, ๊ตฌ์กฐ์ฒด, ๊ทธ๋ฆฌ๊ณ ์ด๊ฑฐํ) ๋ฟ๋ง ์๋๋ผ ํด๋น ํ์ ์ ์ํ๋ ํ๋กํผํฐ, ๋ฉ์๋, ์ด๊ธฐํ ๊ตฌ๋ฌธ๊ณผ ์๋ธ ์คํฌ๋ฆฝํธ์ ํ ๋นํ ์ ์์ต๋๋ค. ํ๋กํ ์ฝ์ ์ ์ญ ์์, ๋ณ์, ๊ทธ๋ฆฌ๊ณ ํจ์์ ๋ง์ฐฌ๊ฐ์ง๋ก ํน์ ์ปจํ ์คํธ๋ก ์ ํ๋ ์ ์์ต๋๋ค.
์ ๊ทผ ์์ค (Access Levels)
Swift๋ ์ฝ๋ ๋ด์์ ์ํฐํฐ์ ๋ํด 5๊ฐ์ ๋ค๋ฅธ ์ ๊ทผ ์์ค(access levels) ์ ์ ๊ณตํฉ๋๋ค. ์ด ์ ๊ทผ ์์ค์ ์ํฐํฐ๊ฐ ์ ์๋ ์์คํ์ผ๊ณผ ๊ด๋ จ๋๋ฉฐ ์์ค ํ์ผ์ด ์ํ ๋ชจ๋๊ณผ ๊ด๋ จ๋ฉ๋๋ค.
*์ํฐํฐ(entity): ์ ๊ทผ์ ์ด๋ฅผ ์ ์ฉํ ์ ์๋ ์ฝ๋์ ๋ค์ํ ์ธก๋ฉด์ ์นญํจ(ํ๋กํผํฐ, ํ์ , ๋ฉ์๋ ๋ฑ)
Open, Public
open ์ ๊ทผ ๊ณผ public ์ ๊ทผ์ ์ ์ํ ๋ชจ๋์ ๋ชจ๋ ์์ค ํ์ผ๊ณผ ์ ์ํ ๋ชจ๋์ ๊ฐ์ ธ์ค๊ณ (import) ๋ค๋ฅธ ๋ชจ๋์ ์์ค ํ์ผ์์ ์ํฐํฐ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ํ๋ ์์ํฌ๋ฅผ ๊ณต๊ฐ ์ธํฐํ์ด์ค๋ก ์ง์ ํ ๋ open ๋๋ public ์ ๊ทผ์ ์ฌ์ฉํฉ๋๋ค.
Open๊ณผ Public์ ์ฐจ์ด์
Open ์ ๊ทผ์ ํด๋์ค์ ํด๋์ค ๋ฉค๋ฒ์๋ง ์ ์ฉ๋๊ณ , ๋ชจ๋ ์ธ๋ถ์ ์ฝ๋๋ฅผ ์๋ธํด๋์ฑํ๊ณ ์ฌ์ ์ํ ์ ์๋ค๋ ์ ์์ public ์ ๊ทผ๊ณผ ๋ค๋ฆ ๋๋ค. Open ์ ๊ทผ์ ๊ฐ์ฅ ๋์ (๊ฐ์ฅ ์ ์ ์ ์ฝ) ์ ๊ทผ ์์ค์ ๋๋ค.
Internal
Internal ์ ๊ทผ ์ ์ ์ํ ๋ชจ๋์ ๋ชจ๋ ์์ค ํ์ผ ๋ด์์ ์ฌ์ฉํ ์ ์์ง๋ง ํด๋น ๋ชจ๋ ์ธ๋ถ์ ์์ค ํ์ผ์์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฑ ๋๋ ํ๋ ์์ํฌ์ ๋ด๋ถ ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ํ ๋ internal ์ ๊ทผ์ ์ฌ์ฉํฉ๋๋ค.
File-private
File-private ์ ๊ทผ ์ ์์ฒด ์ ์ํ ์์ค ํ์ผ๋ก ์ํฐํฐ์ ์ฌ์ฉ์ ์ ํํฉ๋๋ค. ์ธ๋ถ ๋ด์ฉ์ ํ์ผ ์ ์ฒด์์ ์ฌ์ฉ๋๊ณ ๊ธฐ๋ฅ์ ํน์ ๋ถ๋ถ์ ๊ตฌํ ์ธ๋ถ์ ๋ณด๋ฅผ ๊ฐ๋ฆฌ๊ธฐ ์ํด file-private ์ ๊ทผ์ ์ฌ์ฉํฉ๋๋ค.
Private
Private ์ ๊ทผ ์ ๋๋ฌ์ธ์ธ ์ ์ธ๊ณผ ๊ฐ์ ํ์ผ์ ์๋ ํด๋น ์ ์ธ์ ํ์ฅ์ผ๋ก ์ํฐํฐ์ ์ฌ์ฉ์ ์ ํํฉ๋๋ค. ์ธ๋ถ ๋ด์ฉ์ ๋จ์ผ ์ ์ธ ๋ด์์๋ง ์ฌ์ฉ๋๊ณ ๊ธฐ๋ฅ์ ํน์ ๋ถ๋ถ์ ๊ตฌํ ์ธ๋ถ์ ๋ณด๋ฅผ ๊ฐ๋ฆฌ๊ธฐ ์ํด private ์ ๊ทผ์ ์ฌ์ฉํฉ๋๋ค. private ์ ๊ทผ์ ๊ฐ์ฅ ์ ์ (๊ฐ์ฅ ๋์ ์ ์ฝ) ์ ๊ทผ ์์ค์ ๋๋ค.
์ ๊ทผ ์ ์ด ๊ตฌ๋ฌธ (Access Control Syntax)
์ํฐํฐ์ ์ ์ธ์ ์์์ open, public, internal, fileprivate, private ์์์ด ์ค ํ๋๋ฅผ ์์น์์ผ ์ํฐํฐ์ ๋ํ ์ ๊ทผ ์์ค์ ์ ์ํฉ๋๋ค. (๋ณ๋ ์ง์ ์๋ค๋ฉด ๋ํดํธ ์ ๊ทผ ์์ค์ internal)
open class SomeOpenClass {}
public class SomePublicClass {}
internal class SomeInternalClass {}
fileprivate class SomeFilePrivateClass {}
private class SomePrivateClass {}
open var someOpenVariable = 0
public var somePublicVariable = 0
internal let someInternalConstant = 0
fileprivate func someFilePrivateFunction() {}
private func somePrivateFunction() {}
์ฐธ๊ณ ์๋ฃ: https://docs.swift.org/swift-book/documentation/the-swift-programming-language/accesscontrol/
์์กด์ฑ ์ฃผ์ ๋ฐฉ์
1. Constructor Injection
์์ฑ์(initializer)๋ฅผ ์ด์ฉํด ์ธ๋ถ๋ก๋ถํฐ ํ์ํ ์์กด์ฑ์ ์ฃผ์ ๋ฐ๋ ๋ฐฉ์
2. Property Injection
ํ๋กํผํฐ๋ฅผ ํตํด ์์กด์ฑ์ ์ฃผ์ ๋ฐ๋ ๋ฐฉ์
(๊ฐ์ฒด ์์ฑ ํ ๋์ค์ ์์กด์ฑ์ด ์์ฑ๋๋ ์ํฉ์์ ์ฌ์ฉ)
3. Method Injection
public method๋ฅผ ์ด์ฉํด ์์กด์ฑ์ ์ฃผ์ ํ๋ ๋ฐฉ์
4. Interface Injection
์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํด ์์กด์ฑ์ ์ฃผ์ ํ๋ ๋ฐฉ์(Swift์์๋ ์ฃผ๋ก ํ๋กํ ์ฝ ์ด์ฉ)
์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๊ธด๋ฐํ๊ฒ ์ฐ๊ฒฐ๋์ด ์๋ ์์กด์ฑ์ด ์ฝํด์ ธ ๋ชจ๋๊ณผ ๋ชจ๋ ์ฌ์ด์ ๊ฒฐํฉ์ด ์ค์ด๋ ๋ค๋ ์ฅ์ ์ด ์๋ค.
@discardableResult
@discardableResult ์ดํธ๋ฆฌ๋ทฐํธ๋ ํจ์์ ๋ฐํ๊ฐ์ ๋ฌด์ํ๊ณ ์ฌ์ฉํ์ง ์์๋ ๋๋ ๊ฒ์ ๋ํ๋ ๋๋ค.
ํญ์ ์ฌ์ฉํ ํ์๊ฐ ์๋ ๊ฐ์ ๋ฐํํ๋ ํจ์๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ์ ์ฉํ ๋๊ตฌ์ ๋๋ค.
return ๊ฐ์ ํญ์ ์ฌ์ฉํ์ง ์๋ ํจ์์ @discardableResult๋ฅผ ๋ถ์ฌ์ฃผ๊ฒ ๋๋ฉด ์ฝ๋๋ฅผ ๋ ๊น๋ํ๊ณ ํํ๋ ฅ์๊ฒ ๋ง๋ค ์ ์์ผ๋ฉฐ, ์ปดํ์ผ๋ฌ ๊ฒฝ๊ณ ๋ฉ์์ง ๋ํ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
๋์์ธ ํจํด vs. ์ํคํ ์ฒ ํจํด
์ํํธ์จ์ด ๋์์ธ ํจํด
๋์์ธ ํจํด์ด๋, ์ํํธ์จ์ด ๋์์ธ์์ ๊ณตํต์ ์ผ๋ก ๋ง์ด ๋ฐ์ํ๋ ๋ฌธ์ ์ ๋ํด ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ํด๊ฒฐ์ฑ .
์ํฉ์ ๋ง๊ฒ ์ฌ์ฉ๋ ์ ์๋ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๋ ๋ฐ ์ฐ์ด๋ ํ ํ๋ฆฟ์ ์๋ฏธํ๋ค.
์ฆ, ๋์์ธ ํจํด์ ์ํํธ์จ์ด ์ค๊ณ์์ ๊ณตํต์ผ๋ก ๋ฐ์ํ๋ ๋ฌธ์ ์ ๋ํด ์์ฃผ ์ฐ์ด๋ ์ค๊ณ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ ํจํด!
๋ฌธ์ ์ํฉ์ ๋ํ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ํด๊ฒฐ๋ฐฉ๋ฒ์ผ๋ก์, ์ผ์ข ์ ์์ด๋์ด๋ผ๊ณ ํ ์ ์์
์ํํธ์จ์ด ์ํคํ ์ฒ ํจํด
์ํคํ ์ฒ ํจํด์ด๋, ์ฃผ์ด์ง ์ํฉ์์์ ์ํํธ์จ์ด ์ํคํ ์ณ์ ๊ณตํต์ ์ธ ๋ฐ์ ๋ฌธ์ ์ ๋ํ ์ผ๋ฐ์ ์ธ, ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ํด๊ฒฐ์ฑ ์ ์๋ฏธํ๋ค.
๊ฐ๋จํ ๋งํ๋ฉด, ์ํคํ ์ฒ ํจํด์ ์ํํธ์จ์ด์ ์ ์ฒด์ ์ธ ๊ทธ๋ฆผ, ๊ตฌ์กฐ๋ฅผ ๋ง๋๋ ํด๊ฒฐ์ฑ
๋์ ์ฐจ์ด์ ?
๋ ๋ค ๊ณตํต์ ์ผ๋ก ๋ฐ์ํ๋ ๋ฌธ์ ์ ๋ํด ์ผ๋ฐํ๋ ์๋ฃจ์ ์ ์ ๊ณตํ๋ ์ ์ ๊ฐ์ผ๋, ์ํคํ ์ณ๋ ๋ ํฐ ๋ผ๋๋ฅผ ๋งํ๊ณ ๋์์ธ ํจํด์ ์ฝ๋ ์์ค์์์ ์ค๊ณ๋ฅผ ๋ด๋นํ๋ ๊ฒ
์ฆ, ์ํคํ ์ณ๊ฐ ๋ ํฐ ๋ฒ์ฃผ, ๋์์ธ ํจํด์ด ๋ ์์ ๋ฒ์ฃผ์ ์ค๊ณ๋ฅผ ๋ด๋น! (but ๋์์ธ ํจํด์ ์ํคํ ์ณ ํจํด์ ํฌํจ๋๋ ํ์๊ฐ๋ ์ด๋ผ๊ณ ๋ณด๊ธด ์ด๋ ค์ธ ๊ฒ ๊ฐ์)
์ ํ์ํ ๊น?๐ค
๋ฌธ์ ์ํฉ์ด ๋ฐ์ํ ๋๋ง๋ค ๋งค๋ฒ ๋ค์ ํด๊ฒฐ์ฑ ์ ์ฐพ๋๋ค๋ฉด ์๊ฐ๊ณผ ๋น์ฉ์ด ๋ง์ด ๋ค์ด๊ฐ ๊ฒ,,
ํน์ ๋ฌธ์ ์ํฉ์ ๋ํ ํจํด์ ๋ฐ๊ฒฌํ๊ณ ํด๊ฒฐ๋ฐฉ์์ ๊ธฐ๋กํด๋๋ค๋ฉด ๋ค์ ๊ทธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ ๋ ๋น ๋ฅด๊ฒ ์ ์ฉํ ์ ์์!
์ฆ, ๋ฐ๋ณต๋๋ ๋ฌธ์ ์ํฉ์ ๋ํ ํด๊ฒฐ์ ๋น ๋ฅด๊ณ ์ฉ์ดํ๊ฒ ํ๊ธฐ ์ํด ๋์์ธ ํจํด, ์ํคํ ์ฒ ํจํด์ด ํ์ํ๋ค!!!!
๋ํ, ํ ํ๋ฆฟํ๋ ํด๊ฒฐ์ฑ ์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ฏ๋ก ํ์ ์ ์์ฌ์ํต ๋ํ ํจ์จ์ ์ผ๋ก ํ ์ ์๋ค.
+ Tuist๋ฅผ ์ด์ฉํ ๋ชจ๋ํ ํด๋ณด๋ ์ค.. ๋๋ฑ๋๋ฑ... ์ถํ์ ์ถ๊ฐํ๊ฒ ์ต๋๋ค...
'๐ ๊ธฐ๋ก > TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] 20231205 (2) | 2023.12.05 |
---|---|
[TIL] 20231204 (1) | 2023.12.04 |
[TIL] 20231129 (1) | 2023.11.29 |
[TIL] 20231128 (3) | 2023.11.29 |
[TIL] 20231124 (1) | 2023.11.25 |