iOS ๐ŸŽ/Swift

์ ‘๊ทผ์ œ์–ด, Access control

yongmin.Lee 2021. 12. 28. 18:48

Access Control, ์ ‘๊ทผ ์ œ์–ด

  • ๋‹ค๋ฅธ ์†Œ์ŠคํŒŒ์ผ ๋ฐ ๋ชจ๋“ˆ์˜ ์ฝ”๋“œ์—์„œ, ์ฝ”๋“œ์˜ ์ผ๋ถ€์— ๋Œ€ํ•œ ์•ก์„ธ์Šค(์ ‘๊ทผ)์„ ์ œํ•œ
  • Swift ์ ‘๊ทผ ์ œ์–ด ๋ชจ๋ธ์€ ๋ชจ๋“ˆ ๋ฐ ์†Œ์ŠคํŒŒ์ผ์˜ ๊ฐœ๋…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค.
  • ์ ‘๊ทผ์ œ์–ด๋ฅผ ํ†ตํ•ด  ๊ฐ์ฒด ์™ธ๋ถ€์—์„œ ๊ฐ์ฒด๋‚ด์˜ ์ž๋ฃŒ๋กœ์˜ ์ ‘๊ทผ์„ ์ œํ•œํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •,์กฐ์ž‘ํ•˜๋Š” ๋™์ž‘์€ ๋‚ด๋ถ€์— ๋‘๊ณ  ์ ‘๊ทผ(getter),์„ค์ •(setter)ํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋กœ ๊ฒฐ๊ณผ๋งŒ ๋ฐ›๋„๋ก ํ•˜๋Š” ๊ฐ์ฒด์˜ ์€๋‹‰ํ™”๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค
  • ๋ชจ๋“ˆ
    • ์ฝ”๋“œ ๋ฐฐํฌ(code distribution)์˜ ๋‹จ์ผ ์œ ๋‹›
    • Xcode์˜ ๊ฐ ๋นŒ๋“œ ๋Œ€์ƒ ( ์˜ˆ : ์•ฑ ๋ฒˆ๋“ค ๋˜๋Š” Framework )์€ Swift์—์„œ ๋ณ„๋„์˜ ๋ชจ๋“ˆ๋กœ ์ฒ˜๋ฆฌ
  • ์†Œ์ŠคํŒŒ์ผ
    • ๋ชจ๋“ˆ ๋‚ด์˜ ๋‹จ์ผ Swift์†Œ์Šค ์ฝ”๋“œ ํŒŒ์ผ (์‚ฌ์‹ค์ƒ ์•ฑ ๋˜๋Š” Framework๋‚ด์˜ ๋‹จ์ผ ํŒŒ์ผ)

Access Levels, ์ ‘๊ทผ ๋ ˆ๋ฒจ

  • open(๊ฐ€์žฅ ์ œํ•œ ์ ์Œ) -> public -> internal -> fileprivate -> private(๊ฐ€์žฅ ์ œํ•œ์ )์œผ๋กœ ๊ฐˆ ์ˆ˜๋ก ๋” ์ œํ•œ์ 
  • open
    • open ์ ‘๊ทผ์€ ํด๋ž˜์Šค ๋ฐ ํด๋ž˜์Šค ๋ฉค๋ฒ„์—๋งŒ ์ ์šฉ 
    • ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ •์˜ ๋ชจ๋“ˆ์˜ ๋ชจ๋“  ์†Œ์Šค ํŒŒ์ผ ๋‚ด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ •์˜ํ•œ ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ค๋Š” ๋‹ค๋ฅธ ์™ธ๋ถ€ ๋ชจ๋“ˆ์˜ ์†Œ์ŠคํŒŒ์ผ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ •์˜ ๋œ ๋ชจ๋“ˆ ๋‚ด๋ถ€ ๋ฐ ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ค๋Š” ์™ธ๋ถ€ ๋ชจ๋“ˆ์—์„œ ์„œ๋ธŒ ํด๋ž˜์‹ฑ ๋˜๋Š” override ๋  ์ˆ˜ ์žˆ๋‹ค.
  • public
    • ๊ฐœ๋ณ„ ํƒ€์ž…(individual types)(ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด ๋ฐ ์—ด๊ฑฐ) ๋ฟ๋งŒ์•„๋‹ˆ๋ผ, ํ•ด๋‹น ํƒ€์ž…์— ์†ํ•˜๋Š” ํ”„๋กœํผํ‹ฐ, ๋ฉ”์†Œ๋“œ, ์ด๋‹ˆ์…œ๋ผ์ด์ € ๋ฐ ์ฒจ์ž(subscripts)์— ๋Œ€ํ•ด ํŠน์ • ์ ‘๊ทผ ๋ ˆ๋ฒจ์„ ์ง€์ •ํ•˜๋Š”๋ฐ ์ ์šฉ๋œ๋‹ค
    • ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ •์˜ ๋ชจ๋“ˆ์˜ ๋ชจ๋“  ์†Œ์Šค ํŒŒ์ผ ๋‚ด์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ •์˜ํ•œ ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ์˜ค๋Š” ๋‹ค๋ฅธ ์™ธ๋ถ€ ๋ชจ๋“ˆ์˜ ์†Œ์ŠคํŒŒ์ผ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์ •์˜ ๋œ ๋ชจ๋“ˆ ๋‚ด๋ถ€์—์„œ๋งŒ ์„œ๋ธŒ ํด๋ž˜์‹ฑ ๋˜๋Š” override ๋  ์ˆ˜ ์žˆ๋‹ค.
  • internal
    • ๊ฐœ๋ณ„ ํƒ€์ž…(individual types)(ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด ๋ฐ ์—ด๊ฑฐ) ๋ฟ๋งŒ์•„๋‹ˆ๋ผ, ํ•ด๋‹น ํƒ€์ž…์— ์†ํ•˜๋Š” ํ”„๋กœํผํ‹ฐ, ๋ฉ”์†Œ๋“œ, ์ด๋‹ˆ์…œ๋ผ์ด์ € ๋ฐ ์ฒจ์ž(subscripts)์— ๋Œ€ํ•ด ํŠน์ • ์ ‘๊ทผ ๋ ˆ๋ฒจ์„ ์ง€์ •ํ•˜๋Š”๋ฐ ์ ์šฉ๋œ๋‹ค
    • ์ •์˜ ๋ชจ๋“ˆ์˜ ๋ชจ๋“  ์†Œ์Šค ํŒŒ์ผ ๋‚ด์—์„œ ์‚ฌ์šฉ๋˜์ง€๋งŒ, ํ•ด๋‹น ๋ชจ๋“ˆ ์™ธ๋ถ€์˜ ์†Œ์ŠคํŒŒ์ผ์—์„œ๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค
    • ๊ฐ™์€ ์ •์˜ ๋ชจ๋“ˆ์ด๋ฉด ๋‹ค๋ฅธ ์†Œ์ŠคํŒŒ์ผ์ด์–ด๋„ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅ
    • ๊ฐ™์€ ์ •์˜ ๋ชจ๋“ˆ ๋‚ด๋ถ€์—์„œ๋Š” ์„œ๋ธŒ ํด๋ž˜์‹ฑ ๋˜๋Š” override ๋  ์ˆ˜ ์žˆ๋‹ค.
  • fileprivate
    • ๊ฐœ๋ณ„ ํƒ€์ž…(individual types)(ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด ๋ฐ ์—ด๊ฑฐ) ๋ฟ๋งŒ์•„๋‹ˆ๋ผ, ํ•ด๋‹น ํƒ€์ž…์— ์†ํ•˜๋Š” ํ”„๋กœํผํ‹ฐ, ๋ฉ”์†Œ๋“œ, ์ด๋‹ˆ์…œ๋ผ์ด์ € ๋ฐ ์ฒจ์ž(subscripts)์— ๋Œ€ํ•ด ํŠน์ • ์ ‘๊ทผ ๋ ˆ๋ฒจ์„ ์ง€์ •ํ•˜๋Š”๋ฐ ์ ์šฉ๋œ๋‹ค
    • ๊ฐ™์€ ๋ชจ๋“ˆ ๋‚ด์—์„œ๋„ ๊ฐ™์€ ์ •์˜ ์†Œ์ŠคํŒŒ์ผ ์•ˆ์—์„œ๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅ
    • ๊ฐ™์€ ์ •์˜ ๋ชจ๋“ˆ์ด๋ฉด์„œ ๊ฐ™์€ ์†Œ์ŠคํŒŒ์ผ์—์„œ๋Š” ์„œ๋ธŒ ํด๋ž˜์‹ฑ ๋˜๋Š” override ๋  ์ˆ˜ ์žˆ๋‹ค.
  • private
    • ๊ฐœ๋ณ„ ํƒ€์ž…(individual types)(ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด ๋ฐ ์—ด๊ฑฐ) ๋ฟ๋งŒ์•„๋‹ˆ๋ผ, ํ•ด๋‹น ํƒ€์ž…์— ์†ํ•˜๋Š” ํ”„๋กœํผํ‹ฐ, ๋ฉ”์†Œ๋“œ, ์ด๋‹ˆ์…œ๋ผ์ด์ € ๋ฐ ์ฒจ์ž(subscripts)์— ๋Œ€ํ•ด ํŠน์ • ์ ‘๊ทผ ๋ ˆ๋ฒจ์„ ์ง€์ •ํ•˜๋Š”๋ฐ ์ ์šฉ๋œ๋‹ค
    • enclosing declaration ์œผ๋กœ ์ œํ•œ
    • swift4 ์ถ”๊ฐ€์‚ฌํ•ญ : ๋™์ผํ•œ ํŒŒ์ผ์— ์žˆ๋Š” ํ•ด๋‹น ์„ ์–ธ์˜ extension์œผ๋กœ ์ œํ•œ

 

 

 

 

์ฐธ๊ณ 

https://zeddios.tistory.com/383