๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“ฑ Mobile/iOS

[iOS - Swift] ์ ‘๊ทผ ์ œ์–ด์ž(open, public, internal, fileprivate, private), setter

๐ŸŽ ์ ‘๊ทผ ์ œ์–ด์ž

์ ‘๊ทผ ์ œ์–ด์ž๋Š” ํ•˜๋‚˜์˜ ํŒŒ์ผ์—์„œ ๋‹ค๋ฅธ ํŒŒ์ผ์— ์žˆ๋Š” ์ฝ”๋“œ์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์ ‘๊ทผ ์ œ์–ด์ž๋ฅผ ํ†ตํ•ด ํŠน์ • ์ฝ”๋“œ์˜ ์„ธ๋ถ€์ ์ธ ๊ตฌํ˜„์€ ์ˆจ๊ธฐ๊ณ , ํ—ˆ์šฉ๋œ ๊ธฐ๋Šฅ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋‹ค.

module๊ณผ source file์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์ ‘๊ทผ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

module : ํ•˜๋‚˜์˜ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. import ๋กœ ์ถ”๊ฐ€๋˜๋Š” ๊ฒƒ๋“ค์ด๋‹ค. (UIKit, Foundation ๋“ฑ)
source file : module ์•ˆ์— ์žˆ๋Š” ํŒŒ์ผ๋“ค์ด๋‹ค. (data.swift, example.swift ๋“ฑ)

 

 

์ ‘๊ทผ ์ œ์–ด์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š”?

  • ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณดํ˜ธํ•˜๊ธฐ ์œ„ํ•ด์„œ
  • ์™ธ๋ถ€์—๋Š” ๋ถˆํ•„์š”ํ•˜๊ณ  ๋‚ด๋ถ€์ ์œผ๋กœ๋งŒ ์‚ฌ์šฉ๋˜๋Š” ๋ถ€๋ถ„์„ ์ˆจ๊ธฐ๊ธฐ ์œ„ํ•ด์„œ

 

๐ŸŽ Swift์˜ 5๊ฐ€์ง€ ์ ‘๊ทผ ์ œ์–ด์ž

1. open (๊ฐœ๋ฐฉ ์ ‘๊ทผ์ˆ˜์ค€)

  • ๊ฐœ๋ฐฉ ์ ‘๊ทผ์ˆ˜์ค€์€ ํด๋ž˜์Šค์™€ ํด๋ž˜์Šค ๋ฉค๋ฒ„์—๋งŒ ์ ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๊ฐœ๋ฐฉ ์ ‘๊ทผ์ˆ˜์ค€์˜ ํด๋ž˜์Šค๋Š” ๊ทธ ํด๋ž˜์Šค๊ฐ€ ์ •์˜๋œ ๋ชจ๋“ˆ ๋ฐ–์˜ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ๋„ ์ƒ์†ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐœ๋ฐฉ ์ ‘๊ทผ์ˆ˜์ค€์˜ ํด๋ž˜์Šค ๋ฉค๋ฒ„๋Š” ํ•ด๋‹น ๋ฉค๋ฒ„๊ฐ€ ์ •์˜๋œ ๋ชจ๋“ˆ ๋ฐ–์˜ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ๋„ ์žฌ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
open class Animal {
	open func bark() {
		print("๋ฉ๋ฉ๋ฉ")
	}
}

class Dog: Animal {
	override open func bark(){
		print("์™ˆ์™ˆ์™ˆ")
	}
}

 

2. public (๊ณต๊ฐœ ์ ‘๊ทผ์ˆ˜์ค€)

  • public ํ‚ค์›Œ๋“œ๋กœ ์ง€์ •๋œ ์š”์†Œ๋Š” ์–ด๋””์„œ๋“  ์“ฐ์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ณต๊ฐœ ์ ‘๊ทผ์ˆ˜์ค€์€ ์ฃผ๋กœ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์™ธ๋ถ€์™€ ์—ฐ๊ฒฐ๋  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ๋งŽ์ด ์“ฐ์ธ๋‹ค.
๐ŸŽ open๊ณผ public์˜ ์ฐจ์ด์  
open ์ ‘๊ทผ์ˆ˜์ค€์€ Class์—๋งŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 
Struct, enum์€ public ๋ถ€ํ„ฐ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

3. internal (๋‚ด๋ถ€ ์ ‘๊ทผ์ˆ˜์ค€)

  • ๋‚ด๋ถ€ ์ ‘๊ทผ์ˆ˜์ค€์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ์š”์†Œ์— ์•”๋ฌต์ ์œผ๋กœ ์ง€์ •ํ•˜๋Š” ๊ธฐ๋ณธ ์ ‘๊ทผ์ˆ˜์ค€์ด๋‹ค.
  • ๋‚ด๋ถ€ ์ ‘๊ทผ์ˆ˜์ค€์œผ๋กœ ์ง€์ •๋œ ์š”์†Œ๋Š” ์†Œ์ŠคํŒŒ์ผ์ด ์†ํ•œ ๋ชจ๋“ˆ ์–ด๋””์—์„œ๋“  ์“ฐ์ผ ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ์™ธ๋ถ€ ๋ชจ๋“ˆ์—์„œ๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.
  • internal์€ ๊ธฐ๋ณธ ์ ‘๊ทผ์ˆ˜์ค€์ด๋ฏ€๋กœ ๊ตณ์ด ํ‘œ๊ธฐํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
internal class๋Š” ์„œ๋ธŒํด๋ž˜์‹ฑ์ด ๋˜๋‚˜? => O
internal class ๋ฉค๋ฒ„๋Š” override๊ฐ€ ๋˜๋‚˜? => O
open class์—์„œ internal class ๋ฉค๋ฒ„๊ฐ€ ์žˆ์œผ๋ฉด ์™ธ๋ถ€์—์„œ ํ˜ธ์ถœ ๊ฐ€๋Šฅ? => X

 

4. fileprivate (ํŒŒ์ผ์™ธ๋ถ€๋น„๊ณต๊ฐœ ์ ‘๊ทผ์ˆ˜์ค€)

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

 

5. private (๋น„๊ณต๊ฐœ ์ ‘๊ทผ์ˆ˜์ค€)

  • ๊ฐ€์žฅ ํ•œ์ •์ ์ธ ๋ฒ”์œ„์ด๋‹ค.
  • ๋น„๊ณต๊ฐœ ์ ‘๊ทผ์ˆ˜์ค€์œผ๋กœ ์ง€์ •๋œ ์š”์†Œ๋Š” ๊ทธ ๊ธฐ๋Šฅ์„ ์ •์˜ํ•˜๊ณ  ๊ตฌํ˜„ํ•œ ๋ฒ”์œ„ ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํด๋ž˜์Šค ๋‚ด๋ถ€์— ์„ ์–ธ๋œ private ์š”์†Œ๋Š” ๊ฐ™์€ ํŒŒ์ผ์ด๋”๋ผ๋„ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
private class PrivateClass{
	public init() {}
	private var name = "๊ฐ€ํ˜„"
}

extension PrivateClass{
	func gahyunMethod() {
		print(name)
	}
}

//๊ฐ™์€ ์†Œ์ŠคํŒŒ์ผ ์•ˆ์—์„œ์˜ extension๋งŒ ๊ฐ€๋Šฅ

 

์ ‘๊ทผ์ œ์–ด ๊ตฌํ˜„ ์‹œ ์ฐธ๊ณ ์‚ฌํ•ญ

  • ์ƒ์œ„ ์š”์†Œ๋ณด๋‹ค ํ•˜์œ„ ์š”์†Œ๊ฐ€ ๋” ๋†’์€ ์ ‘๊ทผ์ˆ˜์ค€์„ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค.
  • ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋งŒ๋“ค ๋•Œ๋Š” ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ ํŠน์ • ๊ธฐ๋Šฅ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก API๋กœ ์‚ฌ์šฉํ•  ๊ธฐ๋Šฅ์„ ๊ณต๊ฐœ ์ ‘๊ทผ์ˆ˜์ค€์œผ๋กœ ์ง€์ •ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  • ์—ด๊ฑฐํ˜• ๋‚ด๋ถ€์˜ ๊ฐ case๋ณ„๋กœ ๋”ฐ๋กœ ์ ‘๊ทผ์ˆ˜์ค€์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์—†๊ณ , ๊ฐ case์˜ ์ ‘๊ทผ์ˆ˜์ค€์€ ์—ด๊ฑฐํ˜• ์ž์ฒด์˜ ์ ‘๊ทผ์ˆ˜์ค€์„ ๋”ฐ๋ฅธ๋‹ค.
private class SOPTClass {
	public func iOSMethod() {
		...
	}
}
//SOPTClass์˜ ์ ‘๊ทผ์ˆ˜์ค€์ด private(๋น„๊ณต๊ฐœ)์ด๊ธฐ ๋•Œ๋ฌธ์— iOSMethod์˜ ์ ‘๊ทผ์ˆ˜์ค€๋„ private(๋น„๊ณต๊ฐœ)๋กœ ์ทจ๊ธ‰ํ•œ๋‹ค.

 

์ฝ๊ธฐ ์ „์šฉ(Setter) ๊ตฌํ˜„ ์‹œ ์ฐธ๊ณ ์‚ฌํ•ญ

  • ๊ฐ’์„ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ๋ณ€๊ฒฝํ•  ์ˆ˜๋Š” ์—†๋„๋ก ํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” ์„ค์ •์ž๋งŒ ๋” ๋‚ฎ์€ ์ ‘๊ทผ์ˆ˜์ค€์„ ๊ฐ–๋„๋ก ํ•œ๋‹ค.
  • ์š”์†Œ์˜ ์ ‘๊ทผ์ˆ˜์ค€ ํ‚ค์›Œ๋“œ ๋’ค์— ์ ‘๊ทผ์ˆ˜์ค€(set)์ฒ˜๋Ÿผ ํ‘œํ˜„ํ•˜๋ฉด ์„ค์ •์ž์˜ ์ ‘๊ทผ์ˆ˜์ค€๋งŒ ๋” ๋‚ฎ๋„๋ก ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
public private(set) var property = Type  
//์ ‘๊ทผ(getter)์€ public์ด์ง€๋งŒ ์„ค์ •(setter)์€ private์œผ๋กœ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

 

 

 

728x90