- ๋ค๋ฅธ ์์ค ํ์ผ๊ณผ ๋ชจ๋์์ ์ฝ๋์ ๋ถ๋ถ์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ ์ ์ดํ๋ค.
- ์ฝ๋์ ์ธ๋ถ ๊ตฌํ์ ์จ๊ธฐ๊ณ , ํด๋น ์ฝ๋์ ๊ธฐ๋ฅ์ ์ ๊ทผํ๊ณ ์ฌ์ฉํ๋ ๊ธฐ๋ณธ ์ธํฐํ์ด์ค๋ฅผ ์ง์ ํ๋ค.
- ๊ฐ๋ณ ํ์
(ํด๋์ค, ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ) ๊ณผ ํด๋น ํ์
๋ด์ ์๋ property, method, init, subscript ์ ํ ๋นํ ์ ์๋ค.
- ํ๋กํ ์ฝ ์ญ์๋ ํน์ ์ปจํ
์คํธ๋ก ์ ํํ ์ ์๋ค.
- ๋ช
์ํด์ ์ ๊ทผ ์ ์ด๋ฅผ ํด์ฃผ์ง ์์๋ ๊ธฐ๋ณธ ์ ๊ทผ ์์ค ์ ์ ๊ณตํ๋ค.
- ๋ชจ๋์ด ์๋ ๋จ์ผ ์ฑ์ ์์ฑํ๋ค๋ฉด, ์ ๊ทผ ์ ์ด๋ฅผ ์์ฑํ์ง ์์๋ ๋จ.
1. ๋ชจ๋๊ณผ ์์ค ํ์ผ
- ๋ชจ๋
- ๋จ์ผ ๋จ์๋ก ๋น๋๋๊ณ ์ ๊ณต๋๋ ํ๋ ์์ํฌ
- ์ดํ๋ฆฌ์ผ์ด์
๊ณผ ๊ฐ์ ์ฝ๋ ๋ฐฐํฌ์ ๋จ์ผ ๋จ์ (ํ๋ ์์ํฌ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์ฑ ํ๋)
import
๋ก ๊ฐ์ ธ์ฌ ์ ์๋ ๊ฒ๋ค
- ์์ค ํ์ผ
- ๋ชจ๋ ๋ด์์ ๋จ์ผ Swift ์์ค ์ฝ๋ ํ์ผ (์ง์ง ํ์ผ)
- ํ๋์ ์์ค ํ์ผ ๋น ํ๋์ ๊ฐ๋ณ ํ์
์ ์ ์ํ๋๊ฒ ์ผ๋ฐ์ ์ด๋,
- ๋จ์ผ ์์ค ํ์ผ์ ์ฌ๋ฌ๊ฐ์ ํ์
์ ๋ํ ์ ์๋ฅผ ํ ์ ๋ ์๋ค.
2. ์ ๊ทผ ๋ ๋ฒจ โญ๏ธ
Swift ๋ ์ฝ๋ ๋ด entity ์ ๋ํด ๋ค์ฏ๊ฐ์ง ์ ๊ทผ ์์ค (Access Level) ์ ์ ๊ณตํ๋ค.
- Open / Public
- ์ ์ํ ๋ชจ๋ ๋ด์ ๋ชจ๋ ์์ค ํ์ผ
- import ๋ก ๋ชจ๋์ ๊ฐ์ ธ์จ ๋ค๋ฅธ ๋ชจ๋์ ์์คํ์ผ
- Internal
- ์ ์ํ ๋ชจ๋์ ์์คํ์ผ (ํด๋น ๋ชจ๋ ์ธ๋ถ์์ ๋ถ๊ฐ๋ฅ.)
- ์ฑ / ํ๋ ์์ํฌ์ ๋ด๋ถ ๊ตฌ์กฐ์ฒด๋ฅผ ์ ์ํ ๋ ์ฌ์ฉ
- File-private
- ์์ฒด ์ ์ํ ์์ค ํ์ผ ๋ด์์
- private
- ๋๋ฌ์ธ์ธ ์ ์ธ๊ณผ ๊ฐ์ ํ์ผ์ ์๋ ํด๋น ์ ์ธ์ extension
- ์ธ๋ถ ๋ด์ฉ์ ๋จ์ผ ์ ์ธ ๋ด์์๋ง ์ฌ์ฉ๋๊ณ , ๊ธฐ๋ฅ์ ๊ตฌํ ์ธ๋ถ์ ๋ณด๋ฅผ ๊ฐ๋ฆฌ๊ธฐ ์ํด์ ์ฌ์ฉํ๋ค.
<- Open - Public - Internal - File-Private - Private- >
- Open vs Public
- Open ์ ์ ๊ทผ์ ํด๋์ค์ ํด๋์ค ๋ฉค๋ฒ์๋ง ์ ์ฉ๋๊ณ ,
- ๋ชจ๋ ์ธ๋ถ์ ์ฝ๋๋ฅผ ์์ํ๊ณ ์ฌ์ ์ ํ ์ ์๋ค.
- Open ์ผ๋ก ์์ฑ๋์๋ค? ํด๋น ํด๋์ค๋ฅผ ์์ ํด๋์ค๋ก ์ฌ์ฉํ๋ ๋ค๋ฅธ ๋ชจ๋์ ์ฝ๋๊ฐ ์ด๋ค ์ํฅ์ ๋ผ์น๋์ง ๊ณ ๋ คํ๊ณ ์ค๊ณํ๋ค๋ ๋ป...... ๊ต์ฅํ๋ฐ
- Public ์ ๋ค๋ฅธ ๋ชจ๋์์ ์์์ ๋ถ๊ฐ๋ฅ.
์ ๊ทผ ๋ ๋ฒจ์ ๊ธฐ๋ณธ ์์น
- Entity ๋ ๋ ๋ฎ์ ์ ๊ทผ ์์ค์ ๊ฐ์ง ๋ค๋ฅธ ์ํฐํฐ๋ก ์ ์ํ ์ ์๋ค.
- public ๋ณ์๋ฅผ internal, file-private, private ์ผ๋ก ์ ์ํ ์ ์๋ค.
- ํจ์๋ ํ๋ผ๋ฏธํฐ ํ์
๊ณผ ๋ฐํ ํ์
๋ณด๋ค ๋ ๋์ ์ ๊ทผ ์์ค์ ๊ฐ์ง ์ ์๋ค.
- ํจ์์ ํ๋ผ๋ฏธํฐ, ๋ฆฌํด๊ฐ์๋ ์ ๊ทผํ ์ ์๋๋ฐ ํจ์๋ ์ ๊ทผํ ์ ์์ผ๋ฉด ์๋๋๊น..
๊ธฐ๋ณธ ์ ๊ทผ ๋ ๋ฒจ
- ์์ธ ์ฌํญ์ด ์๊ธด ํ์ง๋ง,
- ๋์ฒด๋ก ๋ชจ๋ ์ํฐํฐ๋ internal
๋จ์ผ ํ๊ฒ ์ฑ์ ๋ํ ์ ๊ทผ ๋ ๋ฒจ
- ๋จ์ผ ํ๊ฒ ์ฑ์ด๋ผ๋ฉด, ๋ชจ๋ ์ธ๋ถ์์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ ํ์๊ฐ ์๋ค.
- ๊ธฐ๋ณธ ์ ๊ณต
internal
๋ก ์ถฉ๋ถํ๋ค.
- ๋ชจ๋ ๋ด์์
private
file-private
์ ์ฌ์ฉํ ์ ์๋ค.
ํ๋ ์์ํฌ์ ๋ํ ์ ๊ทผ ๋ ๋ฒจ
- ๋ค๋ฅธ ๋ชจ๋์์ ํ๋ ์์ํฌ ์ฝ๋์ ์ ๊ทผ์ด ๊ฐ๋ฅํด์ผ ํ๊ธฐ ๋๋ฌธ์
open
, public
์ผ๋ก ๊ณต์ฉ API ๋ฅผ ํ๊ธฐํ๋ค.
- ๋ด๋ถ์์๋
internal
, private
, file-private
์ ์ฌ์ฉํ ์ ์์ผ๋, ๊ณต์ฉ API ๋ ๋ฌด์กฐ๊ฑดopen
, public
์ ๋ ํ
์คํธ ํ๊ฒ์ ๋ํ ์ ๊ทผ ๋ ๋ฒจ
- ์ ๋ ํ
์คํธ ํ๊ฒ์ ๊ฒฝ์ฐ ํ
์คํธ๋ฅผ ์ํด ํ
์คํธ ๋ชจ๋์์ ์ฑ์ ์ฝ๋๋ฅผ ์ฌ์ฉํ ์ ์์ด์ผ ํ๋ค.
- ์ด๋ก ์ ์ผ๋ก๋
open
, public
์ด ๋ง๋๋ฐ,
- ํ
์คํธ์ ๊ฒฝ์ฐ
@testable
๋ก ํ์๋ฅผ ํด์ฃผ๋ฉด, ์ ๋ ํ
์คํธ ํ๊ฒ์ด ๋ด๋ถ ์ํฐํฐ์ ์ ๋ถ ์ ๊ทผํ ์ ์๊ฒ ๋๋ค.
3. ์ ๊ทผ ์ ์ด ๊ตฌ๋ฌธ
์ ๊ทผ ์ ์ด ๋ ๋ฒจ๋ค์ ํค์๋๋ก ์ฌ์ฉํด์ class, property, method ์์ ๋ถ์ธ๋ค.
์์์ด๋ฅผ ์์ฐ๋ฉด internal
public class SomePublicClass {}
internal class SomeInternalClass {}
fileprivate class SomeFilePrivateClass {}
private class SomePrivateClass {}
public var somePublicVariable = 0
internal let someInternalConstant = 0
fileprivate func someFilePrivateFunction() {}
private func somePrivateFunction() {}
4. ์ฌ์ฉ์ ์ ์ ํ์
- ์ฌ์ฉ์ ์ ์ ํ์
์ ์ ์ํ ๋, ๋ช
์์ ์ผ๋ก ์ ๊ทผ ๋ ๋ฒจ์ ์ง์ ํ ์ ์๋ค.
- ์ฌ์ฉ์ ์ ์ ํ์
๋ด์ ํ๋กํผํฐ, ๋ฉ์๋ .. ๋
- file-private, private ์ ๊ฒฝ์ฐ์ ๊ธฐ๋ณธ ์ ๊ทผ ์์ค๋ file-private, private ์ด ๋๊ณ ,
- internal ์ด์์ ์ ๊ทผ ๋ ๋ฒจ์ ์ฃผ๋ฉด ์๋์ ์ผ๋ก internal ์ด ๋๋ค.
- ์ง์ ์ง์ ํ๋ ๊ฒฝ์ฐ์, ๋ณธ์ธ๋ณด๋ค ๋์ ์ ๊ทผ ๋ ๋ฒจ๋ก๋ ์ค์ ํ ์ ์๋ค.
public class SomePublicClass {
public var somePublicProperty = 0
var someInternalProperty = 0
fileprivate func someFilePrivateMethod() {}
private func somePrivateMethod() {}
}
class SomeInternalClass {
var someInternalProperty = 0
fileprivate func someFilePrivateMethod() {}
private func somePrivateMethod() {}
}
fileprivate class SomeFilePrivateClass {
func someFilePrivateMethod() {}
private func somePrivateMethod() {}
}
private class SomePrivateClass {
func somePrivateMethod() {}
}
ํํ
- ํํ์์ ์ฌ์ฉ๋๋ ๋ชจ๋ ํ์
์ ๋ํ ์ ๊ทผ ๋ ๋ฒจ ์ค, ๊ฐ์ฅ ์ ํ์ ์ธ ์ ๊ทผ ๋ ๋ฒจ์ด ํํ์ ์ ๊ทผ ๋ ๋ฒจ์ด ๋๋ค.
- ํ๋๋ internal, ํ๋๋ private ๋ฉด ํํ์ private
ํจ์
- ํ๋ผ๋ฏธํฐ, ๋ฐํ ํ์
์ค ๊ฐ์ฅ ์ ํ์ ์ธ ์ ๊ทผ ๋ ๋ฒจ๋ก ์๋ ๊ณ์ฐ๋๋ค.
- ์๋ ๊ณ์ฐ๋ ๊ฒ๊ณผ ๋ค๋ฅด๋ฉด ๋ช
์์ ์ผ๋ก ์ง์ ํด์ค์ผ ํ๋ค.
private func someFunction() -> (SomeInternalClass, SomePrivateClass) {
}
Enum
- Enum ์ ๊ฐ๋ณ ์ผ์ด์ค๋ Enum ๊ณผ ๊ฐ์ ์ ๊ทผ ๋ ๋ฒจ์ ๊ฐ์ง๋ค.
- ๊ฐ๋ณ ์ผ์ด์ค์ ๋ํด์๋ ์ ๊ทผ ๋ ๋ฒจ์ ๋ค๋ฅด๊ฒ ์ง์ ํ ์ ์๋ค.
public enum CompassPoint {
case north
case south
case east
case west
}
- associated value ์ ๊ฒฝ์ฐ, enum ๋ณด๋ค ๋์ ์ ๊ทผ ๋ ๋ฒจ์ ๊ฐ์ ธ์ผ ํ๋ค.
Nested Types
- Nested Type์ ๊ฐ์ธ๋ ํ์
์ด public ์ด ์๋ ๊ฒฝ์ฐ, ๊ฐ์ธ๋ ํ์
๊ณผ ๋์ผํ๋ค.
- public ์ธ ๊ฒฝ์ฐ์๋ internal (public ์ด์์ผ๋ฉด ์ข๊ฒ ๋ค? -> ๋ช
์ํด์ฃผ์.)
5. ์๋ธ ํด๋์ฑ
- ์ด๋ค ํด๋์ค๊ฐ
- ์ ๊ทผ ์ปจํ
์คํธ์์ ์ ๊ทผํ ์ ์๊ณ ,
- ํ์ ํด๋์ค์ ๋์ผํ ๋ชจ๋์ ์ ์๋์ด ์์ผ๋ฉด
- ํ์ ํด๋์ค์ ์์ํ ์ ์๋ค.
- ํ์ ํด๋์ค๋ ์์ ํด๋์ค๋ณด๋ค ๋์ ์ ๊ทผ ๋ ๋ฒจ์ ๊ฐ์ง ์ ์๋ค.
- ๊ฐ์ ๋ชจ๋์ ์ ์๋์ด ์์ผ๋ฉด, ์ ๊ทผ์ด ๊ฐ๋ฅํ ๋ชจ๋ ๋ฉ์๋, ํ๋กํผํฐ, init, subscript ๋ฅผ ์ฌ์ ์ ํ ์ ์๋ค.
- ๋ค๋ฅธ ๋ชจ๋์ ์ ์๋์ด ์์ผ๋ฉด ์ ๊ทผ ๋ ๋ฒจ์ด open ์ธ ํด๋์ค ๋ฉค๋ฒ๋ฅผ ์ฌ์ ์ ํ ์ ์๋ค.
- ์ฌ์ ์๋ฅผ ํ ๋, ์์ ํด๋์ค์ ์ ์๋ ๊ฒ๋ณด๋ค ์ ๊ทผ ๋ ๋ฒจ์ ๋๊ฒ ์ค์ ํ ์ ์๋ค.
- ํด๋น 'ํ์ ํด๋์ค์ ์ ๊ทผ ๋ ๋ฒจ'๋ณด๋ค ์ข๊ฒ๋ง ์ค์ ํ๋ฉด ๋๋ค.
- ์์ ํด๋์ค์ ์๋ ์ ์๋ ํด๋์ค ๋ฉค๋ฒ์ ์ ๊ทผ ๋ ๋ฒจ์ ์๊ด ์๋ค.
public class A {
fileprivate func someMethod() {}
}
internal class B: A {
override internal func someMethod() {}
}
- ์ ๊ทผ ์ปจํ
์คํธ๊ฐ ๋ง๊ธฐ๋ง ํ๋ฉด, ํ์ ํด๋์ค๋ฉค๋ฒ๋ณด๋ค ๋ ๋ฎ์ ์์ ํด๋์ค๋ฉค๋ฒ์๋ ์ ๊ทผํ ์ ์๋ค.
public class A {
fileprivate func someMethod() {}
}
internal class B: A {
override internal func someMethod() {
super.someMethod()
}
}
6. let, var, method, subscript
- ํด๋น ํ์
๋ณด๋ค ๋ ๋์ ์ ๊ทผ ๋ ๋ฒจ์ ๊ฐ์ง ์๋ ์๋ค.
- ์๋ธ์คํฌ๋ฆฝํธ๋ ์ธ๋ฑ์ค, return ํ์
๋ณด๋ค ๋ ๋์ ์ ๊ทผ ๋ ๋ฒจ์ ๊ฐ์ง ์๋ ์๋ค.
- ๋ฎ์ ๋ ๋ฒจ๋ก ๋ช
์ ๊ฐ๋ฅ.
private var privateInstance = SomePrivateClass()
getter, setter
- getter, setter ์ญ์ ์์, ๋ณ์, ํ๋กํผํฐ, ์๋ธ์คํฌ๋ฆฝํธ์ ๊ฐ์ ์ ๊ทผ ๋ ๋ฒจ์ ๊ฐ์ง๊ฒ ๋๋ค.
- ์ฝ๊ธฐ, ์ฐ๊ธฐ ๋ฒ์๋ฅผ ์ ํํ๊ธฐ ์ํด์ setter ๋ฅผ getter ๋ณด๋ค ๋ ์ข๊ฒ ์ ๊ณตํ ์ ์๋ค.
fileprivate(set)
, private(set)
, internal(set)
NOTE: ์ ์ฅ ํ๋กํผํฐ๋ง์ด ์๋๋ผ ๊ณ์ฐ ํ๋กํผํฐ์๋ ์ ์ฉ๋๋ค.
struct TrackedString {
private(set) var numberOfEdits = 0
var value: String = "" {
didSet {
numberOfEdits += 1
}
}
}
var stringToEdit = TrackedString()
stringToEdit.value = "This string will be tracked."
stringToEdit.value += " This edit will increment numberOfEdits."
stringToEdit.value += " So will this one."
print("The number of edits is \(stringToEdit.numberOfEdits)")
getter, setter ์ ๋ํ ์ ๊ทผ ๋ ๋ฒจ์ ๋ ๋ค ์ ์ํด์ค ์๋ ์๋ค.
public struct TrackedString {
public private(set) var numberOfEdits = 0
public var value: String = "" {
didSet {
numberOfEdits += 1
}
}
public init() {}
}
7. init
- ์ด๊ธฐํํ๋ ํ์
๋ณด๋ค ๋ ์ข๊ฑฐ๋ ๊ฐ์ ์ ๊ทผ ๋ ๋ฒจ์ ์ค ์ ์๋ค.
- ํ์ง๋ง required init ์ ๋ฌด์กฐ๊ฑด ์์ ์ด ์ํ ํด๋์ค์ ๋์ผํ ์ ๊ทผ ๋ ๋ฒจ์ ๊ฐ์ ธ์ผ ํ๋ค.
- ๊ทธ๋ฆฌ๊ณ , ์ด๊ธฐํ ๊ตฌ๋ฌธ์ ํ๋ผ๋ฏธํฐ์ ์ ๊ทผ ๋ ๋ฒจ์ด ์ด๊ธฐํ ๊ตฌ๋ฌธ์ ์ ๊ทผ ๋ ๋ฒจ๋ณด๋ค ๋ ์ข์ผ๋ฉด ์๋๋ค.
Default Init
- ๋ชจ๋ ํ๋กํผํฐ์ ๊ฐ์ ์ ๊ณตํ๋ฉด ๊ธฐ๋ณธ ์ด๊ธฐํ ๊ตฌ๋ฌธ์ด ์ ๊ณต๋๋๋ฐ,
- ํ์
์ด public ์ด ์๋๋ฉด ํ์
๊ณผ ๊ฐ์ ์ ๊ทผ ๋ ๋ฒจ์ ๊ฐ์ง๊ณ ,
- public ์ด๋ฉด internal ์ด ์๋์ผ๋ก ์ฃผ์ด์ง๊ธฐ ๋๋ฌธ์,
- ๋ค๋ฅธ ๋ชจ๋์์ ์ฌ์ฉํ๋ ค๋ฉด, ์๋์ ์ผ๋ก ์ฃผ์ด์ง๋ ๊ฑด ๋ชป์ฐ๊ณ , ๋ช
์์ ์ผ๋ก public init ์ ์์ฑํ์.
Memberwise init for struct
- member-wise init ์ ๊ฒฝ์ฐ๋,
- ๊ตฌ์กฐ์ฒด ๋ด ๋ชจ๋ ์ ์ฅ๋ ํ๋กํผํฐ๊ฐ private ์ด๋ฉด private, file-private ๋ฉด file-private
- ์๋๋ฉด internal ์ด๋ค.
- public ์ผ๋ก ์ ๊ณตํด์ผ ํ๋ฉด, ์ญ์ ๋ช
์์ ์ผ๋ก public init ์ ์์ฑํด์ผ ํ๋ค.
8. Protocol
- ํ๋กํ ์ฝ ํ์
์ ๋ช
์์ ์ผ๋ก ์ ๊ทผ ๋ ๋ฒจ์ ์ฃผ๊ณ ์ถ๋ค๋ฉด ํ๋กํ ์ฝ์ ์ ์ํ ๋ ์ง์ ํ๋ฉด ๋๋ค.
- ํน์ ์ ๊ทผ ์ปจํ
์คํธ ๋ด์์๋ง ์ฑํ๋ ์ ์๋ ํ๋กํ ์ฝ์ ์์ฑํ ์ ์๋ค.
- ํ๋กํ ์ฝ ์ ์ ๋ด์ ์๊ตฌ์ฌํญ์ ํ๋กํ ์ฝ๊ณผ ๊ฐ์ ์ ๊ทผ ๋ ๋ฒจ์ ๊ฐ์ง๋ค.
- ๋ค๋ฅด๊ฒ ์ค์ ์ ๋ถ๊ฐ๋ฅ ํ๋ค.
- public ์ด๋ฉด public ์!!!
ํ๋กํ ์ฝ ์์
- ์์ํ๋ ๊ฒฝ์ฐ, ์์๋ ํ๋กํ ์ฝ๊ณผ ๋์ผํ๊ฑฐ๋ ๋ ์ข์ ์ ๊ทผ ์์ค์ ๊ฐ์ ธ์ผ ํ๋ค.
ํ๋กํ ์ฝ ์ค์
- ํ์
์ ํ์
์์ฒด๋ณด๋ค ๋ ๋ฎ์ ์ ๊ทผ ๋ ๋ฒจ์ ํ๋กํ ์ฝ์ ์ค์ํ ์ ์๋ค.
- internal ํ๋กํ ์ฝ์ ๋ฐ๋ฅด๋ public ํ์
๊ฐ๋ฅ.
- ๊ทธ์น๋ง ํ๋กํ ์ฝ์ internal ๋ก ์ค์ํ๊ฒ ๋ผ์, internal ์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ.
NOTE : ๊ฐ์ ํ๋ก๊ทธ๋จ์์ ํ์
์ด ๋๊ฐ์ง ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ํ๋กํ ์ฝ์ ์ค์ํ ์๋ ์๋ค. ํ๋ฒ internal ์ด๋ฉด public ์ผ๋ก ์ค์ํ ์ ์๋ค..
9. Extension
- ํ์ฅ ์ญ์, ๊ธฐ์กด ํ์
์ ์ ์ธ๋ ํ์
๋ฉค๋ฒ์ ๊ฐ์ ์ ๊ทผ ๋ ๋ฒจ์ ๊ฐ์ง๋ค.
- ๋ ์ข์ ๋ ๋ฒจ๋ก ๋ช
์ํ ์๋ ์๋ค.
- Extension ์ผ๋ก ํ๋กํ ์ฝ์ ์ค์ํ๋ ๊ฒฝ์ฐ์๋, ํ์
์ ๋ํ ์ ๊ทผ ๋ ๋ฒจ์ ๋ช
์ํ ์ ์๋ค.
- ๋์ ํ๋กํ ์ฝ์ ์์ฒด ์ ๊ทผ ์์ค์ ํ๋กํ ์ฝ ์๊ตฌ์ฌํญ์ ๋ํ ๊ธฐ๋ณธ ์ ๊ทผ ๋ ๋ฒจ์ ์ ๊ณตํ๋ค.
Private Members in Extension
ํ์ฅ์ ๊ฒฝ์ฐ ๊ธฐ์กด ํ์
์ ์ ์ธ๋ถ์ฒ๋ผ ์๋ํ๊ฒ ๋๋ค.
๊ทธ๋์ ๊ฐ๋ฅํ ๊ฒ๋ค.
- ๊ธฐ์กด ์ ์ธ์์ private ๋ฉค๋ฒ๋ฅผ ์ ์ธํ๊ณ , ๊ฐ์ ํ์ผ์ Extension ์์ ํด๋น ๋ฉค๋ฒ ์ ๊ทผ
- ํ Extension์์ private ๋ฉค๋ฒ๋ฅผ ์ ์ธํ๊ณ , ๊ฐ์ ํ์ผ์ ๋ค๋ฅธ Extension ์์ ํด๋น ๋ฉค๋ฒ ์ ๊ทผ
- Extension ์์ private ๋ฉค๋ฒ๋ฅผ ์ ์ธํ๊ณ , ๊ฐ์ ํ์ผ์ ๊ธฐ์กด ์ ์ธ์์ ํด๋น ๋ฉค๋ฒ ์ ๊ทผ.
-> private ์ ์ฌ๋ถ์ ๊ด๊ณ ์์ด ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ํ์ฅ ๊ฐ๋ฅ.
protocol SomeProtocol {
func doSomething()
}
struct SomeStruct {
private var privateVariable = 12
}
extension SomeStruct: SomeProtocol {
func doSomething() {
print(privateVariable)
}
}
10. Generic
- min(ํจ์ ์์ฒด์ ์ ๊ทผ ๋ ๋ฒจ, ํ์
ํ๋ผ๋ฏธํฐ์ ๋ํ ๋ชจ๋ ํ์
์ ์ฝ์กฐ๊ฑด์ ์ ๊ทผ ๋ ๋ฒจ)
11. Type Alias
- ๊ณ ์ ํ ํ์
์ผ๋ก ์ฒ๋ฆฌ๋๋๋ฐ,
- ์๋ ํ์
์ ์ ๊ทผ ๋ ๋ฒจ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ ์๋ค.
์ง๋ฌธ
์ ๊ทผ ์ ์ด์์ ์ข
๋ฅ์ ์ด๋ค๊ฒ ์๋์ง ์ค๋ช
ํ์์ค.
- open / public / internal / file-private / private ์ด ์๋ค.
- open / public : import ํด๊ฐ ๋ค๋ฅธ ๋ชจ๋์์๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. open ์ผ๋ก ์์ฑ๋ ๊ฒ์ ํด๋์ค, ํด๋์ค ๋ฉค๋ฒ์๋ง ์ ์ฉ๋๋ฉฐ ํด๋์ค์ ์์๋ง์ ๊ฐ๋ฅํ๋ค.
- internal : ๊ฐ์ ๋ชจ๋ ๋ด๋ถ์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค
- file-private : ๊ฐ์ ํ์ผ ๋ด๋ถ์ ์ ์ธ๋ ๊ฒ๋ค์ ๋ํด์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
- private : ํ๋์ ํ์
์์ ์ ์ธ๋ ๊ฒ๋ค์ ๋ํด์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. ๊ฐ์ ํ์ผ์ extension ์ผ๋ก ํด๋น ํ์
์ ํ์ฅํ๋ ๊ฒฝ์ฐ extension ๋ด์์๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
์ฐธ๊ณ
https://bbiguduk.gitbook.io/swift/language-guide-1/access-control