iOS & swift

[swift] public vs private (์ ‘๊ทผ์ œ์–ด, ์ ‘๊ทผ์ง€์ •์ž)

ggasoon2 2021. 4. 30. 18:09

public๊ณผ private

 

ํ•จ์ˆ˜, ํด๋ž˜์Šค, ํ”„๋กœํผํ‹ฐ ๋“ฑ ์„ ์–ธํ•  ๋•Œ ํ•ญ์ƒ ์จ์™”์—ˆ์ฃ ..

 

public์€ ๋Œ€์ถฉ ์ „์—ญ ๋ณ€์ˆ˜ ๋А๋‚Œ, private์€ ์ง€์—ญ๋ณ€์ˆ˜ ๋А๋‚Œ์ฒ˜๋Ÿผ ์ƒ๊ฐํ•˜๊ณ  ๋„˜์–ด๊ฐ”์Šต๋‹ˆ๋‹ค.

 

๊ฐœ๋…์„ ๋ช…ํ™•ํžˆ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ์—ˆ์–ด์š”.

 

 

์ด๋ฒˆ์— ํ•œ๋ฒˆ ์™„๋ฒฝํ•œ ์ดํ•ด๋ฅผ ํ•ด๋ณด๊ณ ์ž ๊ธ€์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

 

 

์šฐ์„  ์ด๋Ÿฐ ๊ฒƒ๋“ค์„ Swift ์—์„œ๋Š” Access Control (์ ‘๊ทผ ์ œ์–ด)๋ผ๊ณ  ๋ช…ํ•ด ๋’€์Šต๋‹ˆ๋‹ค.

 

์‚ฌ์šฉํ•˜๋Š” ๋ชฉ์ ์€ ์„ธ๋ถ€์ ์ธ ๊ตฌํ˜„์€ ๊ฐ์ถ”๊ณ , ํ•„์š”ํ•œ๋งŒํผ๋งŒ ๊ณต๊ฐœํ•ด ๋‹ค๋ฅธ ๊ณณ์—์„œ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.

 

๊ณต๊ฐœ ์ •๋„์— ๋”ฐ๋ผ 5๊ฐ€์ง€ ๋ ˆ๋ฒจ๋กœ ๋ถ„๋ฅ˜ํ•ด๋’€๋Š”๋ฐ์š”. ๊ณต๊ฐœ์ •๋„๊ฐ€ ๋†’์€ ์ˆœ์— ๋”ฐ๋ผ์„œ ์ •๋ฆฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

1. Open : ์„ ์–ธํ•œ ๋ชจ๋“ˆ ์™ธ์— ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ๋„ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ๋„ ์˜ค๋ฒ„๋ผ์ด๋“œ์™€ ์„œ๋ธŒํด๋ž˜์‹ฑ์ด ๊ฐ€๋Šฅํ•ด์š”.

 

์˜ค๋ฒ„๋ผ์ด๋”ฉ์€ ์ด์ „ ๊ธ€ https://ggasoon2.tistory.com/2 ์„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.

์„œ๋ธŒํด๋ž˜์‹ฑ์€ ์ƒ์†. ์ฆ‰ ๋ถ€๋ชจ๋กœ๋ถ€ํ„ฐ ํŠน์„ฑ์„ ๋ฌผ๋ ค๋ฐ›๋Š”๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ Open์€ Class์—๋งŒ ์‚ฌ์šฉํ•ด์š”. Struct, Enum์€ ์ƒ์† ๋ถˆ๊ฐ€๋Šฅ์ด๋‹ˆ๊น.

 

 

2. Public : Open๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ๋„ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ์˜ค๋ฒ„๋ผ์ด๋“œ x, ์„œ๋ธŒํด๋ž˜์‹ฑ x

 

 

3. Internal : ์„ ์–ธํ•œ ํ•ด๋‹น ๋ชจ๋“ˆ ์ „์ฒด์—์„œ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ ‘๊ทผ์ œ์–ด๋ฅผ ๋”ฐ๋กœ ๋ช…์‹œํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ Internal์ด Default ๊ฐ’์ž…๋‹ˆ๋‹ค.

 

 

4. File-private : ์„ ์–ธ๋œ File ์•ˆ์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ.

ํ•ด๋‹น .swift ํŒŒ์ผ ์•ˆ์—์„œ๋งŒ ์ƒ์†, ์žฌ์ •์˜, ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹จ ๊ฑฐ๊ฒ ์ฃ ?

 

 

5. Private : ์„ ์–ธ๋œ ๊ด„ํ˜ธ - { } ์•ˆ์—์„œ๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. 

 

Private์˜ ์˜ˆ์ œ ์ž…๋‹ˆ๋‹ค.

 

 

 

publicVariable๋Š” ์ธ์Šคํ„ด์Šค ๊ฐ์ฒด b์—์„œ ๋ฐ”๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

print(b.publicVarialbe) ํ•˜๋ฉด 13์ด ์ถœ๋ ฅ๋˜๋Š” ๋ชจ์Šต.

 

์‚ฌ์‹ค public ๋ง๊ณ  internal, fileprivate๋„ ๊ฐ€๋Šฅํ•ด์š”. open์€ class๊ฐ€ ์•„๋‹ˆ๋‹ˆ ๋ถˆ๊ฐ€๋Šฅ...

 

 

privateVariable์€ SomeStruct ์•ˆ์—์„œ๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋ž˜์„œ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šคํ™” ๋œ a.privateVariable ๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ๋ชจ์Šต!!

 

a.doSomething()์ฒ˜๋Ÿผ privateVariable์ด ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๋‚ด๋ถ€ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•˜์—ฌ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

(์ ‘๊ทผ์ œ์–ด private์˜ ๋ชฉ์ ์ธ ๊ฑฐ์ฃ . ์ ‘๊ทผ์„ ์ œํ•œํ•œ๋‹ค.. ๋‚ด๋ถ€ ๊ด„ํ˜ธ ์™ธ์—์„œ ์ ‘๊ทผ ๊ธˆ์ง€!)

 

 

์ถ”๊ฐ€: ์„ ์–ธ๋œ '๊ด„ํ˜ธ'์•ˆ์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ผ๊ณ ํ–ˆ๋Š”๋ฐ, ๋งŒ์•ฝ .swift ํŒŒ์ผ์˜ ์ตœ์ƒ๋‹จ import ๋ถ€๋ถ„ ๋ฐ‘์— private ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๊ฒฝ์šฐ์—๋Š” ํ•ด๋‹น swiftํŒŒ์ผ์˜ ์–ด๋””์—์„œ๋“  ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. like fileprivate

 

 

์ด์ฒ˜๋Ÿผ ์ ‘๊ทผ์ œ์–ด์ž๋Š” ์ •๋ณด ์€๋‹‰์˜ ํšจ๊ณผ๊ฐ€ ์žˆ๊ณ ,

์ ‘๊ทผ์„ฑ์˜ ์ฐจ๋ณ„ํ™”๋ฅผ ๋‘์–ด ์ข€ ๋” ํ™•์‹คํ•œ(์•ˆ์ „ํ•œ?) ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์š”.

 

 

 

 

 

public๊ณผ private์˜ ์ฐจ์ด ์•„์‹œ๊ฒ ์ฃ ?

 

์ ‘๊ทผ์ œ์–ด ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค!

 

 

 

 

 

 

์ฐธ๊ณ :

https://docs.swift.org/swift-book/LanguageGuide/AccessControl.html