[ Swift ] ์ ‘๊ทผ์ œ์–ด(Access Control) #1 - ์›์น™๊ณผ ๋ฌธ๋ฒ•

๐Ÿ“’ Study/๐Ÿšฉ Swift โ”ƒ 2024. 3. 13. 17:58
๋ชฉ์ฐจ
  1. ์ ‘๊ทผ์ œ์–ด์˜ ๊ธฐ๋ณธ ๊ฐœ๋…
  2. ์ ‘๊ทผ์ œ์–ด๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 
  3. ์ ‘๊ทผ์ œ์–ด์˜ ์ข…๋ฅ˜
  4. ์ ‘๊ทผ ์ œ์–ด์˜ ๊ธฐ๋ณธ ์›์น™ / ๊ธฐ๋ณธ ๋ฌธ๋ฒ•
  5. ๊ธฐ๋ณธ ์›์น™
  6. ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

 

 

์ ‘๊ทผ์ œ์–ด์˜ ๊ธฐ๋ณธ ๊ฐœ๋…

 

 

์ ‘๊ทผ์ œ์–ด๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 

  • ์• ํ”Œ์ด ์›ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๊ฐ์ถœ ์ˆ˜ ์žˆ์Œ.
  • ์ฝ”๋“œ์˜ ์˜์—ญ์„ ๋ถ„๋ฆฌ์‹œ์ผœ์„œ, ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
  • ์ปดํŒŒ์ผ ์‹œ๊ฐ„ ๊ฐ์†Œ

 

์ปดํŒŒ์ผ๋Ÿฌ ์ž…์žฅ์—์„œ๋Š” ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ€ ์–ด๋А ๋ฒ”์œ„์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์ธ์ง€ํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋” ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 


      
class Student {
private var _name: String = "ํ™๊ธธ๋™"
func setName(_ name: String) {
self._name = name
}
}
var student = Student()
// student._name // ๐Ÿšจ error: Value of type 'Student' has no member 'name'
// student._name = "EarthSea" // ๐Ÿšจ error: Value of type 'Student' has no member 'name'
student.setName("EarthSea")

 

private ๋กœ ์„ ์–ธ๋œ _name ์ด๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ Class ๋ฐ–์—์„œ๋Š” ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

setName ํ•จ์ˆ˜๋Š” Class ๋‚ด๋ถ€์— ์žˆ๋Š” ์š”์†Œ์ด๋ฏ€๋กœ _name ์ด๋ผ๋Š” ๋ณ€์ˆ˜์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์™ธ๋ถ€์—์„œ _name ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” setName ์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ์ ‘๊ทผํ•œ๋‹ค. -> ์•ˆ์ „์„ฑ์ด ๋†’์Œ.

 

 

์ ‘๊ทผ์ œ์–ด์˜ ์ข…๋ฅ˜

  • open : ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ ( ์ƒ์† / ์žฌ์ •์˜ ๊ฐ€๋Šฅ )
  • public : ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ ( ์ƒ์† / ์žฌ์ •์˜ ๋ถˆ๊ฐ€๋Šฅ )
  • internal : ๊ฐ™์€ ๋ชจ๋“ˆ์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ ( default ์„ค์ • )
  • fileprivate : ๊ฐ™์€ ํŒŒ์ผ ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • private : ๊ฐ™์€ scope๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ

 

-> ์ ‘๊ทผ ์ œํ•œ์ž๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ internal ๋กœ ์„ ์–ธ์ด ๋จ.

-> open ์€ ํด๋ž˜์Šค์—์„œ๋งŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅ ( ์ƒ์†๊ณผ ์žฌ์ •์˜๊ฐ€ ๊ฐ€๋Šฅํ•œ ํƒ€์ž…์ด ํด๋ž˜์Šค ๋ฟ์ด๊ธฐ ๋•Œ๋ฌธ )

 

 

๋ชจ๋“ˆ์ด๋ž€?
ํ”„๋ ˆ์ž„ ์›Œํฌ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์•ฑ ๋“ฑ importํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์™ธ๋ถ€์˜ ์ฝ”๋“œ

 

 

 

์ ‘๊ทผ ์ œ์–ด์˜ ๊ธฐ๋ณธ ์›์น™ / ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

 

๊ธฐ๋ณธ ์›์น™

ํƒ€์ž…์€ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ๋ณ€์ˆ˜(์†์„ฑ)์ด๋‚˜, ํ•จ์ˆ˜(๋ฉ”์„œ๋“œ)๋ณด๋‹ค ๋†’์€ ์ˆ˜์ค€์œผ๋กœ ์„ ์–ธ๋˜์–ด์•ผํ•œ๋‹ค.

์ฆ‰, ์ƒ์œ„ ์š”์†Œ๋ณด๋‹ค ํ•˜์œ„ ์š”์†Œ๊ฐ€ ๋” ๋†’์€ ์ ‘๊ทผ ์ˆ˜์ค€์„ ๊ฐ€์งˆ ์ˆ˜๋Š” ์—†๋‹ค.

 


      
private func sFunc(a: Int) -> Bool {
//public var a: Int = a // ๐Ÿšจ Error : Attribute 'public' can only be used in a non-local scope
//print(a)
return true
}

 

sFunc ์€ internal ํƒ€์ž…์ด์ง€๋งŒ, ๋‚ด๋ถ€์˜ a ๋Š” public ํƒ€์ž…์œผ๋กœ ์„ ์–ธ์ด ๋  ์ˆ˜ ์—†๋‹ค.

 

 

 

๊ธฐ๋ณธ ๋ฌธ๋ฒ•

 

ํƒ€์ž…


      
public class SomePublicClass {}
internal class SomeInternalClass {}
fileprivate class SomeFilePrivateClass {}
private class SomePrivateClass {}

 

 

๋ณ€์ˆ˜ / ํ•จ์ˆ˜


      
public var somePublicVariable = 0
internal let someInternalConstant = 0
fileprivate func someFilePrivateFunction() {}
private func somePrivateFunction() {}

 

default


      
class SomeInternalClass1 {}
let someInternalConstant1 = 0

 

 

private์˜ ๊ด€์Šต์ ์ธ ํŒจํ„ด

๊ด€์Šต์ ์œผ๋กœ ์‹ค๋ฌด์—์„œ๋Š” private๋กœ ์„ ์–ธ๋œ ์†์„ฑ์€ ๋ณ€์ˆ˜๋ช… ์•ž์— ์–ธ๋”๋ฐ”(_)๋ฅผ ํ‘œ์‹œํ•œ๋‹ค.

 

 

์ €์žฅ ์†์„ฑ์˜ ์™ธ๋ถ€์—์„œ ์“ฐ๊ธฐ๋ฅผ ์ œํ•œํ•˜๋Š” ๋ฐฉ๋ฒ•


      
class SomeOtherClass {
private var _name = "์ด๋ฆ„" // ์“ฐ๊ธฐ - private
var name: String { // ์ฝ๊ธฐ - internal
return _name
}
}
class SomeAnotherClass {
private(set) var name = "์ด๋ฆ„" // ์ฝ๊ธฐ - internal / ์“ฐ๊ธฐ - private
}

์ฝ๊ธฐ๋Š” internal , ์“ฐ๊ธฐ๋Š” private ๋กœ ์„ ์–ธํ•˜๊ณ  ์‹ถ์œผ๋ฉด private(set) ์œผ๋กœ ์“ฐ๋ฉด ๋œ๋‹ค.

 

 

 

์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)
  1. ์ ‘๊ทผ์ œ์–ด์˜ ๊ธฐ๋ณธ ๊ฐœ๋…
  2. ์ ‘๊ทผ์ œ์–ด๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 
  3. ์ ‘๊ทผ์ œ์–ด์˜ ์ข…๋ฅ˜
  4. ์ ‘๊ทผ ์ œ์–ด์˜ ๊ธฐ๋ณธ ์›์น™ / ๊ธฐ๋ณธ ๋ฌธ๋ฒ•
  5. ๊ธฐ๋ณธ ์›์น™
  6. ๊ธฐ๋ณธ ๋ฌธ๋ฒ•
'๐Ÿ“’ Study/๐Ÿšฉ Swift' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [ Swift ] ๊ณ ์ฐจํ•จ์ˆ˜ map, compactMap, flatMap์˜ ์ฐจ์ด
  • [ Swift ] ํ™•์žฅ(Extension) #1 - ํ™•์žฅ์˜ ๊ฐœ๋…๊ณผ ์ƒ์†๊ณผ์˜ ์ฐจ์ด
  • [ Swift ] ์†์„ฑ ๊ฐ์‹œ์ž(Property Observers)
  • [ Swift ] ํƒ€์ž…์บ์ŠคํŒ…(Type Casting)
EarthSea
EarthSea
์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž ์งธ์ž…๋‹ˆ๋‹ค ๐ŸŒฑ

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๊ธ€์“ฐ๊ธฐ
EarthSea
EarthSea's Log๐ŸŒ
EarthSea

๊ณต์ง€์‚ฌํ•ญ

  • EarthSea's Introduce
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
    • โœ๏ธ TIL
    • ๐Ÿ“‘ Project
    • ๐Ÿ“’ Study
      • ๐ŸŒ React
      • ๐Ÿšฉ Swift
      • ๐Ÿ“ UIKit
      • ๐Ÿ–ค Git
      • ๐Ÿฉต Python
    • ๐Ÿง‘๐Ÿปโ€๐Ÿ’ป Coding Test
      • โŒจ๏ธ Programmers
      • ๐Ÿ–Œ๏ธ BAEKJOON
    • ๐ŸŽ† SSAFY
    • ๐ŸŽ Apple
    • ๐Ÿท๏ธ Tistory
    • ์˜ค๋กฏ์ด ๋‚˜์˜ ์‹œ๊ฐ„
Total
Today
Yesterday
hELLO ยท Designed By ์ •์ƒ์šฐ.v4.2.2
EarthSea
[ Swift ] ์ ‘๊ทผ์ œ์–ด(Access Control) #1 - ์›์น™๊ณผ ๋ฌธ๋ฒ•
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.