Open ha-nabi opened 4 days ago
Choosing Between Structures and Classes
๊ณต์ ๋ฌธ์์ ์๋์ ๊ฐ์ ๊ตฌ์ ์ด ์กด์ฌํฉ๋๋ค.
๋ชจ๋ธ๋งํ๋ ๋ฐ์ดํฐ์ identity๋ฅผ ์ปจํธ๋กคํด์ผ ํ ๋๋ class๋ฅผ ์ฌ์ฉํ๋ผ
์ฌ๊ธฐ์ ๋ฐ์ดํฐ์ ์์ด๋ดํฐํฐ (identity of the data) ๋ ๋ฌด์์ ์๋ฏธํ ๊น์?
์ด ๊ธ์ ํตํด class์ ์ ํ ๊ธฐ์ค์ด ๋๋ ๋ฐ์ดํฐ์ ๊ณ ์ ์ฑ(Identity) control ์ด๋ ๋ฌด์์ธ์ง ์์๋ด ์๋ค.
AppleDeveloper_Choosing Between Structures and Classes
identity ๋ผ๋ ํค์๋๋ฅผ ์ด๋์ ๋ง์ฃผํ ์ ์๋๊ฐ.
์ ํ ๊ณต์ ๋ฌธ์๋ class์ struct ์ ํ ๊ธฐ์ค์ ๋ํด ์๋์ ๊ฐ์ด ๋งํ๋ค.
์ฒซ ๋ฒ์งธ ๋ฌธ์ฅ์ด ์ธ์ ๊น๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก struct๋ฅผ ์ฌ์ฉํ๋ผ
swift๋ฅผ ์ฌ์ฉํ๋ฉฐ class์ ํ์๋ฅผ ๋๋ ์ํฉ์ ํ์น ์์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด class๋ฅผ ์ ํํ ์ํฉ์ ์ ๋ง ์๋ ๊ฑธ๊น?
(๋ช ์พํ๊ฒ๋) ์์ ์ธ๋ฒ์งธ ๋ฌธ์ฅ์์ class๋ฅผ ์ ํํด์ผ ํ ์ํฉ์ด ์ธ๊ธ๋ฉ๋๋ค.
๋ชจ๋ธ๋งํ๋ ๋ฐ์ดํฐ์ identity๋ฅผ ์ปจํธ๋กคํด์ผ ํ ๋๋ class๋ฅผ ์ฌ์ฉํ๋ผ.
identity์ ์ฌ์ ์ ๋ป์ ๊ณ ์ ์ฑ, ๋ ์์ฑ, ์ ์์ ๋๋ค.
์์ด๋ ๋น๋ฐ๋ฒํธ ํ ๋ ๊ทธ id๊ฐ ๋ฐ๋ก identity์ ์ฝ์ด์ด๊ธฐ๋ ํฉ๋๋ค.
๋ฌด์์ด ๋ฐ์ดํฐ๋ฅผ ๊ณ ์ ํ๋๋ก, ์๋ณ ๊ฐ๋ฅํ๋๋ก ํ ๊น?
๋ ๋์๊ฐ ๋ฐ์ดํฐ์ ์๋ณ์ฑ์ ์กฐ์ ํ๋ค๋ ๋ง์ด ๋ฌด์จ ๋ป ์ผ๊น?
๋จผ์ Identity๋ ๋ฌด์์ผ๊น ๊ณ ๋ฏผํ๋ฉฐ ์์ฐ์ค๋ ๋ณ์ / ์์ ๊ฐ๋ ์ ๋์๋ณด๊ฒ ๋์๋ค.
๋ณํ์ง ์๋ ์ ์ฒด์ฑ- ์ ๋ํด ๊ณ ๋ฏผํ์๋ฉด ๋ณํ์ง ์๋ ๊ฐ, ์์(let)๊ฐ ๋ ์ค๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ ๊ฒ var๋ let์ด ๋ญ์๋์ง ์๊ฐํ๋ค ์์ผ์ค๋ ๋ฐ๊ฒฌํ๊ฒ ๋ ๊ฒ์ด ์๋ค.
var test: String = ""
๋ฐ๋ก ์ ๋ณ์(๋๋ ์์)์ ์ด๋ฆ์ธtest๋ฅผ ๋ถ๋ฅด๋ ๋ช ์นญ์ด Identifier, ์๋ณ์๋ผ๋ ๊ฒ์ ๋๋ค.
๋งค๋ฒ '์ด๋ฆ'์ด๋ผ๊ณ ๋ถ๋ ๊ธฐ์ Identifier๋ผ๋ ๋ช ์นญ์ด ์์์์ ์๊ณ ์์๋ค.
์๋ฌดํผ ๋ณ์ ์์์ ์ด๋ฆ, ์ฆ Identifier๊ฐ ๋ฐ์ดํฐ๋ฅผ ์๋ณํ๋ ๊ธฐ์ค์ ๋ญ๊น?
struct์ class์ ๊ทผ๋ณธ์ ์ธ ์ฐจ์ด๋ผ ํ๋ฉด, ๊ฐ ํ์ ์ด๋ ์ฐธ์กฐ ํ์ ์ด๋์ด๋ค.
struct ๋ฐ์ดํฐ์ ์๋ณ์๋ ์คํ์ ์ ์ฅ๋ ๊ฐ์ ๋ฐ๋ผ๋ณด๊ณ , class์ ์๋ณ์๋ ํ์ ์ ์ฅ๋ ์ธ์คํด์ค ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ๊ฐ์ ๋ฐ๋ผ๋ณธ๋ค.
์์ฐ์ค๋ ์ป๋ ๊นจ๋ฌ์์ด ์๋ค.
์. ๊ตฌ์กฐ์ฒด์๊ฒ ์๋ณธ ๊ฐ๋ ์ด ์๊ตฌ๋
struct๋ ๊ฐํ์ ์ผ๋ก ๋ฐ์ดํฐ ์์ฒด์ ํน๋ณํ ์ ์ฒด์ฑ์ด ์กด์ฌํ์ง ์์ต๋๋ค.
์คํ ๋ด๋ถ์์ ์์ฑ๋๊ณ , ์ฌ๋ผ์ง๋ฉฐ ๋๊ตฐ๊ฐ ๋ณด๊ณ ์๋ค๋ ์ด์ ๋ก ์ ์ง๋์ง ์๊ธฐ ๋๋ฌธ์. (์ฐธ์กฐ ์นด์ดํธ ์ฆ๊ฐ ๊ฐ๋ ์ด ์์)
๋ค์ ๋์๊ฐ ์๋ ๋ฌธ์ฅ์ ๋ณด์.
identity๋ ๋ฐ์ดํฐ์ ์ ์ฒด์ฑ์ ๋๋ณํ๋ ์์๋ก, ๋ฌธ๋งฅ์ ๋ฐ์ดํฐ์ ์ฃผ์๋ฅผ ์๋ฏธํ๋ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค. ๊ทธ๋ฌ๋ identity ์ปจํธ๋กค์ด๋ ์ฃผ์๊ฐ ์ ์ง๋๋ ์ํฉ ์ ์ ๋ฅผ ํตํ ์ฌ๋ฌ ์ ๊ทผ์ ์๋ฏธํ๋ ๊ฒ ์๋๊น ์ถ์ธกํ ์ ์๋ค.
์ฌ๊ธฐ๊น์ง ์๊ฐ์ ์ขํ์ ์์ฐ์ค๋ฝ๊ฒ ๋ค๋ฐ๋ฅด๋ ๋ ๋ค๋ฅธ ์ง๋ฌธ์ด ์์๋ค.
Identity์ Identifiable์ ๋ฌด์จ ์ฐจ์ด์ง ?
Identifiable์ swift์ ํ๋กํ ์ฝ์ด๋ค.
์ธ์คํด์ค(class)๊ฐ ์์ ๋ identity๋ฅผ ๊ฐ์ง ์ํฐํฐ์ ๊ฐ์ ๋ณด์ ํจ์ ๋ณด์ฆํ๋ค
์ค๋ช ์์ผ๋ก ๊ฐ์ฒด๋ก ์ํฉ์ ์ ํํ๋ ๊ฒ ๊ฐ์ง๋ง, AnyObject๋ผ๋ ์ ํ์ด ๊ฑธ๋ ค์์ง ์๋ค.
๋๋ถ์ด struct ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค๋ค ๋ณด๋ฉด Identifiable์ด๋ผ๋ ์ฑํํ ๊ฒฝ์ฐ๊ฐ ์ ๋ฒ ํํ ๊ฒ ๊ฐ๋ค.
๋ ์ค๋ฅด๋ ์์๋ฅผ ๋ค์๋ฉด, SwiftUI์์๋ ForEach๋ฅผ ๋๋ฆฌ๊ธฐ ์ํด์ Identifiableํ ๋ฐ์ดํฐ๋ hashableํ ๋ด๋ถ ์์ฑ๊ฐ์ ์๊ตฌํ๋ค.
๊ทธ๋์ struct์ Identifiable์ ์ฑํ์์ผ ์ฃผ์ด id๋ฅผ ์ ์ํด์ฃผ์๋ค.
์์ ์ดํด๋ฅผ ํ ๋๋ก ์ ๋ฆฌํด๋ณด์๋ฉด,
์ปดํจํฐ ๊ธฐ์ค์ผ๋ก ๊ฐ ํ์ ์๋ ์๋ณธ ๊ฐ๋ ์ด ์๋ค.
๊ทธ๋ฌ๋ ์ฐ๋ฆฌ์ ํ๋ก์ ํธ๋ ์ด์ ๊ฐ๊ณผ ์ดํ์ ๊ฐ์ด ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์ํ์์ ์๋ณํด์ผ ํ ์ผ์ด ์๊ธด๋ค.
์ฆ, ๊ฐ ํ์ ์๊ฒ ์๋ณ ๊ธฐ์ค์ ์๊ตฌํ๊ฒ ๋๋ค.
์ด๋ Identifiable์ ์๋ณ์ฑ์ ๋ณด์ฆํ๋ ํ๋กํ ์ฝ๋ก, ๊ฐ ํ์ ์๊ฒ ๋ช ์์ ์ผ๋ก ๊ตฌ๋ถ์๋ฅผ ์ ๊ณตํ๋ ์ญํ ๋ก ํ์ฉ๋ ์ ์๋ค.
Identifiable protocol in SwiftUI explained with code examples
๋ํ ์ ๊ธ์ ์ฐธ๊ณ ํด๋ณด๋ฉด
! class์ Identifiable ์ฑํ ์ Id ๊ตฌํ์ด ํ์์ ์ด์ง ์๋ค.
๊ฐ์ฒด์ Id๊ฐ์ ์๋์ผ๋ก ObjectIdentifier ํ์ ์ผ๋ก ํ ๋น๋๋ค.
์ฆ, ๋ฐ๋ก id๋ฅผ ๋ง๋ค์ด์ฃผ์ง ์์๋ ๊ฐ์ฒด์ ์ฃผ์๊ฐ์ด ๋ฐ์ดํฐ์ ์๋ณ ์์๊ฐ ๋๋ค๋๊ฑธ ์ ์ ์๋ค.
Identity Operators๋ ๊ฐ์ฒด์ ๊ณ ์ ์ฑ์ ํ๋ณํ๊ธฐ ์ํ ์ฐ์ฐ์์ด๋ค.
ํด๋น ์ฐ์ฐ์๋ ๊ฐ์ฒด์ Identity๋ฅผ ๋น๊ตํ๊ธฐ ์ํด ์ฐธ์กฐ(์ฃผ์)๋ฅผ ๋น๊ตํ๋ค.
๋ง์ฝ struct ์ธ์คํด์ค์ ๋น๊ต๋ฅผ ์ํํ๊ณ ์ ํ๋ค๋ฉด,
ํด๋์ค ํ์ ์ด ์๋๋ผ๋ ๊ฒฝ๊ณ ๊ฐ ์ถ๋ ฅ๋๋ค.
identifiable์ ์ฑํํ ๊ตฌ์กฐ์ฒด๋ผ๋ ๋ง์ฐฌ๊ฐ์ง๋ค.
๋ช ์์ ์ผ๋ก ์๋ณ์ฑ์ ์ฌ์ด์ค๋ค ํ๋ค ๊ฐ ํ์ ์๊ฒ ์๋ณธ ๊ฐ๋ ์ด ์๋ค.
ํธ์๋ฅผ ์ํด ์ฌ์ด์ค ์๋ณ์ฑ์, ๋ฐ์ดํฐ์ ์๋ณ์ฑ(์ฐธ์กฐ)์ ๋๋ณํด์ฃผ์ง ๋ชปํ๋ค.
๊ฐ ํ์ ์๊ฒ๋ ์ปดํจํฐ๊ฐ ๊ทธ ์ ์ฒด์ฑ์ ์๋ณํ ๋งํ ์์ธ์ด ์๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ ์ฒด์ฑ(identity)์ด๋ ๊ฐ์ฒด(ํด๋์ค ์ธ์คํด์ค)์ ์ฃผ์๋ฅผ ์๋ฏธํ๋ค.
์๋๋ ๋ด ๋๋ฆ๋๋ก ์ ๋ฆฌํด๋ณธ ์๊ฐ์ด๋ค.
identity๋ฅผ ์ปจํธ๋กคํด์ผ ํ ๋๋, ์ ์ง๊ฐ๋ฅํ ๋ฐ์ดํฐ์ ์ฌ๋ฌ ์ ๊ทผ์ด ์ด๋ฃจ์ด์ ธ์ผ ํ ๋ ๋ฅผ ์๋ฏธํ๋ค.
๋ง๋ถ์ฌ struct๋ ๋ณธ์ง์ ์ผ๋ก ์๋ณ์ด ๋ถ๊ฐ๋ฅํ๋ค.
Identifiable์ ์ฑํํ์ฌ ๊ตฌ์กฐ์ฒด์๊ฒ๋ Id(id)๋ฅผ ์ฌ์ด์ฃผ๋ ๊ฒ์ ์๋ก๋ค๋ฅธ ๊ฐ์ด๋ผ๋ id๋ฅผ ํตํด '๊ฐ๋ค'๊ณ ํ๋ณํ ์ ์๋๋ก ์๋ณ ์์๋ฅผ ์ ๊ณตํ ๋ฟ, ๋ฐ์ดํฐ๊ฐ ์์ฒด๊ฐ ์ ์ง๋๋-๋ ์ฐธ์กฐํ์ ์ ํน์ฑ์ ์ฃผ์ ํ๋ ๊ฒ์ ์๋๋ค.
์ฌ์ฉ๋จ์ ์ฃผ๊ธฐ๋ณด๋ค ์ค๋ ์ ์ง๋์ด์ผ ํ๋ ๋ฐ์ดํฐ๋ ๊ทธ ์ ์ฒด์ฑ(identity) ์ด ์ ์ง๋์ด์ผ ํ๋ฏ๋ก class๋ก ๋์ด์ผ ๊ฒ ๋ค ๊ฐ ํ์ (struct)์ ์๋ณธ์ด ์๋ค. ์ฆ ์๋ณํ ์ ์๋ค. ํ์ง๋ง ์ฐ๋ฆฌ์ ํ์์ ์ํด ๋ช ์์ ์ผ๋ก ์๋ณ์ฑ์ ์ฌ์ด์ค ์ ์๋ค. ๊ทธ๋ฌ๋ ์ด๋ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํ ์ฌ์ฉ์์ ์๋จ์ผ๋ก ๊ทธ ๊ฐ์ด ์ ์ง๋๋ค๋ ์๋ฏธ๋ ์๋๋ค. ์ ์ง๋๋ค- ๋ ์๋ณธ ๊ฐ๋ ์ ์ค์ง ์ฐธ์กฐ ํ์ ์๋ง ์กด์ฌํ๋ค ์ ์ ํ ํ๋จํ์ฌ ํ์ฉํ์
์ฌ์ฉ๋จ์ ์ฃผ๊ธฐ๋ณด๋ค ์ค๋ ์ ์ง๋์ด์ผ ํ๋ ๋ฐ์ดํฐ๋ ๊ทธ ์ ์ฒด์ฑ(identity) ์ด ์ ์ง๋์ด์ผ ํ๋ฏ๋ก class๋ก ๋์ด์ผ ๊ฒ ๋ค ๊ฐ ํ์ (struct)์ ์๋ณธ์ด ์๋ค. ์ฆ ์๋ณํ ์ ์๋ค.
ํ์ง๋ง ์ฐ๋ฆฌ์ ํ์์ ์ํด ๋ช ์์ ์ผ๋ก ์๋ณ์ฑ์ ์ฌ์ด์ค ์ ์๋ค. ๊ทธ๋ฌ๋ ์ด๋ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํ ์ฌ์ฉ์์ ์๋จ์ผ๋ก ๊ทธ ๊ฐ์ด ์ ์ง๋๋ค๋ ์๋ฏธ๋ ์๋๋ค.
์ ์ง๋๋ค- ๋ ์๋ณธ ๊ฐ๋ ์ ์ค์ง ์ฐธ์กฐ ํ์ ์๋ง ์กด์ฌํ๋ค
์ ์ ํ ํ๋จํ์ฌ ํ์ฉํ์
Identity
Choosing Between Structures and Classes
๊ณต์ ๋ฌธ์์ ์๋์ ๊ฐ์ ๊ตฌ์ ์ด ์กด์ฌํฉ๋๋ค.
์ฌ๊ธฐ์ ๋ฐ์ดํฐ์ ์์ด๋ดํฐํฐ (identity of the data) ๋ ๋ฌด์์ ์๋ฏธํ ๊น์?
์ด ๊ธ์ ํตํด class์ ์ ํ ๊ธฐ์ค์ด ๋๋ ๋ฐ์ดํฐ์ ๊ณ ์ ์ฑ(Identity) control ์ด๋ ๋ฌด์์ธ์ง ์์๋ด ์๋ค.
class์ struct์ ์ ํ ๊ธฐ์ค
AppleDeveloper_Choosing Between Structures and Classes
identity ๋ผ๋ ํค์๋๋ฅผ ์ด๋์ ๋ง์ฃผํ ์ ์๋๊ฐ.
์ ํ ๊ณต์ ๋ฌธ์๋ class์ struct ์ ํ ๊ธฐ์ค์ ๋ํด ์๋์ ๊ฐ์ด ๋งํ๋ค.
์ฒซ ๋ฒ์งธ ๋ฌธ์ฅ์ด ์ธ์ ๊น๋ค.
swift๋ฅผ ์ฌ์ฉํ๋ฉฐ class์ ํ์๋ฅผ ๋๋ ์ํฉ์ ํ์น ์์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด class๋ฅผ ์ ํํ ์ํฉ์ ์ ๋ง ์๋ ๊ฑธ๊น?
(๋ช ์พํ๊ฒ๋) ์์ ์ธ๋ฒ์งธ ๋ฌธ์ฅ์์ class๋ฅผ ์ ํํด์ผ ํ ์ํฉ์ด ์ธ๊ธ๋ฉ๋๋ค.
๋ฐ์ดํฐ์ identity? ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฑธ control?
identity์ ์ฌ์ ์ ๋ป์ ๊ณ ์ ์ฑ, ๋ ์์ฑ, ์ ์์ ๋๋ค.
์์ด๋ ๋น๋ฐ๋ฒํธ ํ ๋ ๊ทธ id๊ฐ ๋ฐ๋ก identity์ ์ฝ์ด์ด๊ธฐ๋ ํฉ๋๋ค.
๋ฌด์์ด ๋ฐ์ดํฐ๋ฅผ ๊ณ ์ ํ๋๋ก, ์๋ณ ๊ฐ๋ฅํ๋๋ก ํ ๊น?
๋ ๋์๊ฐ ๋ฐ์ดํฐ์ ์๋ณ์ฑ์ ์กฐ์ ํ๋ค๋ ๋ง์ด ๋ฌด์จ ๋ป ์ผ๊น?
Identity, Identifier
๋จผ์ Identity๋ ๋ฌด์์ผ๊น ๊ณ ๋ฏผํ๋ฉฐ ์์ฐ์ค๋ ๋ณ์ / ์์ ๊ฐ๋ ์ ๋์๋ณด๊ฒ ๋์๋ค.
๋ณํ์ง ์๋ ์ ์ฒด์ฑ- ์ ๋ํด ๊ณ ๋ฏผํ์๋ฉด ๋ณํ์ง ์๋ ๊ฐ, ์์(let)๊ฐ ๋ ์ค๋ฅด๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ ๊ฒ var๋ let์ด ๋ญ์๋์ง ์๊ฐํ๋ค ์์ผ์ค๋ ๋ฐ๊ฒฌํ๊ฒ ๋ ๊ฒ์ด ์๋ค.
๋ฐ๋ก ์ ๋ณ์(๋๋ ์์)์ ์ด๋ฆ์ธtest๋ฅผ ๋ถ๋ฅด๋ ๋ช ์นญ์ด Identifier, ์๋ณ์๋ผ๋ ๊ฒ์ ๋๋ค.
๋งค๋ฒ '์ด๋ฆ'์ด๋ผ๊ณ ๋ถ๋ ๊ธฐ์ Identifier๋ผ๋ ๋ช ์นญ์ด ์์์์ ์๊ณ ์์๋ค.
์๋ฌดํผ ๋ณ์ ์์์ ์ด๋ฆ, ์ฆ Identifier๊ฐ ๋ฐ์ดํฐ๋ฅผ ์๋ณํ๋ ๊ธฐ์ค์ ๋ญ๊น?
struct์ class์ ๊ทผ๋ณธ์ ์ธ ์ฐจ์ด๋ผ ํ๋ฉด, ๊ฐ ํ์ ์ด๋ ์ฐธ์กฐ ํ์ ์ด๋์ด๋ค.
struct ๋ฐ์ดํฐ์ ์๋ณ์๋ ์คํ์ ์ ์ฅ๋ ๊ฐ์ ๋ฐ๋ผ๋ณด๊ณ , class์ ์๋ณ์๋ ํ์ ์ ์ฅ๋ ์ธ์คํด์ค ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ๊ฐ์ ๋ฐ๋ผ๋ณธ๋ค.
์์ฐ์ค๋ ์ป๋ ๊นจ๋ฌ์์ด ์๋ค.
struct๋ ๊ฐํ์ ์ผ๋ก ๋ฐ์ดํฐ ์์ฒด์ ํน๋ณํ ์ ์ฒด์ฑ์ด ์กด์ฌํ์ง ์์ต๋๋ค.
์คํ ๋ด๋ถ์์ ์์ฑ๋๊ณ , ์ฌ๋ผ์ง๋ฉฐ ๋๊ตฐ๊ฐ ๋ณด๊ณ ์๋ค๋ ์ด์ ๋ก ์ ์ง๋์ง ์๊ธฐ ๋๋ฌธ์. (์ฐธ์กฐ ์นด์ดํธ ์ฆ๊ฐ ๊ฐ๋ ์ด ์์)
๋ค์ ๋์๊ฐ ์๋ ๋ฌธ์ฅ์ ๋ณด์.
identity๋ ๋ฐ์ดํฐ์ ์ ์ฒด์ฑ์ ๋๋ณํ๋ ์์๋ก, ๋ฌธ๋งฅ์ ๋ฐ์ดํฐ์ ์ฃผ์๋ฅผ ์๋ฏธํ๋ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค. ๊ทธ๋ฌ๋ identity ์ปจํธ๋กค์ด๋ ์ฃผ์๊ฐ ์ ์ง๋๋ ์ํฉ ์ ์ ๋ฅผ ํตํ ์ฌ๋ฌ ์ ๊ทผ์ ์๋ฏธํ๋ ๊ฒ ์๋๊น ์ถ์ธกํ ์ ์๋ค.
์ฌ๊ธฐ๊น์ง ์๊ฐ์ ์ขํ์ ์์ฐ์ค๋ฝ๊ฒ ๋ค๋ฐ๋ฅด๋ ๋ ๋ค๋ฅธ ์ง๋ฌธ์ด ์์๋ค.
Identity์ Identifiable์ ๋ฌด์จ ์ฐจ์ด์ง ?
Identity์ Identifiable์ ์ฐจ์ด
Identifiable์ swift์ ํ๋กํ ์ฝ์ด๋ค.
์ค๋ช ์์ผ๋ก ๊ฐ์ฒด๋ก ์ํฉ์ ์ ํํ๋ ๊ฒ ๊ฐ์ง๋ง, AnyObject๋ผ๋ ์ ํ์ด ๊ฑธ๋ ค์์ง ์๋ค.
๋๋ถ์ด struct ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ง๋ค๋ค ๋ณด๋ฉด Identifiable์ด๋ผ๋ ์ฑํํ ๊ฒฝ์ฐ๊ฐ ์ ๋ฒ ํํ ๊ฒ ๊ฐ๋ค.
๋ ์ค๋ฅด๋ ์์๋ฅผ ๋ค์๋ฉด, SwiftUI์์๋ ForEach๋ฅผ ๋๋ฆฌ๊ธฐ ์ํด์ Identifiableํ ๋ฐ์ดํฐ๋ hashableํ ๋ด๋ถ ์์ฑ๊ฐ์ ์๊ตฌํ๋ค.
๊ทธ๋์ struct์ Identifiable์ ์ฑํ์์ผ ์ฃผ์ด id๋ฅผ ์ ์ํด์ฃผ์๋ค.
์์ ์ดํด๋ฅผ ํ ๋๋ก ์ ๋ฆฌํด๋ณด์๋ฉด,
๊ทธ๋ฌ๋ ์ฐ๋ฆฌ์ ํ๋ก์ ํธ๋ ์ด์ ๊ฐ๊ณผ ์ดํ์ ๊ฐ์ด ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์ํ์์ ์๋ณํด์ผ ํ ์ผ์ด ์๊ธด๋ค.
์ด๋ Identifiable์ ์๋ณ์ฑ์ ๋ณด์ฆํ๋ ํ๋กํ ์ฝ๋ก, ๊ฐ ํ์ ์๊ฒ ๋ช ์์ ์ผ๋ก ๊ตฌ๋ถ์๋ฅผ ์ ๊ณตํ๋ ์ญํ ๋ก ํ์ฉ๋ ์ ์๋ค.
Identifiable protocol in SwiftUI explained with code examples
๋ํ ์ ๊ธ์ ์ฐธ๊ณ ํด๋ณด๋ฉด
! class์ Identifiable ์ฑํ ์ Id ๊ตฌํ์ด ํ์์ ์ด์ง ์๋ค.
๊ฐ์ฒด์ Id๊ฐ์ ์๋์ผ๋ก ObjectIdentifier ํ์ ์ผ๋ก ํ ๋น๋๋ค.
์ฆ, ๋ฐ๋ก id๋ฅผ ๋ง๋ค์ด์ฃผ์ง ์์๋ ๊ฐ์ฒด์ ์ฃผ์๊ฐ์ด ๋ฐ์ดํฐ์ ์๋ณ ์์๊ฐ ๋๋ค๋๊ฑธ ์ ์ ์๋ค.
Identity Operators
Identity Operators๋ ๊ฐ์ฒด์ ๊ณ ์ ์ฑ์ ํ๋ณํ๊ธฐ ์ํ ์ฐ์ฐ์์ด๋ค.
ํด๋น ์ฐ์ฐ์๋ ๊ฐ์ฒด์ Identity๋ฅผ ๋น๊ตํ๊ธฐ ์ํด ์ฐธ์กฐ(์ฃผ์)๋ฅผ ๋น๊ตํ๋ค.
๋ง์ฝ struct ์ธ์คํด์ค์ ๋น๊ต๋ฅผ ์ํํ๊ณ ์ ํ๋ค๋ฉด,
ํด๋์ค ํ์ ์ด ์๋๋ผ๋ ๊ฒฝ๊ณ ๊ฐ ์ถ๋ ฅ๋๋ค.
identifiable์ ์ฑํํ ๊ตฌ์กฐ์ฒด๋ผ๋ ๋ง์ฐฌ๊ฐ์ง๋ค.
๋ช ์์ ์ผ๋ก ์๋ณ์ฑ์ ์ฌ์ด์ค๋ค ํ๋ค ๊ฐ ํ์ ์๊ฒ ์๋ณธ ๊ฐ๋ ์ด ์๋ค.
ํธ์๋ฅผ ์ํด ์ฌ์ด์ค ์๋ณ์ฑ์, ๋ฐ์ดํฐ์ ์๋ณ์ฑ(์ฐธ์กฐ)์ ๋๋ณํด์ฃผ์ง ๋ชปํ๋ค.
๋ฐ์ดํฐ์ ์ ์ฒด์ฑ(Identity)์ด๋,
๊ฐ ํ์ ์๊ฒ๋ ์ปดํจํฐ๊ฐ ๊ทธ ์ ์ฒด์ฑ์ ์๋ณํ ๋งํ ์์ธ์ด ์๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ ์ฒด์ฑ(identity)์ด๋ ๊ฐ์ฒด(ํด๋์ค ์ธ์คํด์ค)์ ์ฃผ์๋ฅผ ์๋ฏธํ๋ค.
์๋๋ ๋ด ๋๋ฆ๋๋ก ์ ๋ฆฌํด๋ณธ ์๊ฐ์ด๋ค.
identity๋ฅผ ์ปจํธ๋กคํด์ผ ํ ๋๋, ์ ์ง๊ฐ๋ฅํ ๋ฐ์ดํฐ์ ์ฌ๋ฌ ์ ๊ทผ์ด ์ด๋ฃจ์ด์ ธ์ผ ํ ๋ ๋ฅผ ์๋ฏธํ๋ค.
๋ง๋ถ์ฌ struct๋ ๋ณธ์ง์ ์ผ๋ก ์๋ณ์ด ๋ถ๊ฐ๋ฅํ๋ค.
Identifiable์ ์ฑํํ์ฌ ๊ตฌ์กฐ์ฒด์๊ฒ๋ Id(id)๋ฅผ ์ฌ์ด์ฃผ๋ ๊ฒ์ ์๋ก๋ค๋ฅธ ๊ฐ์ด๋ผ๋ id๋ฅผ ํตํด '๊ฐ๋ค'๊ณ ํ๋ณํ ์ ์๋๋ก ์๋ณ ์์๋ฅผ ์ ๊ณตํ ๋ฟ, ๋ฐ์ดํฐ๊ฐ ์์ฒด๊ฐ ์ ์ง๋๋-๋ ์ฐธ์กฐํ์ ์ ํน์ฑ์ ์ฃผ์ ํ๋ ๊ฒ์ ์๋๋ค.
์ ๋ฆฌ