โœ๏ธ TIL

[ TIL ] ์ง„์งœ ๋‚ด๊ฐ€ ์•„๋Š” ๊ฒƒ / ์†์„ฑ๊ฐ์‹œ์ž์™€ ์ ‘๊ทผ์ œ์–ด์ž / 24๋…„ 3์›” 13์ผ

EarthSea 2024. 3. 14. 00:18

 

 

 

์†์„ฑ๊ฐ์‹œ์ž

 

[ Swift ] ์†์„ฑ ๊ฐ์‹œ์ž(Property Observers)

์†์„ฑ ๊ฐ์‹œ์ž(Property Observers)๋ž€? ํ”„๋กœํผํ‹ฐ ์˜ต์ €๋ฒ„๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋ฉฐ, ์†์„ฑ(property)์ด ๋ณ€ํ•  ๋•Œ ํ˜ธ์ถœ์ด ๋œ๋‹ค. var myProperty: Int = 20 { didSet{ // ๋ณ€๊ฒฝ๋œ ์งํ›„์— ํ˜ธ์ถœ // oldValue๊ฐ’ ํ˜ธ์ถœ๊ฐ€๋Šฅ } willSet{ // ๋ณ€๊ฒฝ๋˜๊ธฐ ์ง

jihae-qu.tistory.com

 

์†์„ฑ๊ฐ์‹œ์ž, ํ”„๋กœํผํ‹ฐ ์˜ต์ €๋ฒ„๋Š” ๋ณ€์ˆ˜์— ๊ฐ’์ด ๋ณ€ํ•จ์„ ๊ด€์ฐฐํ•˜๋Š” ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค.

๋ณ€์ˆ˜์— ๊ฐ’์ด ๋ณ€ํ•จ์„ ๊ด€์ฐฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹น์—ฐํžˆ var ๋งŒ ์„ ์–ธ์ด ๋˜๊ฒ ์ฃ ?

๊ฐ’์ด ๋ณ€ํ™”๋˜๊ธฐ ์ง์ „์— ํ˜ธ์ถœ๋˜๋Š” willSet ๊ณผ ๊ฐ’์ด ๋ณ€ํ™”๋˜๊ณ  ๋‚œ ํ›„์— ํ˜ธ์ถœ๋˜๋Š” didSet ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

didSet ์€ oldValue ๊ฐ’์„ ํ˜ธ์ถœํ•˜๊ณ , willSet ์€ newValue ๊ฐ’์„ ํ˜ธ์ถœํ•ด์š”.

 

ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜•์—์„œ๋Š” ์†์„ฑ๊ฐ์‹œ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”?

 

์ €์žฅ์†์„ฑ์—์„œ๋งŒ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์žฌ์ •์˜๋ฅผ ๋ถˆ๊ฐ€๋Šฅํ•ด์š”.

 

์™œ ๊ณ„์‚ฐ ์†์„ฑ์€ ์•ˆ๋ ๊นŒ์š”?

๊ณ„์‚ฐ ์†์„ฑ์€ getter ๋‚˜ setter ๋ฅผ ํ†ตํ•ด ๊ฐ์‹œ์ž ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ทผ๋ฐ ๊ณ„์‚ฐ์†์„ฑ์—์„œ๋„ ๊ฐ€๋Šฅํ•  ๋•Œ๊ฐ€ ์žˆ์ฃ . ์ƒ์†๋ฐ›์€ ๊ณ„์‚ฐ ์†์„ฑ์„ ์žฌ์ •์˜ํ•˜์—ฌ ํ”„๋กœํผํ‹ฐ ์˜ต์ €๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

์ ‘๊ทผ์ œ์–ด

 

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

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

jihae-qu.tistory.com

 

์ ‘๊ทผ์ œ์–ด๋Š” ํšจ์œจ์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ์ฝ”๋“œ์˜ ์€๋‹‰ํ™”๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๊ผญ ํ•„์š”ํ•œ ์†์„ฑ์ž…๋‹ˆ๋‹ค.

์ ‘๊ทผ์ œ์–ด๋ฅผ ํ•˜๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์ž…์žฅ์—์„œ๋Š” ์ด ๋ณ€์ˆ˜๊ฐ€ ๋˜๋Š” ์ด ๋ฉ”์„œ๋“œ๊ฐ€ ์–ด๋””์„œ๋ถ€ํ„ฐ ์–ด๋””๊นŒ์ง€ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ธ์ง€๋ฅผ ์ธ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์–ด์„œ ์•„์ฃผ ํšจ์œจ์ ์ด์ฃ .

 

์ ‘๊ทผ์ œ์–ด์ž๋ฅผ ๋ณด์™„์„ฑ์ด ๋†’์€ ๋‹จ๊ณ„๋ถ€ํ„ฐ ๋‚˜์—ดํ•ด๋ณด์ž๋ฉด,

private -> fileprivate -> internal -> public -> open

์ž…๋‹ˆ๋‹ค.

 

์ ‘๊ทผ์ œ์–ด์ž๋ฅผ ์“ฐ์ง€ ์•Š์„ ๊ฒฝ์šฐ์—” internal ๋กœ ์ดˆ๊ธฐํ™”๊ฐ€ ๋˜์–ด internal ๋ฅผ ์“ฐ๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†๋‹ค๊ณ  ๋ณด์‹œ๋ฉด ๋ผ์š”!

 

public ๊ณผ open ์˜ ์ฐจ์ด๋Š” ์ƒ์†๊ณผ ์žฌ์ •์˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ƒ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ƒ์˜ ์ฐจ์ด์ž…๋‹ˆ๋‹ค.

๋‹น์—ฐํžˆ open ์ด ๋” ๋ณด์™„์„ฑ์ด ๋‚ฎ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์†๊ณผ ์žฌ์ •์˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ณ  public ์€ ๋ถˆ๊ฐ€๋Šฅ ํ•˜๊ฒ ์ฃ ?

์ƒ์†๊ณผ ์žฌ์ •์˜๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ํƒ€์ž…์€ ํด๋ž˜์Šค๋ฐ–์— ์—†๊ธฐ ๋•Œ๋ฌธ์— open ์€ ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉํ•˜๊ณ 

๊ตฌ์กฐ์ฒด์™€ ์—ด๊ฑฐํ˜•์€ public ๊นŒ์ง€๋งŒ ์‚ฌ์šฉ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 


 

์˜ค๋Š˜์€ ํด๋กœ์ €์— ๋Œ€ํ•ด์„œ ํ•™์Šต์„ ์ง„ํ–‰ํ•˜๋‹ค๊ฐ€

์ง„์งœ ๋‚ด๊ฐ€ ์•„๋Š” ๊ฒƒ์ด ๋งž์„๊นŒ?

๋ผ๋Š” ์ƒ๊ฐ์„ ํ•˜๊ฒŒ ๋˜์—ˆ์–ด์š”.

 

ํด๋กœ์ €๋ฅผ ํ•™์Šตํ•œ ํ›„์— ํด๋กœ์ €์— ๋Œ€ํ•œ ๊ฐœ๋…์„ ๋ธ”๋กœ๊ทธ์— ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ,

ํด๋กœ์ €๋ž€? ๋’ค์— ์ œ๊ฐ€ ์ ์„ ์ˆ˜ ์žˆ๋Š” ๋ง์ด ์ƒ๊ฐ์ด ๋‚˜์ง€ ์•Š๋”๋ผ๊ตฌ์š”.

 

๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ ์–ด๋–ป๊ฒŒ ์ •์˜ ๋‚ด๋ ธ๋‚˜ ๊ถ๊ธˆํ•ด์„œ ์—ฌ๋Ÿฌ ๋ธ”๋กœ๊ทธ๋“ค์„ ์ฝ์–ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

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

 

์ง„์งœ ๋‚ด๊ฐ€ ์•„๋Š” ๊ฒƒ์€ ๋‚˜์˜ ์–ธ์–ด๋กœ ์ž˜ ํ’€์–ด์„œ ์•Œ์•„๋“ฃ๊ธฐ ์‰ฝ๊ฒŒ ์„ค๋ช…์„ ํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ํด๋กœ์ €๋ž€ ๋ฌด์—‡์ผ๊นŒ๋ฅผ ํ•œ์ฐธ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ ๊ณต๋ถ€๋ฅผ ๋‹ค์‹œ ํ•˜๊ธฐ๋กœ ๋งˆ์Œ์„ ๋จน์—ˆ์–ด์š”.

 

๋ธ”๋กœ๊ทธ๋ฅผ ์“ฐ๋Š” ์˜๋ฏธ๋„ ์ €์—๊ฒŒ๋Š” ๋‚ด๊ฐ€ ์•Œ๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ํ™•์‹ ์œผ๋กœ ์“ฐ๋Š” ๊ฒƒ ๊ฐ™์•„์š”.

 


 

์˜ค๋Š˜์€ ์ž‘๋…„์— ๋“ค์—ˆ๋˜ ๋ถ€ํŠธ ์บ ํ”„์ธ ์•จ๋Ÿฐ ๋ฌธ๋ฒ• ์Šค์ฟจ์—์„œ

์ทจ์—…ํ•˜์‹  ๋ถ„๋“ค์ด ์–ด๋–ค ๊ณต๋ถ€๋ฅผ ํ•™์Šตํ•˜์—ฌ, ์–ด๋–ป๊ฒŒ ์ทจ์—…์„ ํ•˜์˜€๋Š”์ง€์— ๋Œ€ํ•œ ์ทจ์—… ์„ธ์…˜์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

๋˜๊ฒŒ ๋‹ค๋ฅธ ์„ธ๊ณ„์˜ ์‚ฌ๋žŒ์ธ ๊ฒƒ ๊ฐ™๋”๋ผ๊ตฌ์š”.

 

RX, Combine, SwiftUI, ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜, TCA, MVI, MVP, CI/CD, Tuist, Git, CS, SOLID...

 

์•„์ฃผ ๋งŽ์€ ๋‹จ์–ด๋“ค์ด ์˜ค๊ณ  ๊ฐ”๋Š”๋ฐ

์ œ๊ฐ€ ์ดํ•ดํ•˜๋Š” ๊ฑด ๋ช‡ ๊ฐœ ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

 

์ •๋ง ์•„์ง ๋ฉ€์—ˆ๊ตฌ๋‚˜.. ๋Š์ž„์—†์ด ๋‹ฌ๋ ค๊ฐ€์•ผ๊ฒ ๊ตฌ๋‚˜.. ๋ฅผ ์ƒ๊ฐํ•˜๋ฉด์„œ

ํ•œ๋ฒˆ๋” ๋‹ค์งํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์•„์š”.

์ง„์งœ ์—ด์‹ฌํžˆ ํ•˜์ž.

 

" ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ํœ˜๋‘˜๋ฆฌ์ง€ ๋ง๊ณ  ๋‚ด ๊ณต๋ถ€ ๋‚ด ํ•  ์ผ์„ ํ•ด์•ผํ•œ๋‹ค. "

 

๋ผ๋Š” ์ทจ์—… ์„ ๋ฐฐ๋‹˜๋“ค์˜ ๋ง์ด ๊ฐ€์žฅ ๊ธฐ์–ต์— ๋‚จ๋„ค์š”.

 

์—ฌ๋Ÿฌ ๊ฐ•์˜๋„ ์ถ”์ฒœ๋ฐ›๊ณ , ์–ด๋–ป๊ฒŒ ์ทจ์—…์ค€๋น„๋ฅผ ํ•˜๊ณ , ์–ด๋–ค ์‹์œผ๋กœ ๊ณต๋ถ€๋ฅผ ํ•ด์•ผํ•˜๋Š” ์ง€ ๋”๋”์šฑ ํ‹€์ด ์žกํžŒ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์˜ค๋Š˜๋„ ๊ตณ๋ฐค๐ŸŒ™