ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Swift] Access Control (์ ‘๊ทผ ์ œ์–ด)
    Swift 2022. 2. 28. 16:54

    Access Control

    ์ ‘๊ทผ ์ œ์–ด๋Š” ๋‹ค๋ฅธ ์†Œ์Šค ํŒŒ์ผ ๋ฐ ๋ชจ๋“ˆ์— ์žˆ๋Š” ์ฝ”๋“œ์˜ ์ฝ”๋“œ ์ผ๋ถ€์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ œํ•œํ•œ๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ์ฝ”๋“œ์˜ ์„ธ๋ถ€ ๊ตฌํ˜„ ์ •๋ณด๋ฅผ ์ˆจ๊ธฐ๊ณ , ํ•ด๋‹น ์ฝ”๋“œ์— ์ ‘๊ทผํ•˜๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ณธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ๊ฐœ๋ณ„ ํƒ€์ž… (ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜•) ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ•ด๋‹น ํƒ€์ž…์— ์†ํ•˜๋Š” ์†์„ฑ, ๋ฉ”์†Œ๋“œ, ์ด๋‹ˆ์…œ๋ผ์ด์ € ๋ฐ ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ์—๋„ ํŠน์ • ์ ‘๊ทผ ๋ ˆ๋ฒจ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ”„๋กœํ† ์ฝœ์€ ์ „์—ญ ์ƒ์ˆ˜, ๋ณ€์ˆ˜, ํ•จ์ˆ˜์ฒ˜๋Ÿผ ํŠน์ • ์ปจํ…์ŠคํŠธ๋กœ ์ œํ•œ๋  ์ˆ˜ ์žˆ๋‹ค.

    Swift๋Š” ๋‹ค์–‘ํ•œ ๋ ˆ๋ฒจ์˜ ์ ‘๊ทผ ์ œ์–ด๋ฅผ ์ œ๊ณตํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ผ๋ฐ˜์ ์ธ ์‹œ๋‚˜๋ฆฌ์˜ค์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ ‘๊ทผ ๋ ˆ๋ฒจ์„ ์ œ๊ณตํ•˜์—ฌ ๋ช…์‹œ์ ์œผ๋กœ ์ ‘๊ทผ ์ œ์–ด ๋ ˆ๋ฒจ์„ ์ง€์ •ํ•  ํ•„์š”์„ฑ์„ ์ค„์—ฌ์ค€๋‹ค. ์‹ค์ œ๋กœ single-target ์•ฑ์„ ๋งŒ๋“ค ๊ฒฝ์šฐ, ๋ช…์‹œ์ ์œผ๋กœ ์ ‘๊ทผ ์ œ์–ด ๋ ˆ๋ฒจ์„ ์ง€์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

    ์ ‘๊ทผ ์ œ์–ด๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ์˜ ๋‹ค์–‘ํ•œ ์ธก๋ฉด (ํ”„๋กœํผํ‹ฐ, ํƒ€์ž…, ํ•จ์ˆ˜ ๋“ฑ)์„ ๊ฐ„๋žตํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์ด์ œ "Entities"๋ผ๊ณ  ํ•œ๋‹ค.

    Modules and Source Files

    Swift์˜ ์ ‘๊ทผ ์ œ์–ด ๋ชจ๋ธ์€ ๋ชจ๋“ˆ ๋ฐ ์†Œ์Šค ํŒŒ์ผ์˜ ๊ฐœ๋…์— ๊ธฐ์ดˆํ•œ๋‹ค.

    ๋ชจ๋“ˆ์€ ์ฝ”๋“œ ๋ฐฐํฌ์˜ ๋‹จ์ผ ๋‹จ์œ„๋กœ ๊ตฌ์ถ•๋˜์–ด ์ œ๊ณต๋˜๋ฉฐ Swift์˜ import ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ๋˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค.

    Xcode์˜ ๊ฐ ๋นŒ๋“œ ํƒ€๊ฒŸ (์•ฑ ๋ฒˆ๋“ค ๋˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ)์€ Swift์—์„œ ๋ณ„๋„์˜ ๋ชจ๋“ˆ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค. ์•ฑ์˜ ์ฝ”๋“œ์˜ ์—ฌ๋Ÿฌ ์ธก๋ฉด์„ ๋…๋ฆฝํ˜• ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๊ทธ๋ฃนํ™”ํ•˜๋ฉด (์•„๋งˆ๋„ ์—ฌ๋Ÿฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์บก์Аํ™”ํ•˜์—ฌ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด) ํ•ด๋‹น ํ”„๋ ˆ์ž„์›Œํฌ ๋‚ด์—์„œ ์ •์˜ํ•œ ๋ชจ๋“  ๊ฒƒ๋“ค์€ ์•ฑ ๋‚ด์—์„œ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ ๋‚ด์—์„œ ์‚ฌ์šฉ๋  ๋•Œ ๋ณ„๋„ ๋ชจ๋“ˆ์˜ ์ผ๋ถ€๊ฐ€ ๋œ๋‹ค.

    ์†Œ์Šค ํŒŒ์ผ์€ ๋ชจ๋“ˆ ๋‚ด์˜ ๋‹จ์ผ Swift ์†Œ์Šค ์ฝ”๋“œ ํŒŒ์ผ์ด๋‹ค (์‚ฌ์‹ค์ƒ ์•ฑ ๋˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ ๋‚ด์˜ ๋‹จ์ผ ํŒŒ์ผ). ๊ฐœ๋ณ„ ํƒ€์ž…์„ ๋ถ„๋ฆฌ๋œ ์†Œ์Šค ํŒŒ์ผ์— ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด์ง€๋งŒ, ํ•˜๋‚˜์˜ ์†Œ์Šค ํŒŒ์ผ์—๋Š” ์—ฌ๋Ÿฌ ํƒ€์ž…, ํ•จ์ˆ˜ ๋“ฑ์— ๋Œ€ํ•œ ์ •์˜๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ๋‹ค.

    Access Levels

    Swift๋Š” ์ฝ”๋“œ ๋‚ด์˜ ์—”ํ‹ฐํ‹ฐ์— ๋Œ€ํ•ด 5๊ฐ€์ง€ ์ ‘๊ทผ ๋ ˆ๋ฒจ์„ ์ œ๊ณตํ•œ๋‹ค. ์ด ์ ‘๊ทผ ๋ ˆ๋ฒจ๋“ค์€ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์ •์˜๋œ ์†Œ์Šค ํŒŒ์ผ๊ณผ ๊ด€๋ จ์ด ์žˆ์œผ๋ฉฐ, ์†Œ์Šค ํŒŒ์ผ์ด ์†ํ•œ ๋ชจ๋“ˆ๋“ค๊ณผ๋„ ๊ด€๋ จ์ด ์žˆ๋‹ค.

    • Open access ์™€ public access ๋ฅผ ํ†ตํ•ด ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ •์˜ํ•œ ๋ชจ๋“ˆ์˜ ์†Œ์Šค ํŒŒ์ผ ๋‚ด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ •์˜ํ•œ ๋ชจ๋“ˆ์„ importํ•˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋“ˆ์˜ ์†Œ์Šค ํŒŒ์ผ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋ ˆ์ž„์›Œํฌ์— ๋Œ€ํ•œ ๊ณต์šฉ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ง€์ •ํ•  ๋•Œ open ๋˜๋Š” public ์ ‘๊ทผ์„ ์‚ฌ์šฉํ•œ๋‹ค. open ๊ณผ public์˜ ์ฐจ์ด์ ์€ ์•„๋ž˜์— ์„ค๋ช…๋˜์–ด์žˆ๋‹ค.
    • Internal access ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ •์˜ํ•œ ๋ชจ๋“ˆ์˜ ๋ชจ๋“  ์†Œ์Šค ํŒŒ์ผ ๋‚ด์—์„œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•ด๋‹น ๋ชจ๋“ˆ ์™ธ๋ถ€์˜ ์†Œ์Šค ํŒŒ์ผ์—์„œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์•ฑ ๋˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•  ๋•Œ internal ์ ‘๊ทผ์„ ์‚ฌ์šฉํ•œ๋‹ค.
    • File-private access ๋Š” ์—”ํ‹ฐํ‹ฐ์˜ ์‚ฌ์šฉ์„ ์ž์ฒด์ ์œผ๋กœ ์ •์˜ํ•œ ์†Œ์Šค ํŒŒ์ผ๋กœ ์ œํ•œํ•œ๋‹ค. ํŠน์ • ๊ธฐ๋Šฅ์˜ ์„ธ๋ถ€ ์ •๋ณด๊ฐ€ ์ „์ฒด ํŒŒ์ผ ๋‚ด์—์„œ ์‚ฌ์šฉ๋  ๊ฒฝ์šฐ, ํ•ด๋‹น ์„ธ๋ถ€ ๊ตฌํ˜„ ์ •๋ณด๋ฅผ ์ˆจ๊ธธ ๋•Œ file-private access๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    • Private access ๋Š” ์—”ํ‹ฐํ‹ฐ๋ฅผ ํฌํ•จํ•˜๋Š” ์„ ์–ธ๊ณผ ๊ฐ™์€ ํŒŒ์ผ์— ์žˆ๋Š” ์„ ์–ธ์˜ ํ™•์žฅ์ž๋กœ ์ œํ•œํ•œ๋‹ค. ํŠน์ • ๊ธฐ๋Šฅ์˜ ๊ตฌํ˜„ ์„ธ๋ถ€ ์ •๋ณด๊ฐ€ ๋‹จ์ผ ์„ ์–ธ ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ, ์ด๋Ÿฌํ•œ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ˆจ๊ธธ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

    Open access๋Š” ๊ฐ€์žฅ ๋†’์€ (๊ฐ€์žฅ ์ œํ•œ์ ์ด์ง€ ์•Š์€) ์ ‘๊ทผ ๋ ˆ๋ฒจ์ด๋ฉฐ, private access๊ฐ€ ๊ฐ€์žฅ ๋‚ฎ์€ (๊ฐ€์žฅ ์ œํ•œ์ ์ธ) ์ ‘๊ทผ ๋ ˆ๋ฒจ์ด๋‹ค.

    Open access๋Š” ํด๋ž˜์Šค, ํด๋ž˜์Šค ๋ฉค๋ฒ„์—๊ฒŒ๋งŒ ์ ์šฉ๋˜๋ฉฐ, Subclassing์—์„œ ์„ค๋ช…ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ชจ๋“ˆ ์™ธ๋ถ€์˜ ์ฝ”๋“œ๊ฐ€ ์„œ๋ธŒํด๋ž˜์Šค์™€ ์˜ค๋ฒ„๋ผ์ด๋“œ๋ฅผ ํ—ˆ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— public access์™€๋Š” ๋‹ค๋ฅด๋‹ค. ํด๋ž˜์Šค๋ฅผ open์œผ๋กœ ๋ช…์‹œํ•œ ๊ฒƒ์€ ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์Šˆํผ ํด๋ž˜์Šค๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋“ˆ์˜ ์ฝ”๋“œ๊ฐ€ ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ๊ณ ๋ คํ–ˆ์œผ๋ฉฐ ์ด์— ๋”ฐ๋ผ ํด๋ž˜์Šค์˜ ์ฝ”๋“œ๋กœ ์„ค๊ณ„ํ–ˆ์Œ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

    open > public > internal > file-private > private

    Guiding Principle of Access Levels

    Swift์˜ ์ ‘๊ทผ ๋ ˆ๋ฒจ์€ ์ „๋ฐ˜์ ์ธ guiding ์›์น™์„ ๋”ฐ๋ฅธ๋‹ค: ๋” ๋‚ฎ์€ (๋” ์ œํ•œ์ ์ธ) ์ ‘๊ทผ ๋ ˆ๋ฒจ์„ ๊ฐ€์ง„ ๋‹ค๋ฅธ ์—”ํ‹ฐํ‹ฐ์˜ ์šฉ์–ด๋กœ ์ •์˜๋  ์ˆ˜ ์žˆ๋Š” ์—”ํ‹ฐํ‹ฐ๋Š” ์—†๋‹ค.

    ์˜ˆ๋ฅผ ๋“ค๋ฉด:

    • public ๋ณ€์ˆ˜๋Š” internal, file-private ๋˜๋Š” private ํƒ€์ž…์„ ๊ฐ–๋Š” ๊ฒƒ์œผ๋กœ ์ •์˜ํ•  ์ˆ˜ ์—†๋‹ค. ์ด ํƒ€์ž…์€ public ๋ณ€์ˆ˜๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“  ๊ณณ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
    • ํ•จ์ˆ˜๋Š” ์ฃผ๋ณ€ ์ฝ”๋“œ์—์„œ ๊ตฌ์„ฑ ํƒ€์ž…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ€์ž… ๋ฐ ๋ฆฌํ„ด ํƒ€์ž…๋ณด๋‹ค ๋†’์€ ์ ‘๊ทผ ๋ ˆ๋ฒจ์„ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค.

    ์–ธ์–ด์˜ ๋‹ค์–‘ํ•œ ์ธก๋ฉด์— ๋Œ€ํ•œ ์ด guiding ์›์น™์˜ ๊ตฌ์ฒด์ ์ธ ๊ฒƒ๋“ค์€์€ ์•„๋ž˜์— ์ž์„ธํžˆ ์„ค๋ช…๋˜์–ด์žˆ๋‹ค.

    Default Access Levels

    ๋ช‡ ๊ฐ€์ง€ ํŠน์ • ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ œ์™ธํ•˜๊ณ  ์ฝ”๋“œ์˜ ๊ฑฐ์˜ ๋ชจ๋“  ์—”ํ‹ฐํ‹ฐ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ๋ช…์‹œ์ ์œผ๋กœ ์ ‘๊ทผ ๋ ˆ๋ฒจ์„ ์ง€์ •ํ•˜์ง€ ์•Š์•„๋„ default ์ˆ˜์ค€์˜ ์ ‘๊ทผ ๋ ˆ๋ฒจ์„ ๊ฐ–๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ฝ”๋“œ์— ๋ช…์‹œ์  ์ ‘๊ทผ ๋ ˆ๋ฒจ์„ ์ง€์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

    Access Levels for Single-Target Apps

    ๊ฐ„๋‹จํ•œ single-target ์•ฑ์„ ์ž‘์„ฑํ•  ๋•Œ, ์•ฑ์˜ ์ฝ”๋“œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์•ฑ ๋‚ด์— ์ž์ฒด์ ์œผ๋กœ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์•ฑ ๋ชจ๋“ˆ ์™ธ๋ถ€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ๊ธฐ๋ณธ ์ ‘๊ทผ ๋ ˆ๋ฒจ์ด ์ด๋ฏธ ์ด ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ์ผ์น˜ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž ์ •์˜ ์ ‘๊ทผ ๋ ˆ๋ฒจ์„ ์ง€์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์•ฑ ๋ชจ๋“ˆ ๋‚ด์˜ ๋‹ค๋ฅธ ์ฝ”๋“œ๋กœ๋ถ€ํ„ฐ ๊ตฌํ˜„ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ˆจ๊ธฐ๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ์˜ ์ผ๋ถ€๋ฅผ file-private ๋˜๋Š” private์œผ๋กœ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.

    Access Levels for Frameworks

    ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ, ํ•ด๋‹น ํ”„๋ ˆ์ž„์›Œํฌ์— ๋Œ€ํ•œ ๊ณต์šฉ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ open ๋˜๋Š” public์œผ๋กœ ํ‘œ์‹œํ•˜์—ฌ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ importํ•˜๋Š” ์•ฑ๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ๋ณด๊ณ  ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ์ด public-facing ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์œ„ํ•œ API์ด๋‹ค.

    ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋ชจ๋“  ๋‚ด๋ถ€ ๊ตฌํ˜„ ์„ธ๋ถ€ ์ •๋ณด๋Š” ์—ฌ์ „ํžˆ ๊ธฐ๋ณธ ์ ‘๊ทผ ๋ ˆ๋ฒจ์ธ internal์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๋‚ด๋ถ€ ์ฝ”๋“œ์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์—์„œ ์ˆจ๊ธฐ๋ ค๋ฉด private ๋˜๋Š” file-private๋กœ ๋งˆํฌํ•˜๋ฉด ๋œ๋‹ค. ์—”ํ‹ฐํ‹ฐ๊ฐ€ ํ”„๋ ˆ์ž„์›Œํฌ API์˜ ์ผ๋ถ€๊ฐ€ ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž€๋‹ค๋ฉด open ๋˜๋Š” public์œผ๋กœ ํ‘œ์‹œํ•ด์•ผํ•œ๋‹ค.

    Access Levels for Unit Test Targets

    ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ๋Œ€์ƒ์œผ๋กœ ์•ฑ์„ ์ž‘์„ฑํ•  ๋•Œ, ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด ์•ฑ์˜ ์ฝ”๋“œ๋ฅผ ํ•ด๋‹น ๋ชจ๋“ˆ์— ์ œ๊ณตํ•ด์•ผํ•œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ๋Š” open ๋˜๋Š” public์œผ๋กœ ํ‘œ์‹œ๋œ ์—”ํ‹ฐํ‹ฐ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ @testable ํŠน์„ฑ์„ ๊ฐ€์ง„ ํ”„๋กœ๋•ํŠธ ๋ชจ๋“ˆ์„ importํ•˜๊ณ  ํ”„๋กœ๋•ํŠธ ๋ชจ๋“ˆ์˜ ํ…Œ์ŠคํŠธ๊ฐ€ ํ™œ์„ฑํ™”๋œ ์ƒํƒœ๋กœ ์ปดํŒŒ์ผํ•˜๋Š” ๊ฒฝ์šฐ, ์œ ๋‹› ํ…Œ์ŠคํŠธ ๋Œ€์ƒ์€ ๋‚ด๋ถ€ ์—”ํ‹ฐํ‹ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์ •๋ฆฌ

    Keyword Access Level Inheritance
    open ๊ฐ€์žฅ ๋†’์€ (์ œํ•œ์ ์ด์ง€ ์•Š์€) ์ ‘๊ทผ ๋ ˆ๋ฒจ์œผ๋กœ, ํด๋ž˜์Šค์™€ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ. ๋ชจ๋“ˆ ์™ธ๋ถ€์—์„œ๋„ ์ ‘๊ทผ ๊ฐ€๋Šฅ O
    public ๋ชจ๋“ˆ ์™ธ๋ถ€์—์„œ๋„ ์ ‘๊ทผ ๊ฐ€๋Šฅ.ํด๋ž˜์Šค์™€ ๊ตฌ์กฐ์ฒด ๋ชจ๋‘์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ. O
    internal ๊ฐ™์€ ๋ชจ๋“ˆ ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ. ๊ธฐ๋ณธ ์ ‘๊ทผ ๋ ˆ๋ฒจ์ด๋ฏ€๋กœ ํ‘œ๊ธฐํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. ๋ฒ”์œ„ ๋‚ด์—์„œ๋งŒ ๊ฐ€๋Šฅ
    file-private ๊ฐ™์€ ํŒŒ์ผ ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ ๋ฒ”์œ„ ๋‚ด์—์„œ๋งŒ ๊ฐ€๋Šฅ
    private ๊ฐ€์žฅ ๋‚ฎ์€ (์ œํ•œ์ ์ธ) ์ ‘๊ทผ ๋ ˆ๋ฒจ์œผ๋กœ, ์ •์˜ํ•œ ๋ธ”๋ก ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ X

    ใ…ค

    ใ…ค

    Apple Documentation

    'Swift' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

    [Swift] Delegate, Notification, KVO  (0) 2022.03.15
    [Swift] Copy On Write (COW)  (0) 2022.03.03
    [Swift] print ํ•จ์ˆ˜ (separator, terminator)  (0) 2022.02.26
    [Swift] UIColor  (0) 2022.02.15
    [Swift] CGColor  (0) 2022.02.15

    ๋Œ“๊ธ€

Designed by Tistory.