์ ๊ทผ ์ ์ด์๋?
์ฝ๋๋ผ๋ฆฌ ์ํธ์์ฉ์ ํ ๋ ์์คํ์ผ ๊ฐ, ๋ชจ๋ ๊ฐ ์ ๊ทผ์ ์ ํํ ์ ์๋ ๊ธฐ๋ฅ์ด๋ค.
์ด๋ฅผ ํตํด ํน์ ์ฝ๋์ ์ธ๋ถ์ ์ธ ๊ตฌํ์ ์จ๊ธฐ๊ณ , ํ์ฉ๋ ๊ธฐ๋ฅ๋ง ์ฌ์ฉํ๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ ์ ์๋ค.
๊ทธ๋ผ ์ ํ์ผ ๊ฐ, ๋ชจ๋ ๊ฐ ์ ๊ทผ์ ์ ํํ๋?
OOP ํจ๋ฌ๋ค์์ “์๋ํ"์ ๊ด๋ จ์ด ๊น๋ค. ์ธ๋ถ์์ ๋ณด๊ฑฐ๋ ์ ๊ทผํ๋ฉด ์๋๋ ์ฝ๋๋ฅผ ๋ง๊ธฐ ์ํจ์ด๋ค.
์ ๊ทผ ๋๋ฐธ์ ์ข
๋ฅ (Acess Levels)
์ค์ํํธ์์๋ 5๊ฐ์ ์ ๊ทผ๋๋ฐธ์ด ์๋ค.. ํ์
(ํด๋์ค, ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ...)๋ฟ ์๋๋ผ, ํ์
๋ด๋ถ์ ํ๋กํผํฐ, ๋ฉ์๋, ์ด๋์
๋ผ์ด์ , ์๋ธ์คํฌ๋ฆฝํธ์๋ ์ ๊ทผ ์์ค์ ์ง์ ํ ์ ์๋ค.
Open
๊ฐ์ฅ ๋์ ๋ฒ์์ด๋ค. ์ง์ ๋ ์์๋ ์ด๋์๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. Public
๊ณผ ๋น์ทํ์ง๋ง ์ฝ๊ฐ์ ์ฐจ์ด๊ฐ ์๋ค.
Open
์ ํด๋์ค์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
Open
์์๋ง ํด๋์ค๊ฐ ์ ์๋ ๋ชจ๋ ์ธ๋ถ์์๋ subclassing
ํ ์ ์๋ค.
Open
์์๋ง ํด๋์ค๊ฐ ์ ์๋ ๋ชจ๋ ์ธ๋ถ์์ override
ํ ์ ์๋ค.
Public
์ค์ํํธ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์๋ ๊ธฐ๋ณธ ์์๋ ๋ชจ๋ Open
๋๋ฐธ์ ๊ฐ์ง Struct์ด๋ค. ex)Bool, Int, String.....
- ํด๋์ค๊ฐ ์ ์๋ ๋ชจ๋ ๋ด์์๋ง
subclassing
ํ ์ ์๋ค.
- ํด๋์ค๊ฐ ์ ์๋ ๋ชจ๋ ๋ด์์๋ง
override
ํ ์ ์๋ค.
Internal
- ์์ ์์ ํค์๋๋ฅผ ์ฐ์ง ์์๋ ์๋์ผ๋ก ์ง์ ๋๋ ๊ธฐ๋ณธ๊ฐ์ด๋ค.
Internal
๋๋ฐธ์ ๊ฐ์ง ์์๋ ๋ชจ๋ ๋ด๋ถ์์๋ ์ด๋์๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
FilePriavte
- ํด๋น ์์คํ์ผ ๋ด๋ถ์์๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. (๋ชจ๋์ด ๊ฐ์๋ ๋ค๋ฅธ ์์คํ์ผ์์๋ ์ฌ์ฉ๋ถ๊ฐ)
private
- ๊ฐ์ฅ ํ์ ์ ์ธ ๋ฒ์์ด๋ค. ํด๋น ์์๋ฅผ ์ ์ํ ๋ฒ์ ๋ด์์๋ง ์ฌ์ฉ๊ฐ๋ฅํ๋ค.
- ํด๋์ค ๋ด๋ถ์ ์ ์ธ๋ private ์์๋ ๊ฐ์ ํ์ผ์ด๋๋ผ๋ ์ฌ์ฉ ๋ถ๊ฐ๋ฅํ๋ค.
class UserInfo {
static let shared = UserInfo() // ์ด๋ ๋จ ํ๋ฒ๋ง ์์ฑ๋๋ค.
var id: String?
var password: String?
var name: String?
private init() { }
}
์ฑ๊ธํค ํจํด์ ์ฌ์ฉํ ๋ ๋ง์ด ๋ดค์๋ค. ์ด๋์
๋ผ์ด์ ์ pivate
๋ฅผ ์ฌ์ฉํ์ฌ ๋จ ํ๋์ ์ธ์คํด์ค๋ง ์์ฑ๋๋๋ก ํ๊ธฐ ์ํจ
์ฃผ์ํ ์
์์ ์์๋ณด๋ค ํ์ ์์๊ฐ ๋ ๋์ ์ ๊ทผ์์ค์ ๊ฐ์ง๋ฉด ์๋๋ค. ๋ช ๊ฐ์ง ์๋ฅผ ๋ณด๊ฒ๋๋ฉด
private class EClass{
public func method(){} // private ๋ด๋ถ์ public ํค์๋๋ฅผ ์ฌ์ฉํด๋ ์์ฉ์๋ค.
}
public func eMethod(_ : EClass){ // private ํด๋์ค๋ฅผ ์ธ์๋ก ๋ฐ์ ์ ์๋ค.
print("get Eclass")
}
- ํด๋์ค(์์์์)๊ฐ private ์ด๊ธฐ ๋๋ฌธ์ ๋ฉ์๋(ํ์์์)๋ private๋ก ์ทจ๊ธ๋๋ค.
eMethod
๋ public ํจ์์ด๊ธฐ ๋๋ฌธ์ private์ธ Eclass๋ฅผ ์ธ์๋ก ๋ฐ์ ์ ์๋ค.
Setter ์ ๊ทผ ์ ์ด (์ฝ๊ธฐ ์ ์ฉ)
๊ตฌ์กฐ์ฒด or ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฅ ํ๋กํผํฐ๋ฅผ ๊ตฌํํ ๋ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋๋ก ๊ตฌํํ ์ ์๋ค. (์ฝ๊ธฐ ์ ์ฉ์ผ๋ก)
public(set)
๊ณผ ๊ฐ์ด ์ฌ์ฉํ๋ฉด setter์ ์ ๊ทผ๋๋ฐธ์ ์ค์ ํ ์ ์๋ค.
public struct SomeType{
private var count = 0
internal private(set) var InternerGetOnlyComputedProperty: Int {
get {
return count
}
set {
count += 1
}
}
}
var someTypeInstance = SomeType()
print(someTypeInstance.InternerGetOnlyComputedProperty)
someTypeInstance.InternerGetOnlyComputedProperty = 14// Error -> ๋ณ๊ฒฝํ ์ ์๋ค.