[swift] public vs private (์ ๊ทผ์ ์ด, ์ ๊ทผ์ง์ ์)
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