์ ๊ทผ ์ ์ด์๋?
์ ๊ทผ ์ ์ด(Access Control)๋ ์ฝ๋๊ฐ ์๋ก ์ํธ์์ฉํ ๋ ๋ชจ๋(module) ๊ฐ, ์์ค ํ์ผ(source file) ๊ฐ์ ์ ๊ทผ์ ์ ํํ ์ ์๋ ๊ธฐ๋ฅ์ ๋๋ค.
Swift์ ์ ๊ทผ ์ ์ด๋ ๋ชจ๋๊ณผ ์์ค ํ์ผ์ ๊ธฐ์ค์ผ๋ก ์ค๊ณ๋์์ต๋๋ค.
์ฌ๊ธฐ์ ์์ค ํ์ผ์ด๋ ํ๋์ Swift ์์ค ์ฝ๋ ํ์ผ(.swift)์ ์๋ฏธํฉ๋๋ค.
๐ ๋ชจ๋(module)์ด๋?
๋ชจ๋(module)์ ํ๋์ ์ฝ๋ ๋ฐฐํฌ ๋จ์๋ฅผ ์๋ฏธํฉ๋๋ค.
ํ๋ ์์ํฌ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์ ํ๋ฆฌ์ผ์ด์ ๋ชจ๋ ๋ชจ๋ ๋จ์๊ฐ ๋ ์ ์์ต๋๋ค.
๋ค๋ฅธ ๋ชจ๋์ ์ฝ๋๋ฅผ ์ฌ์ฉํ ๋๋ import ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉฐ,
๋ฐ๋๋ก import๋ก ๋ถ๋ฌ์ฌ ์ ์๋ ๊ฒ์ ๋ชจ๋ ๋ชจ๋์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
์: UIKit, Foundation, SwiftUI ๋ฑ
Swift์์๋ ์ด ๋ค์ฏ ๊ฐ์ง ์ ๊ทผ ์ ์ด์๋ฅผ ์ ๊ณตํ๋๋ฐ์! ์ฐจ๊ทผ์ฐจ๊ทผ ํ๋์ฉ ์์๋ด ์๋ค~
1. open
- ์ธ๋ถ ๋ชจ๋์์๋ ์ ๊ทผ๊ณผ ์ฌ์ ์(override) ๊ฐ๋ฅ
- ์ฃผ๋ก ํ๋ ์์ํฌ๋ SDK์์ ์ฌ์ฉ
open class Developer {
open func introduce() {
print("์ ๋ iOS ๊ฐ๋ฐ์์
๋๋ค!")
}
}
2. public
- ์ธ๋ถ ๋ชจ๋์์ ์ ๊ทผ์ ๊ฐ๋ฅํ์ง๋ง ์์·์ฌ์ ์ ๋ถ๊ฐ๋ฅ
public class Notice {
public func announce() {
print("๋๋๋ ๊ฐ๋๋")
}
}
3. internal (๊ธฐ๋ณธ๊ฐ)
- ๊ฐ์ ๋ชจ๋ ๋ด๋ถ์์๋ง ์ ๊ทผ ๊ฐ๋ฅ (๊ธฐ๋ณธ๊ฐ)
- ๋ณ๋๋ก ์ ๊ทผ ์ ์ด์๋ฅผ ์ ์ฐ๋ฉด ์๋์ผ๋ก internal์ด ์ ์ฉ๋จ
class Study {
func start() {
print("์ ๋๋ฉ์ด์
์คํฐ๋ ์์ ๐")
}
}
4. fileprivate
- ๊ฐ์ ํ์ผ ์์์๋ง ์ ๊ทผ ๊ฐ๋ฅ
fileprivate class Helper {
func setup() {
print("์ค๋๋ ์ค์ํํธ ๊ณต๋ถ ์ค...")
}
}
class StudyRoom {
let helper = Helper()
func run() {
helper.setup() // ๊ฐ์ ํ์ผ์ด๋๊น ์ ๊ทผ ๊ฐ๋ฅ
}
}
5. private
- ๊ฐ์ ์ ์ธ ๋ด๋ถ(ํด๋์ค ๋ด๋ถ)์์๋ง ์ ๊ทผ ๊ฐ๋ฅ
class Diary {
private var content = "ํ์ดํ
!"
func showDiary() {
print(content)
}
}
let diary = Diary()
diary.showDiary() // ์ ๊ทผ ๊ฐ๋ฅ
// diary.content < ์ธ๋ถ์์ ์ ๊ทผ ๋ถ๊ฐ
์ ๊ทผ ์ ์ด์๋ฅผ ์ฌ์ฉํ๋ ์ด์
์ ๊ทผ ์ ์ด์๋ ์ฝ๋์ ๊ตฌ์กฐ์ ์์ ์ฑ๊ณผ ๋ณด์์ฑ์ ๋์ด๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค.
์ด๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํต์ฌ ๊ฐ๋ ์ธ ์บก์ํ(encapsulation)์ ๋ฐ์ ํ ๊ด๋ จ์ด ์์ต๋๋ค.
๋ถํ์ํ ์ธ๋ถ ์ ๊ทผ์ ์ฐจ๋จํจ์ผ๋ก์จ, ์ฝ๋์ ์ ์ง๋ณด์์ฑ๊ณผ ์ ๋ขฐ์ฑ์ ํฅ์์ํฌ ์ ์๋๊ฑฐ์ฃ .
1. ์บก์ํ
์ ๊ทผ ์ ์ด์๋ ํด๋์ค๋ ๊ตฌ์กฐ์ฒด์ ๋ด๋ถ ๋์์ ์ธ๋ถ์์ ์ง์ ๋ณผ ์ ์๊ฒ ์จ๊ธฐ๋ ์ญํ ์ ํฉ๋๋ค.
๊ทธ๋์ ํ์ํ ๋ถ๋ถ๋ง ์ธ๋ถ์ ๊ณต๊ฐํ๊ณ , ๋๋จธ์ง๋ ๊ฐ์ถ์ด ์ฝ๋๋ฅผ ๋ ์์ ํ๊ณ ๊น๋ํ๊ฒ ์ ์งํ ์ ์์ต๋๋ค.
์ฆ, ๋ด๋ถ๋ฅผ ์์ ๋กญ๊ฒ ๋ฐ๊พธ๋ฉด์๋ ์ธ๋ถ์ ์ํฅ์ ์ฃผ์ง ์๋ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค!
์๋ฅผ ๋ค์ด, ์ ๊ทผ ์ ์ด๋ฅผ ์ฌ์ฉํ์ง ์์ ์ฝ๋์ ์ฌ์ฉํ ์ฝ๋๋ฅผ ๋น๊ตํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ ๊ทผ ์ ์ด๋ฅผ ์ฌ์ฉํ์ง ์์ ๊ฒฝ์ฐ
class User {
var password: String = "1234"
}
let user = User()
user.password = "0000" // ์ธ๋ถ์์ ์ง์ ์์ ๊ฐ๋ฅ
print(user.password) // "0000"
์ด ๊ฒฝ์ฐ ์ธ๋ถ ์ฝ๋์์ password ํ๋กํผํฐ๋ฅผ ์ง์ ์์ ํ ์ ์์ต๋๋ค. ๋น๋ฐ๋ฒํธ ๊ฐ์ ๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ์ธ๋ถ์์ ์ฝ๊ฒ ๋ณ๊ฒฝ๋ ์ ์๊ธฐ ๋๋ฌธ์ ์์ ํ์ง ์์ต๋๋ค.
์ ๊ทผ ์ ์ด๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ
class User {
private var password: String = "1234"
func checkPassword(_ input: String) -> Bool {
return input == password
}
}
let user = User()
// user.password = "0000" // ์ค๋ฅ: 'password'๋ private ๋ฉค๋ฒ๋ผ ์ธ๋ถ ์ ๊ทผ ๋ถ๊ฐ
print(user.checkPassword("1234")) // true
print(user.checkPassword("0000")) // false
์ฌ๊ธฐ์๋ password ํ๋กํผํฐ๋ฅผ private์ผ๋ก ์ ์ธํด ์ธ๋ถ ์ฝ๋์์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ์จ๊ฒผ์ต๋๋ค.
๋์ checkPassword()๋ผ๋ ๊ณต๊ฐ๋(public) ์ธํฐํ์ด์ค๋ฅผ ํตํด์๋ง ๋น๋ฐ๋ฒํธ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
์ด์ฒ๋ผ ์ ๊ทผ ์ ์ด๋ฅผ ํ์ฉํ๋ฉด ๋ด๋ถ ๋์์ ๋ณดํธํ๋ฉด์ ํ์ํ ๊ธฐ๋ฅ๋ง ์ธ๋ถ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
2. ์ฝ๋ ์์ ์ฑ
์ ๊ทผ ์ ์ด๋ ์๋์น ์์ ์ ๊ทผ์ด๋ ์์ ์ผ๋ก๋ถํฐ ์ฝ๋๋ฅผ ๋ณดํธํฉ๋๋ค.
ํนํ ํ ๋จ์ ๊ฐ๋ฐ ํ๊ฒฝ์์, ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ๋ด๋ถ ๊ตฌํ์ ์ง์ ์ ๊ทผํ๊ฑฐ๋ ์๋ชป๋ ๊ฐ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
3. API ์ค๊ณ
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ๋ ์์ํฌ๋ฅผ ์ค๊ณํ ๋ ์ ๊ทผ ์ ์ด๋ ํ์์ ์ ๋๋ค.
์ธ๋ถ ๊ฐ๋ฐ์์๊ฒ ํ์ํ ๊ธฐ๋ฅ๋ง ๋ช ์์ ์ผ๋ก ๊ณต๊ฐ(public ๋๋ open) ํ๊ณ ,
๋ด๋ถ ๊ตฌํ ์ธ๋ถ ์ฌํญ์ private ๋๋ internal๋ก ์จ๊น์ผ๋ก์จ ๋ช ํํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ด๋ ๊ฒ ํ๋ฉด API ์ฌ์ฉ์๋ ์๋๋ ๋ฐฉ์์ผ๋ก๋ง ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๊ณ ,
๋ด๋ถ ์ฝ๋๋ฅผ ์๋ชป ๊ฑด๋๋ ค ์์คํ ์ด ๋ถ์์ ํด์ง๋ ์ผ์ ์๋ฐฉํ ์ ์์ต๋๋ค.
4. ๋ณด์
์ ๊ทผ ์ ์ด๋ ๋ณด์์ ์ธ ์ธก๋ฉด์์๋ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๋ ๊ฐ์ธ ๋ฐ์ดํฐ์ ๊ฐ์ ๋ฏผ๊ฐํ ์ ๋ณด๋
private์ด๋ fileprivate๋ก ์ ์ธํ์ฌ ์ธ๋ถ์์ ์ง์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ์ฐจ๋จํฉ๋๋ค.
5. ์ฑ๋ฅ ์ต์ ํ
์ ๊ทผ ๋ฒ์๊ฐ ์ข์์๋ก ์ปดํ์ผ๋ฌ๋ ์ฝ๋์ ์คํ ํ๋ฆ์ ๋ ์ ํํ๊ฒ ์์ธกํ ์ ์์ต๋๋ค.
private์ด๋ final๋ก ์ ์ธ๋ ๋ฉค๋ฒ๋ ์ ์ ๋์คํจ์น(static dispatch) ๋ฐฉ์์ผ๋ก ํธ์ถ๋๊ธฐ ๋๋ฌธ์,
๋ฉ์๋ ํธ์ถ ์์ ์ ๋ฐํ์ ํ์ ๊ณผ์ ์ ๊ฑฐ์น์ง ์์ต๋๋ค.
๊ทธ ๊ฒฐ๊ณผ ํจ์ ํธ์ถ ์๋๊ฐ ๋นจ๋ผ์ง๊ณ ์ ์ฒด ์คํ ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค.
์ฆ, ์ ๊ทผ ์ ์ด๋ฅผ ์ ์ ํ ์ค์ ํ๋ ๊ฒ์ ๋จ์ํ ๋ณด์๋ฟ ์๋๋ผ ์ต์ ํ ์ธก๋ฉด์์๋ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
'๐ถ๐ข๐ฆ > ๐ iOS ๊ฐ๋ ํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [iOS / Swift] Equatable, Hashable, Comparable (0) | 2025.11.05 |
|---|---|
| [iOS / Swift] Enum์ด๋? (2) | 2025.11.04 |
| [iOS / Swift] Optional์ด๋? (1) | 2025.10.16 |
| [iOS / Swift] ์๋ช ์ฃผ๊ธฐ(Life Cycle)๋? (0) | 2025.10.16 |
| [iOS / Swift] final ํค์๋์ ์ฑ๋ฅ์ ์ด์ ์ ๋ํด์ (0) | 2025.10.16 |