-
private : ๊ฐ์ ํด๋์ค
-
fileprivate : ๊ฐ์ ์์ค ํ์ผ (.swift)
-
internal : ๊ฐ์ ๋ชจ๋(framework) or ๊ฐ์ ํ๋ก์ ํธ
-
public : ๋ชจ๋ ์ธ๋ถ๊น์ง ๊ฐ๋ฅ
-
open : ๋ชจ๋ ์ธ๋ถ, ์์ ๋ฐ override ๊ฐ๋ฅ (ํ์ฅ ๊ฐ๋ฅ)
์ ์ธํ์ง ์์์ ๋ํดํธ๋ internal ์ ๊ทผ ์ ํ์ !!!
๋ธ๋ก ๋ด๋ถ์์์ ์ ๊ทผ์ ํ์ ์์
public class SomePublicClass { // explicitly public class
public var somePublicProperty = 0 // explicitly public class member
var someInternalProperty = 0 // implicitly internal class member
fileprivate func someFilePrivateMethod() {} // explicitly file-private class member
private func somePrivateMethod() {} // explicitly private class member
}
class SomeInternalClass { // implicitly internal class
var someInternalProperty = 0 // implicitly internal class member
fileprivate func someFilePrivateMethod() {} // explicitly file-private class member
private func somePrivateMethod() {} // explicitly private class member
}
fileprivate class SomeFilePrivateClass { // explicitly file-private class
func someFilePrivateMethod() {} // implicitly file-private class member
private func somePrivateMethod() {} // explicitly private class member
}
private class SomePrivateClass { // explicitly private class
func somePrivateMethod() {} // implicitly private class member
}๊ฐ์ด๋ ์์น
Swift์์๋ ์๋์ ๊ฐ์ ์ ๊ทผ๋ ๋ฒจ ๊ฐ์ด๋ ์์น (Guiding Principle of Access Levels)์ ์ ๊ณตํ๊ณ ์๋ค.
-
public ๋ณ์๋ ๋ค๋ฅธ internal, file-private ํน์ private ํ์ ์์ ์ ์๋ ์ ์์ต๋๋ค. ์๋ํ๋ฉด ๊ทธ ํ์ ์ public ๋ณ์๊ฐ ์ฌ์ฉ๋๋ ๋ชจ๋ ๊ณณ์์ ์ฌ์ฉ๋ ์ ์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
-
ํจ์๋ ๊ทธ ํจ์์ ํ๋ผ๋ฏธํฐ ํ์ ์ด๋ ๋ฆฌํด ๊ฐ ํ์ ๋ณด๋ค ๋ ๋์ ์ ๊ทผ ๋ ๋ฒจ์ ๊ฐ์ ์ ์์ต๋๋ค. ์๋ํ๋ฉด ํจ์์๋ ์ ๊ทผ ๊ฐ๋ฅํ์ง๋ง ํ๋ผ๋ฏธํฐ์ ์ ๊ทผ์ด ๋ถ๊ฐ๋ฅ ํ๊ฑฐ๋ ํน์ ๋ฐํ ๊ฐ ํ์ ๋ณด๋ค ์ ๊ทผ ๋ ๋ฒจ์ด ๋ฎ์ ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ด๋ จ ์ฝ๋์์ ์ด์ฉํ ์ ์์ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
-
์๋ฌด๋ฐ ์ ๊ทผ ๋ ๋ฒจ์ ๋ช ์ํ์ง ์์ ๊ฒฝ์ฐ internal์ ๊ฐ๊ฒ ๋ฉ๋๋ค.
-
๋จ์ผ ํ๊ฒ ์ฑ์์๋ ํน๋ณํ ์ ๊ทผ๋ ๋ฒจ์ ๋ช ์ํ ํ์๊ฐ ์์ง๋ง ํ์์ ๋ฐ๋ผ fileprivate, private๋ฑ์ ์ฌ์ฉํด ์ฑ๋ด์์ ๊ตฌํ ์ธ๋ถ์ฌํญ์ ์จ๊ธธ ์ ์์ต๋๋ค.
-
๊ธฐ๋ณธ์ ์ผ๋ก open์ด๋ public์ผ๋ก ์ง์ ๋ ์ํฐํฐ๋ง ๋ค๋ฅธ ๋ชจ๋์์ ์ ๊ทผ ๊ฐ๋ฅํฉ๋๋ค. ํ์ง๋ง ์ ๋ํ ์คํธ๋ฅผ ํ๋ ๊ฒฝ์ฐ ๋ชจ๋์ importํ ๋ import์์ @testable์ด๋ผ๋ ์ํธ๋ฆฌ๋ทฐํธ๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด ํด๋น ๋ชจ๋์ ํ ์คํธ๊ฐ ๊ฐ๋ฅํ ๋ชจ๋๋ก ์ปดํ์ผํด ์ฌ์ฉํฉ๋๋ค.
[iOS - swift ๊ณต์ ๋ฌธ์] 26. Access Control (์ ๊ทผ์ ํ)
[Swift] Access Control : ์ ๊ทผ์ ์ด(open, public, internal, fileprivate, private)
https://velog.io/@zooneon/Swift-์ ๊ทผ์ ์ด์-๋ํด-์์๋ณด์