Deep_Dev
article thumbnail

 

์ ‘๊ทผ์ œ์–ด

์ ‘๊ทผ์ œ์–ด = ์€๋‹‰ํ™”

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

 

์ ‘๊ทผ์ œ์–ด์˜ ํ•„์š”์„ฑ

์™ธ๋ถ€์—์„œ ๋ณด๊ฑฐ๋‚˜ ์ ‘๊ทผํ•˜๋ฉด ์•ˆ๋˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์ ‘๊ทผ์ˆ˜์ค€

 

public : ๊ณต๊ฐœ ์ ‘๊ทผ์ˆ˜์ค€

  • ์–ด๋””์„œ๋“  ์“ฐ์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ์Šค์œ„ํ”„ํŠธ์˜ ๊ธฐ๋ณธ ์š”์†Œ๋Š” ๋ชจ๋‘ ๊ณต๊ฐœ ์ ‘๊ทผ์ˆ˜์ค€์œผ๋กœ ๋˜์–ด์žˆ๋‹ค.

 

open : ๊ฐœ๋ฐฉ ์ ‘๊ทผ์ˆ˜์ค€

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

 

internal : ๋‚ด๋ถ€ ์ ‘๊ทผ์ˆ˜์ค€

  • ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ์š”์†Œ์— ์•”๋ฌต์ ์œผ๋กœ ์ง€์ •ํ•˜๋Š” ๊ธฐ๋ณธ ์ ‘๊ทผ ์ˆ˜์ค€ ( ๊ตณ์ด ํ‘œ๊ธฐํ•ด์ฃผ์ง€ ์•Š์•„๋„ ๋œ๋‹ค )
  • ์†Œ์ŠคํŒŒ์ผ์ด ์†ํ•ด ์žˆ๋Š” ๋ชจ๋“ˆ ์–ด๋””์—์„œ๋“  ์“ฐ์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹ค๋งŒ, ๊ทธ ๋ชจ๋“ˆ์„ ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ์™ธ๋ถ€ ๋ชจ๋“ˆ์—์„œ๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค.
  • ๋ณดํ†ต ์™ธ๋ถ€์—์„œ ์‚ฌ์šฉํ•  ํด๋ž˜์Šค๋‚˜ ๊ตฌ์กฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ฉฐ, ๋ชจ๋“ˆ ๋‚ด๋ถ€์—์„œ ๊ด‘์—ญ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋‚ด๋ถ€ ์ ‘๊ทผ ์ˆ˜์ค€ ์ง€์ •

 

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

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

 

private : ๋น„๊ณต๊ฐœ ์ ‘๊ทผ์ˆ˜์ค€

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

 

๐ŸŽ private vs fileprivate
๊ฐ™์€ ํŒŒ์ผ ๋‚ด๋ถ€์—์„œ private ์ ‘๊ทผ์ˆ˜์ค€๊ณผ fileprivate ์ ‘๊ทผ์ˆ˜์ค€์€ ์‚ฌ์šฉํ•  ๋•Œ ๋ถ„๋ช…ํ•œ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค. 
fileprivate ์ ‘๊ทผ์ˆ˜์ค€์œผ๋กœ ์ง€์ •ํ•œ ์š”์†Œ๋Š” ๊ฐ™์€ ํŒŒ์ผ ์–ด๋–ค ์ฝ”๋“œ์—์„œ๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐ˜๋ฉด์— private ์ ‘๊ทผ์ˆ˜์ค€์œผ๋กœ ์ง€์ •ํ•œ ์š”์†Œ๋Š” ๊ฐ™์€ ํŒŒ์ผ ๋‚ด๋ถ€์— ๋‹ค๋ฅธ ํƒ€์ž…์˜ ์ฝ”๋“œ๊ฐ€ ์žˆ๋”๋ผ๋„ ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

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

๋ชจ๋“  ์ ‘๊ทผ์ˆ˜์ค€์˜ ๊ทœ์น™ : '์ƒ์œ„ ์š”์†Œ๋ณด๋‹ค ํ•˜์œ„ ์š”์†Œ๊ฐ€ ๋” ๋†’์€ ์ ‘๊ทผ์ˆ˜์ค€์„ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค'

  • ๋น„๊ณต๊ฐœ ์ ‘๊ทผ ์ˆ˜์ค€์œผ๋กœ ์ •์˜ํ•œ ๊ตฌ์กฐ์ฒด ๋‚ด๋ถ€์˜ ํ”„๋กœํผํ‹ฐ๋กœ ๋‚ด๋ถ€์ˆ˜์ค€์ด๋‚˜ ๊ณต๊ฐœ์ˆ˜์ค€์„ ๊ฐ–๋Š” ํ”„๋กœํผํ‹ฐ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์—†๋‹ค.
  • ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํŠน์ • ์ ‘๊ทผ์ˆ˜์ค€์ด ๋ถ€์—ฌ๋œ ํƒ€์ž…์ด ์ „๋‹ฌ๋˜๊ฑฐ๋‚˜ ๋ฐ˜ํ™˜๋œ๋‹ค๋ฉด, ๊ทธ ํƒ€์ž…์˜ ์ ‘๊ทผ์ˆ˜์ค€๋ณด๋‹ค ํ•จ์ˆ˜์˜ ์ ‘๊ทผ์ˆ˜์ค€์ด ๋†’๊ฒŒ ์„ค์ •๋  ์ˆ˜ ์—†๋‹ค.
private class AClass {
	// ๊ณต๊ฐœ ์ ‘๊ทผ์ˆ˜์ค€์„ ๋ถ€์—ฌํ•ด๋„ AClass์ด ์ ‘๊ทผ์ˆ˜์ค€์ด ๋น„๊ณต๊ฐœ ์ ‘๊ทผ์ˆ˜์ค€์ด๋ฏ€๋กœ
    // ์ด ๋ฉ”์„œ๋“œ์˜ ์ ‘๊ทผ์ˆ˜์ค€๋„ ๋น„๊ณต๊ฐœ ์ ‘๊ทผ์ˆ˜์ค€์œผ๋กœ ์ทจ๊ธ‰๋œ๋‹ค.
    public func someMethod() { // ๋ถˆ๊ฐ€๋Šฅ !
    	// ...
    }
}

 

์ฝ๊ธฐ ์ „์šฉ ๊ตฌํ˜„

  • ๊ตฌ์กฐ์ฒด ๋˜๋Š” ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ €์žฅ ํ”„๋กœํผํ‹ฐ ๊ตฌํ˜„์‹œ ํ—ˆ์šฉ๋œ ์ ‘๊ทผ์ˆ˜์ค€์—์„œ ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.
  • ๊ทธ๋ ‡๋‹ค๋ฉด ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋„๋ก ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ?
    • ์„ค์ •์ž(setter)๋งŒ ๋‚ฎ์€ ์ ‘๊ทผ์ˆ˜์ค€์„ ๊ฐ–๋„๋ก ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์š”์†Œ์˜ ์ ‘๊ทผ์ˆ˜์ค€ ํ‚ค์›Œ๋“œ ๋’ค์— ์ ‘๊ทผ์ˆ˜์ค€(set) ์ฒ˜๋Ÿผ ํ‘œํ˜„ํ•˜๋ฉด ์„ค์ •์ž์˜ ์ ‘๊ทผ์ˆ˜์ค€๋งŒ ๋” ๋‚ฎ๋„๋ก ์ง€์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.
public private(set) var publicGetOnlyStoredProperty: Int = 0