Skip to content

Latest commit

ย 

History

History
69 lines (42 loc) ยท 3.38 KB

File metadata and controls

69 lines (42 loc) ยท 3.38 KB

์ ‘๊ทผ ์ œํ•œ์ž (private, fileprivate, internal, public, open)

์ ‘๊ทผ ์ œํ•œ์ž ํ˜•์šฉ ๋ฒ”์œ„

  • private : ๊ฐ™์€ ํด๋ž˜์Šค

  • fileprivate : ๊ฐ™์€ ์†Œ์Šค ํŒŒ์ผ (.swift)

  • internal : ๊ฐ™์€ ๋ชจ๋“ˆ(framework) or ๊ฐ™์€ ํ”„๋กœ์ ํŠธ

  • public : ๋ชจ๋“ˆ ์™ธ๋ถ€๊นŒ์ง€ ๊ฐ€๋Šฅ

  • open : ๋ชจ๋“ˆ ์™ธ๋ถ€, ์ƒ์† ๋ฐ override ๊ฐ€๋Šฅ (ํ™•์žฅ ๊ฐ€๋Šฅ)

์„ ์–ธํ•˜์ง€ ์•Š์„์‹œ ๋””ํดํŠธ๋Š” internal ์ ‘๊ทผ ์ œํ•œ์ž !!!

๋ธ”๋ก ๋‚ด๋ถ€์—์„œ์˜ ์ ‘๊ทผ์ œํ•œ์ž ์˜ˆ์‹œ

public class SomePublicClass {                  // explicitly public class
    public var somePublicProperty = 0            // explicitly public class member
    var someInternalProperty = 0                 // implicitly internal class member
    fileprivate func someFilePrivateMethod() {}  // explicitly file-private class member
    private func somePrivateMethod() {}          // explicitly private class member
}

class SomeInternalClass {                       // implicitly internal class
    var someInternalProperty = 0                 // implicitly internal class member
    fileprivate func someFilePrivateMethod() {}  // explicitly file-private class member
    private func somePrivateMethod() {}          // explicitly private class member
}

fileprivate class SomeFilePrivateClass {        // explicitly file-private class
    func someFilePrivateMethod() {}              // implicitly file-private class member
    private func somePrivateMethod() {}          // explicitly private class member
}

private class SomePrivateClass {                // explicitly private class
    func somePrivateMethod() {}                  // implicitly private class member
}

๊ฐ€์ด๋“œ ์›์น™

Swift์—์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์ ‘๊ทผ๋ ˆ๋ฒจ ๊ฐ€์ด๋“œ ์›์น™ (Guiding Principle of Access Levels)์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค.

  1. public ๋ณ€์ˆ˜๋Š” ๋‹ค๋ฅธ internal, file-private ํ˜น์€ private ํƒ€์ž…์—์„œ ์ •์˜๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ทธ ํƒ€์ž…์€ public ๋ณ€์ˆ˜๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๋ชจ๋“  ๊ณณ์—์„œ ์‚ฌ์šฉ๋  ์ˆ˜ ์—†์„ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

  2. ํ•จ์ˆ˜๋Š” ๊ทธ ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ํƒ€์ž…์ด๋‚˜ ๋ฆฌํ„ด ๊ฐ’ ํƒ€์ž…๋ณด๋‹ค ๋” ๋†’์€ ์ ‘๊ทผ ๋ ˆ๋ฒจ์„ ๊ฐ–์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ํ•จ์ˆ˜์—๋Š” ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ํŒŒ๋ผ๋ฏธํ„ฐ์— ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅ ํ•˜๊ฑฐ๋‚˜ ํ˜น์€ ๋ฐ˜ํ™˜ ๊ฐ’ ํƒ€์ž…๋ณด๋‹ค ์ ‘๊ทผ ๋ ˆ๋ฒจ์ด ๋‚ฎ์•„ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ด€๋ จ ์ฝ”๋“œ์—์„œ ์ด์šฉํ•  ์ˆ˜ ์—†์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

  3. ์•„๋ฌด๋Ÿฐ ์ ‘๊ทผ ๋ ˆ๋ฒจ์„ ๋ช…์‹œํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ internal์„ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  4. ๋‹จ์ผ ํƒ€๊ฒŸ ์•ฑ์—์„œ๋Š” ํŠน๋ณ„ํžˆ ์ ‘๊ทผ๋ ˆ๋ฒจ์„ ๋ช…์‹œํ•  ํ•„์š”๊ฐ€ ์—†์ง€๋งŒ ํ•„์š”์— ๋”ฐ๋ผ fileprivate, private๋“ฑ์„ ์‚ฌ์šฉํ•ด ์•ฑ๋‚ด์—์„œ ๊ตฌํ˜„ ์„ธ๋ถ€์‚ฌํ•ญ์„ ์ˆจ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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



์ฐธ๊ณ ์ž๋ฃŒ

[iOS - swift ๊ณต์‹ ๋ฌธ์„œ] 26. Access Control (์ ‘๊ทผ์ œํ•œ)

[Swift] Access Control : ์ ‘๊ทผ์ œ์–ด(open, public, internal, fileprivate, private)

https://velog.io/@zooneon/Swift-์ ‘๊ทผ์ œ์–ด์—-๋Œ€ํ•ด-์•Œ์•„๋ณด์ž