์ ๊ทผ ์ ์ด์์ ๋ฒ์๋ผ๊ณ ํด์ผํ๋ ์ ๊ทผ์ ์ด๊ฐ ๋ถ์ฌ๋ ์ ์๋ ํฐ ๋ฒ์๋ก๋ module
, source file
์ด ์๋ค.
module
: ํ๋์ framework๋ฅผ ์๋ฏธํ๋ค. import ํค์๋๋ก ์ถ๊ฐ๋๋ ๊ฒ๋ค์ ๋ชจ๋์ด๋ผ๊ณ ํ ์ ์๋ค.
source file
: module์ source file๋ค๋ก ๊ตฌ์ฑ๋์ด์๋ค. ~.swift ์ ๊ฐ์ ํ์ผ๋ค์ ์๋ก ๋ค ์ ์๊ฒ ๋ค.
์ ๊ทผ ์ ์ด์์ ์ข ๋ฅ์๋ 5๊ฐ์ง๊ฐ ์๋ค.
-
open, public
ํ๋ก์ ํธ ๋ด์ ๋ชจ๋ module์์ ์ ๊ทผ ํ ์ ์๋ค. ๊ฐ์ฅ ๊ฐ๋ฐฉ์ ์ธ ์ ์ด์์ด๋ค. -
internal(default)
์ฝ๋๊ฐ ์์ฑ๋ module์์๋ง ์ ๊ทผํ ์ ์๋ค. ์ฐ๋ฆฌ๊ฐ ๋ณ๋๋ก ๋ช ์ํ์ง ์๋๋ค๋ฉด internal ํค์๋๊ฐ ๋ถ๊ฒ๋๋ค. -
fileprivate
์ฝ๋๊ฐ ์์ฑ๋ source file ๋ด์์๋ง ์ ๊ทผํ ์ ์๋๋ก ์ ์ดํ๋ค. ๊ฐ์ source file์ด๋ผ๋ฉด ๋ค๋ฅธ ํด๋์ค๋ผ๋ ์ ๊ทผํ ์ ์๋ค. -
private
๊ฐ์ฅ ํ์์ ์ธ ์ ๊ทผ ์ ์ด์์ด๋ค. ์ฝ๋๊ฐ ์์ฑ๋ ๊ฐ์ฒด ์์์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
fileprivate์ ๋ค๋ฅด๊ฒ private ํค์๋๊ฐ ๋ถ์๋ค๋ฉด ๊ฐ์ source file์ด๋ผ๋ ์๋ก ๋ค๋ฅธ ํด๋์ค์ ์๋ ๊ฒฝ์ฐ ์ ๊ทผ์ด ๋ถ๊ฐํ๋ค.
๋์ ์ฐจ์ด์ ์ ๋ํด ์์๋ณด์.
open
ํค์๋๋
- class ์์๋ง ๋ถ์ ์ ์๋ค.
- ์๋๋ฉด open ํค์๋๊ฐ ๋ถ์๋ค๋ ๊ฒ์ ๋ค๋ฅธ ๋ชจ๋์์ subclassing์ด ๊ฐ๋ฅํ๋ค๋ ์๋ฏธ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ชจ๋ A์์ ๋ง๋ค์ด๋ class๋ฅผ ๋ชจ๋ B์์ subclassingํ์ฌ superClass๋ก ์ผ๊ธฐ ์ํด์๋ ๋ชจ๋ A์ class๊ฐ open ํค์๋๋ก ์ ์ธ๋์ด์ผ ํ๋ค.
-
setter๋ getter๋ณด๋ค ๋ ์ ํ์ ์ธ ์ ๊ทผ ์ ์ด์๋ฅผ ๊ฐ์ง ์ ์๋ค.
// get์ internal set์ private private (set) var name: String
-
protocol์์ ์๋ฅผ ํ์ฉํ๋ ค๋ฉด ์๋ก ๊ท์น์ ์ง์ผ์ฃผ์ด์ผ ํ๋ค.
private (set)์ ํ๋กํ ์ฝ์์ ์ฌ์ฉํ๋ ค๋ฉด protocol ์กฐ๊ฑด์ ์ ๋ง์ถ์ด์ฃผ์ด์ผ ํฉ๋๋ค.
๋ฐ๋ผ์ ์ฐ๋ฆฌ๊ฐ protocol ๊ตฌํ์ฒด์์ set์ ๋ํด private ํค์๋๋ฅผ ๋ถ์ด๊ณ ์ถ๋ค๋ฉด protocol์์ ๋ํ { get set }์ด ์๋ { get }๋ง ๊ฐ๋ฅํด์ผ ํฉ๋๋ค.
protocol Game {
var theShow: String { get }
}
struct Ps5: Game {
private (set) theShow: String
}
- Unit Test๋ฅผ ํ ๋์๋
@testable
ํค์๋๋ฅผ ๋ถ์์ผ๋ก์จ public๊ณผ open์ด ์๋ entity๋ค๋ ์ฌ์ฉํ ์ ์๊ฒํด์ค๋๋ค.
@testable import {target_name}