๐ ์ ๊ทผ ์ ์ด์
์ ๊ทผ ์ ์ด์๋ ํ๋์ ํ์ผ์์ ๋ค๋ฅธ ํ์ผ์ ์๋ ์ฝ๋์ ๋ํ ์ ๊ทผ์ ๊ด๋ฆฌํ๋ ๊ฒ์ด๋ค.
์ ๊ทผ ์ ์ด์๋ฅผ ํตํด ํน์ ์ฝ๋์ ์ธ๋ถ์ ์ธ ๊ตฌํ์ ์จ๊ธฐ๊ณ , ํ์ฉ๋ ๊ธฐ๋ฅ๋ง ์ฌ์ฉํ๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ ์ ์๋ค.
module๊ณผ source file์ ๋ฐ๋ผ ๋ค๋ฅธ ์ ๊ทผ์ ํ ์ ์๋ค.
module : ํ๋์ ํ๋ ์์ํฌ๋ฅผ ์๋ฏธํ๋ค. import ๋ก ์ถ๊ฐ๋๋ ๊ฒ๋ค์ด๋ค. (UIKit, Foundation ๋ฑ)
source file : module ์์ ์๋ ํ์ผ๋ค์ด๋ค. (data.swift, example.swift ๋ฑ)
์ ๊ทผ ์ ์ด์๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋?
- ์ธ๋ถ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ณดํธํ๊ธฐ ์ํด์
- ์ธ๋ถ์๋ ๋ถํ์ํ๊ณ ๋ด๋ถ์ ์ผ๋ก๋ง ์ฌ์ฉ๋๋ ๋ถ๋ถ์ ์จ๊ธฐ๊ธฐ ์ํด์
๐ Swift์ 5๊ฐ์ง ์ ๊ทผ ์ ์ด์
1. open (๊ฐ๋ฐฉ ์ ๊ทผ์์ค)
- ๊ฐ๋ฐฉ ์ ๊ทผ์์ค์ ํด๋์ค์ ํด๋์ค ๋ฉค๋ฒ์๋ง ์ ์ฉ ๊ฐ๋ฅํ๋ค.
- ๊ฐ๋ฐฉ ์ ๊ทผ์์ค์ ํด๋์ค๋ ๊ทธ ํด๋์ค๊ฐ ์ ์๋ ๋ชจ๋ ๋ฐ์ ๋ค๋ฅธ ๋ชจ๋์์๋ ์์ํ ์ ์๋ค.
- ๊ฐ๋ฐฉ ์ ๊ทผ์์ค์ ํด๋์ค ๋ฉค๋ฒ๋ ํด๋น ๋ฉค๋ฒ๊ฐ ์ ์๋ ๋ชจ๋ ๋ฐ์ ๋ค๋ฅธ ๋ชจ๋์์๋ ์ฌ์ ์ํ ์ ์๋ค.
open class Animal {
open func bark() {
print("๋ฉ๋ฉ๋ฉ")
}
}
class Dog: Animal {
override open func bark(){
print("์์์")
}
}
2. public (๊ณต๊ฐ ์ ๊ทผ์์ค)
- public ํค์๋๋ก ์ง์ ๋ ์์๋ ์ด๋์๋ ์ฐ์ผ ์ ์๋ค.
- ๊ณต๊ฐ ์ ๊ทผ์์ค์ ์ฃผ๋ก ํ๋ ์์ํฌ์์ ์ธ๋ถ์ ์ฐ๊ฒฐ๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋๋ฐ ๋ง์ด ์ฐ์ธ๋ค.
๐ open๊ณผ public์ ์ฐจ์ด์
open ์ ๊ทผ์์ค์ Class์๋ง ์ ์ฉํ ์ ์๋ค.
Struct, enum์ public ๋ถํฐ ๊ฐ๋ฅํ๋ค.
3. internal (๋ด๋ถ ์ ๊ทผ์์ค)
- ๋ด๋ถ ์ ๊ทผ์์ค์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ์์์ ์๋ฌต์ ์ผ๋ก ์ง์ ํ๋ ๊ธฐ๋ณธ ์ ๊ทผ์์ค์ด๋ค.
- ๋ด๋ถ ์ ๊ทผ์์ค์ผ๋ก ์ง์ ๋ ์์๋ ์์คํ์ผ์ด ์ํ ๋ชจ๋ ์ด๋์์๋ ์ฐ์ผ ์ ์๋ค. ํ์ง๋ง, ๋ชจ๋์ ๊ฐ์ ธ๋ค ์ฐ๋ ์ธ๋ถ ๋ชจ๋์์๋ ์ ๊ทผํ ์ ์๋ค.
- internal์ ๊ธฐ๋ณธ ์ ๊ทผ์์ค์ด๋ฏ๋ก ๊ตณ์ด ํ๊ธฐํ์ง ์์๋ ๋๋ค.
internal class๋ ์๋ธํด๋์ฑ์ด ๋๋? => O
internal class ๋ฉค๋ฒ๋ override๊ฐ ๋๋? => O
open class์์ internal class ๋ฉค๋ฒ๊ฐ ์์ผ๋ฉด ์ธ๋ถ์์ ํธ์ถ ๊ฐ๋ฅ? => X
4. fileprivate (ํ์ผ์ธ๋ถ๋น๊ณต๊ฐ ์ ๊ทผ์์ค)
- ํ์ผ์ธ๋ถ๋น๊ณต๊ฐ ์ ๊ทผ์์ค์ผ๋ก ์ง์ ๋ ์์๋ ๊ทธ ์์๊ฐ ๊ตฌํ๋ ์์คํ์ผ ๋ด๋ถ์์๋ง ์ฌ์ฉํ ์ ์๋ค.
- ๋ชจ๋์ด ๊ฐ์๋ ๋ค๋ฅธ ์์คํ์ผ์์๋ ์ฌ์ฉํ ์ ์๋ค.
5. private (๋น๊ณต๊ฐ ์ ๊ทผ์์ค)
- ๊ฐ์ฅ ํ์ ์ ์ธ ๋ฒ์์ด๋ค.
- ๋น๊ณต๊ฐ ์ ๊ทผ์์ค์ผ๋ก ์ง์ ๋ ์์๋ ๊ทธ ๊ธฐ๋ฅ์ ์ ์ํ๊ณ ๊ตฌํํ ๋ฒ์ ๋ด์์๋ง ์ฌ์ฉํ ์ ์๋ค.
- ํด๋์ค ๋ด๋ถ์ ์ ์ธ๋ private ์์๋ ๊ฐ์ ํ์ผ์ด๋๋ผ๋ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค.
private class PrivateClass{
public init() {}
private var name = "๊ฐํ"
}
extension PrivateClass{
func gahyunMethod() {
print(name)
}
}
//๊ฐ์ ์์คํ์ผ ์์์์ extension๋ง ๊ฐ๋ฅ
์ ๊ทผ์ ์ด ๊ตฌํ ์ ์ฐธ๊ณ ์ฌํญ
- ์์ ์์๋ณด๋ค ํ์ ์์๊ฐ ๋ ๋์ ์ ๊ทผ์์ค์ ๊ฐ์ง ์ ์๋ค.
- ํ๋ ์์ํฌ๋ฅผ ๋ง๋ค ๋๋ ๋ค๋ฅธ ๋ชจ๋์์ ํน์ ๊ธฐ๋ฅ์ ์ ๊ทผํ ์ ์๋๋ก API๋ก ์ฌ์ฉํ ๊ธฐ๋ฅ์ ๊ณต๊ฐ ์ ๊ทผ์์ค์ผ๋ก ์ง์ ํด์ฃผ์ด์ผ ํ๋ค.
- ์ด๊ฑฐํ ๋ด๋ถ์ ๊ฐ case๋ณ๋ก ๋ฐ๋ก ์ ๊ทผ์์ค์ ๋ถ์ฌํ ์ ์๊ณ , ๊ฐ case์ ์ ๊ทผ์์ค์ ์ด๊ฑฐํ ์์ฒด์ ์ ๊ทผ์์ค์ ๋ฐ๋ฅธ๋ค.
private class SOPTClass {
public func iOSMethod() {
...
}
}
//SOPTClass์ ์ ๊ทผ์์ค์ด private(๋น๊ณต๊ฐ)์ด๊ธฐ ๋๋ฌธ์ iOSMethod์ ์ ๊ทผ์์ค๋ private(๋น๊ณต๊ฐ)๋ก ์ทจ๊ธํ๋ค.
์ฝ๊ธฐ ์ ์ฉ(Setter) ๊ตฌํ ์ ์ฐธ๊ณ ์ฌํญ
- ๊ฐ์ ๊ฐ์ ธ๊ฐ ์๋ ์์ง๋ง ๋ณ๊ฒฝํ ์๋ ์๋๋ก ํ๊ณ ์ถ์ ๋๋ ์ค์ ์๋ง ๋ ๋ฎ์ ์ ๊ทผ์์ค์ ๊ฐ๋๋ก ํ๋ค.
- ์์์ ์ ๊ทผ์์ค ํค์๋ ๋ค์ ์ ๊ทผ์์ค(set)์ฒ๋ผ ํํํ๋ฉด ์ค์ ์์ ์ ๊ทผ์์ค๋ง ๋ ๋ฎ๋๋ก ์ง์ ํ ์ ์๋ค.
public private(set) var property = Type
//์ ๊ทผ(getter)์ public์ด์ง๋ง ์ค์ (setter)์ private์ผ๋ก ํ ์๋ ์๋ค.
728x90