[Swift] πŸ€”Β μ™œ ν”„λ‘œν† μ½œμ˜ μš”κ΅¬μ‚¬ν•­μ€ private 으둜 λ‘˜ 수 μ—†μ„κΉŒ?

Mason KimΒ·2023λ…„ 1μ›” 4일
4

μ™œ ν”„λ‘œν† μ½œμ˜ μš”κ΅¬μ‚¬ν•­μ„private 으둜 λ‘˜ 수 μ—†μ„κΉŒ?
κ΅¬ν˜„λΆ€μ—μ„œ private(set), fileprivate 으둜 κ΅¬ν˜„ν•  μˆ˜λŠ” μžˆμ§€λ§Œβ€¦ μš”κ΅¬μ‚¬ν•­μœΌλ‘œ κ°•μ œν•˜λŠ” 것은 λΆˆκ°€ν•˜λ‹€.

이에 λŒ€ν•œ 고민을 ν•˜λ‹€, πŸ‡Β ν† λΌμ±…(객체지ν–₯의 사싀과 μ˜€ν•΄)μ—μ„œ 힌트λ₯Ό μ–»μ—ˆλ‹€.

객체가 λ‹€λ₯Έ 객체와 μƒν˜Έμž‘μš©ν•  수 μžˆλŠ” μœ μΌν•œ 방법이 λ©”μ‹œμ§€ 전솑 (λ©”μ‹œμ§•) 인데,
κ·Έ λ©”μ‹œμ§•μ„ 직접적인 방법이 μ•„λ‹Œ 간접적인 λ°©λ²•μœΌλ‘œ κ°€λŠ₯ν•˜κ²Œ ν•˜κ³ , μœ μ—°μ„±μ„ λΆ€μ—¬ν•˜λŠ”κ²Œ "μΈν„°νŽ˜μ΄μŠ€" 이닀.

κ·Έ μΈν„°νŽ˜μ΄μŠ€κ°€ swift μ—μ„œλŠ” ν”„λ‘œν† μ½œμ΄λ‹ˆ, κ²°κ΅­ ν”„λ‘œν† μ½œμ˜ 쑴재 μ΄μœ κ°€ λ‹€λ₯Έ 객체간 "λ©”μ‹œμ§•β€μ„ μš©μ΄ν•˜κ²Œ ν•˜λŠ” 것!

λ©”μ‹œμ§•μ„ ν•  λ•Œ, λ°”λ””(κ΅¬ν˜„λΆ€)λ₯Ό 숨기고 헀더(μš”κ΅¬μ‚¬ν•­) 만 λ…ΈμΆœν•˜κ²Œ ν•¨μœΌλ‘œμ„œ κΌ­ ν•„μš”ν•œ β€œμš”μ²­β€μ— λŒ€ν•œ λ‚΄μš©λ§Œ λ…ΈμΆœν•˜κ³  λ©”μ‹œμ§•μ„ 받은 κ°μ²΄μ—μ„œ ν•΄λ‹Ή μš”μ²­μ— λ”°λ₯Έ λ‘œμ§μ„ μ•Œμ•„μ„œ μ²˜λ¦¬ν•˜κ²Œλ” ν•˜λŠ” 것이 μ•„λ‹κΉŒ! (μ—­ν• κ³Ό μ±…μž„)

그럼 μ• μ΄ˆμ— μ£Όμš” 쑴재 λͺ©μ μ€‘ ν•˜λ‚˜κ°€ 객체간 β€œλ©”μ‹œμ§•β€ 인 ν”„λ‘œν† μ½œμ˜ μš”κ΅¬μ‚¬ν•­μ„ private 으둜 은닉화 ν•œλ‹€λŠ”κ²Œ 말이 μ•ˆλ˜λŠ” κ²ƒμ΄κ΅¬λ‚˜!

ν”„λ‘œν† μ½œμ˜ 쑴재이유λ₯Ό 객체지ν–₯적으둜 μ΄ν•΄ν•˜μ§€ λͺ»ν–ˆμ—ˆλ˜ 것 같닀…

+) Sesac λ©˜ν† μΈ πŸ‰μˆ˜λ°•μ—κ²Œ 듀은 insight

μ–΄λ– ν•œ μΈ‘λ©΄μ—μ„œ 보면 protocol 자체λ₯Ό private, fileprivate 으둜 λ§Œλ“€μ–΄ μ€ŒμœΌλ‘œμ„œ 은닉화λ₯Ό κΎ€ν•  μˆ˜λ„ μžˆμ„ 것 κ°™λ‹€.
또 κΈ°λ³Έ internal μ ‘κ·Όμ œμ–΄μžκ°€ λΆ™μ–΄μžˆλ”λΌλ„ μ‹€μ œ ν˜„μ—…μ—μ„œλŠ” μ—¬λŸ¬ λͺ¨λ“ˆ (μš°λ¦¬κ°€ κ°œλ°œν•˜λŠ” ν•˜λ‚˜μ˜ μ•± ν”„λ‘œμ νŠΈ λ‹¨μœ„...) 을 λΆ™μ—¬μ„œ μ“Έ 수 μžˆλŠ” κ²½μš°κ°€ μžˆλŠ”λ°, public 을 뢙여주지 μ•ŠλŠ” 이상 λ‹€λ₯Έ λͺ¨λ“ˆ κ°„μ˜ ν”„λ‘œν† μ½œ 톡신은 λΆˆκ°€λŠ₯ν•΄μ§€λ‹ˆκΉŒ "λͺ¨λ“ˆ κ°„μ˜ μ€λ‹‰ν™”λŠ” 이루어진닀" λΌλŠ” 츑면으둜 λ³Ό μˆ˜λ„ μžˆμ„ 것 κ°™λ‹€!

profile
iOS developer

2개의 λŒ“κΈ€

comment-user-thumbnail
2023λ…„ 11μ›” 18일

저도 κΆκΈˆν•΄μ„œ ꡬ글링쀑 같은 κΆκΈˆμ¦μ„ κ°™κ³  κ³„μ…¨λ˜ 뢄을 μ°Ύμ•˜λ„€μš”!
쒋은 아티클 κ°μ‚¬ν•©λ‹ˆλ‹€!

1개의 λ‹΅κΈ€