
์ ๊ทผ์ ์ด์ ๊ธฐ๋ณธ ๊ฐ๋
์ ๊ทผ์ ์ด๊ฐ ํ์ํ ์ด์
- ์ ํ์ด ์ํ๋ ์ฝ๋๋ฅผ ๊ฐ์ถ ์ ์์.
- ์ฝ๋์ ์์ญ์ ๋ถ๋ฆฌ์์ผ์, ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌ ๊ฐ๋ฅ
- ์ปดํ์ผ ์๊ฐ ๊ฐ์
์ปดํ์ผ๋ฌ ์ ์ฅ์์๋ ํด๋น ๋ณ์๊ฐ ์ด๋ ๋ฒ์์์๋ง ์ฌ์ฉํ๋์ง ์ธ์งํ ์ ์์ด์ ๋ ๋น ๋ฅด๊ฒ ์ํํ ์ ์๋ค.
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)
์ผ๋ก ์ฐ๋ฉด ๋๋ค.

์ ๊ทผ์ ์ด์ ๊ธฐ๋ณธ ๊ฐ๋
์ ๊ทผ์ ์ด๊ฐ ํ์ํ ์ด์
- ์ ํ์ด ์ํ๋ ์ฝ๋๋ฅผ ๊ฐ์ถ ์ ์์.
- ์ฝ๋์ ์์ญ์ ๋ถ๋ฆฌ์์ผ์, ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌ ๊ฐ๋ฅ
- ์ปดํ์ผ ์๊ฐ ๊ฐ์
์ปดํ์ผ๋ฌ ์ ์ฅ์์๋ ํด๋น ๋ณ์๊ฐ ์ด๋ ๋ฒ์์์๋ง ์ฌ์ฉํ๋์ง ์ธ์งํ ์ ์์ด์ ๋ ๋น ๋ฅด๊ฒ ์ํํ ์ ์๋ค.
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)
์ผ๋ก ์ฐ๋ฉด ๋๋ค.