μ κ·Όμ μ΄μ κΈ°λ³Έ κ°λ
μ κ·Όμ μ΄κ° νμν μ΄μ
- μ νμ΄ μνλ μ½λλ₯Ό κ°μΆ μ μμ.
- μ½λμ μμμ λΆλ¦¬μμΌμ, ν¨μ¨μ μΌλ‘ κ΄λ¦¬ κ°λ₯
- μ»΄νμΌ μκ° κ°μ
μ»΄νμΌλ¬ μ μ₯μμλ ν΄λΉ λ³μκ° μ΄λ λ²μμμλ§ μ¬μ©νλμ§ μΈμ§ν μ μμ΄μ λ λΉ λ₯΄κ² μνν μ μλ€.
class Student {
private var _name: String = "νκΈΈλ"
func setName(_ name: String) {
self._name = name
}
}
var student = Student()
// student._name // π¨ error: Value of type 'Student' has no member 'name'
// student._name = "EarthSea" // π¨ error: Value of type 'Student' has no member 'name'
student.setName("EarthSea")
private
λ‘ μ μΈλ _name
μ΄λΌλ λ³μλ₯Ό Class
λ°μμλ μ κ·Όμ΄ λΆκ°λ₯νλ€.
setName
ν¨μλ Class
λ΄λΆμ μλ μμμ΄λ―λ‘ _name
μ΄λΌλ λ³μμ μ κ·Όμ΄ κ°λ₯νλ€.
μΈλΆμμ _name
μ μ κ·ΌνκΈ° μν΄μλ setName
μ΄λΌλ ν¨μλ₯Ό μ΄μ©ν΄ μ κ·Όνλ€. -> μμ μ±μ΄ λμ.
μ κ·Όμ μ΄μ μ’ λ₯
open
: λ€λ₯Έ λͺ¨λμμ μ κ·Ό κ°λ₯ ( μμ / μ¬μ μ κ°λ₯ )public
: λ€λ₯Έ λͺ¨λμμ μ κ·Ό κ°λ₯ ( μμ / μ¬μ μ λΆκ°λ₯ )internal
: κ°μ λͺ¨λμμλ§ μ κ·Ό κ°λ₯ ( default μ€μ )fileprivate
: κ°μ νμΌ λ΄μμλ§ μ κ·Ό κ°λ₯private
: κ°μ scopeλ΄μμλ§ μ κ·Ό κ°λ₯
-> μ κ·Ό μ νμλ₯Ό μμ±νμ§ μμΌλ©΄ κΈ°λ³Έμ μΌλ‘ internal
λ‘ μ μΈμ΄ λ¨.
-> open
μ ν΄λμ€μμλ§ μ¬μ©μ΄ κ°λ₯ ( μμκ³Ό μ¬μ μκ° κ°λ₯ν νμ
μ΄ ν΄λμ€ λΏμ΄κΈ° λλ¬Έ )
λͺ¨λμ΄λ?
νλ μ μν¬, λΌμ΄λΈλ¬λ¦¬, μ± λ± importν΄μ μ¬μ©ν μ μλ μΈλΆμ μ½λ
μ κ·Ό μ μ΄μ κΈ°λ³Έ μμΉ / κΈ°λ³Έ λ¬Έλ²
κΈ°λ³Έ μμΉ
νμ μ νμ μ μ¬μ©νλ λ³μ(μμ±)μ΄λ, ν¨μ(λ©μλ)λ³΄λ€ λμ μμ€μΌλ‘ μ μΈλμ΄μΌνλ€.
μ¦, μμ μμλ³΄λ€ νμ μμκ° λ λμ μ κ·Ό μμ€μ κ°μ§ μλ μλ€.
private func sFunc(a: Int) -> Bool {
//public var a: Int = a // π¨ Error : Attribute 'public' can only be used in a non-local scope
//print(a)
return true
}
sFunc
μ internal
νμ
μ΄μ§λ§, λ΄λΆμ a
λ public
νμ
μΌλ‘ μ μΈμ΄ λ μ μλ€.
κΈ°λ³Έ λ¬Έλ²
νμ
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() {}
default
class SomeInternalClass1 {}
let someInternalConstant1 = 0
privateμ κ΄μ΅μ μΈ ν¨ν΄
κ΄μ΅μ μΌλ‘ μ€λ¬΄μμλ privateλ‘ μ μΈλ μμ±μ λ³μλͺ μμ μΈλλ°(_)λ₯Ό νμνλ€.
μ μ₯ μμ±μ μΈλΆμμ μ°κΈ°λ₯Ό μ ννλ λ°©λ²
class SomeOtherClass {
private var _name = "μ΄λ¦" // μ°κΈ° - private
var name: String { // μ½κΈ° - internal
return _name
}
}
class SomeAnotherClass {
private(set) var name = "μ΄λ¦" // μ½κΈ° - internal / μ°κΈ° - private
}
μ½κΈ°λ internal
, μ°κΈ°λ private
λ‘ μ μΈνκ³ μΆμΌλ©΄ private(set)
μΌλ‘ μ°λ©΄ λλ€.