4T2F / ThinkBig

๐ŸŒŸ์”ฝํฌ๋น… ์Šคํ„ฐ๋””๐ŸŒŸ
5 stars 1 forks source link

Identity #96

Open ha-nabi opened 4 days ago

ha-nabi commented 4 days ago

Identity

Choosing Between Structures and Classes

๊ณต์‹ ๋ฌธ์„œ์—” ์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ์ ˆ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋ธ๋งํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ identity๋ฅผ ์ปจํŠธ๋กคํ•ด์•ผ ํ•  ๋•Œ๋Š” class๋ฅผ ์‚ฌ์šฉํ•˜๋ผ

์—ฌ๊ธฐ์„œ ๋ฐ์ดํ„ฐ์˜ ์•„์ด๋ดํ‹ฐํ‹ฐ (identity of the data) ๋ž€ ๋ฌด์—‡์„ ์˜๋ฏธํ• ๊นŒ์š”?

์ด ๊ธ€์„ ํ†ตํ•ด class์˜ ์„ ํƒ ๊ธฐ์ค€์ด ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ณ ์œ ์„ฑ(Identity) control ์ด๋ž€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ด…์‹œ๋‹ค.



class์™€ struct์˜ ์„ ํƒ ๊ธฐ์ค€

AppleDeveloper_Choosing Between Structures and Classes

identity ๋ผ๋Š” ํ‚ค์›Œ๋“œ๋ฅผ ์–ด๋””์„œ ๋งˆ์ฃผํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€.

์• ํ”Œ ๊ณต์‹ ๋ฌธ์„œ๋Š” class์™€ struct ์„ ํƒ ๊ธฐ์ค€์— ๋Œ€ํ•ด ์•„๋ž˜์™€ ๊ฐ™์ด ๋งํ•œ๋‹ค.


์ฒซ ๋ฒˆ์งธ ๋ฌธ์žฅ์ด ์ธ์ƒ ๊นŠ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ struct๋ฅผ ์‚ฌ์šฉํ•˜๋ผ


swift๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ class์˜ ํ•„์š”๋ฅผ ๋Š๋‚„ ์ƒํ™ฉ์€ ํ”์น˜ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด class๋ฅผ ์„ ํƒํ•  ์ƒํ™ฉ์€ ์ •๋ง ์—†๋Š” ๊ฑธ๊นŒ?

(๋ช…์พŒํ•˜๊ฒŒ๋„) ์œ„์˜ ์„ธ๋ฒˆ์งธ ๋ฌธ์žฅ์—์„œ class๋ฅผ ์„ ํƒํ•ด์•ผ ํ•  ์ƒํ™ฉ์ด ์–ธ๊ธ‰๋ฉ๋‹ˆ๋‹ค.

๋ชจ๋ธ๋งํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ identity๋ฅผ ์ปจํŠธ๋กคํ•ด์•ผ ํ•  ๋•Œ๋Š” class๋ฅผ ์‚ฌ์šฉํ•˜๋ผ.


๋ฐ์ดํ„ฐ์˜ identity? ๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฑธ control?

identity์˜ ์‚ฌ์ „์  ๋œป์€ ๊ณ ์œ ์„ฑ, ๋…์ž์„ฑ, ์‹ ์›์ž…๋‹ˆ๋‹ค.

์•„์ด๋”” ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•  ๋•Œ ๊ทธ id๊ฐ€ ๋ฐ”๋กœ identity์˜ ์•ฝ์–ด์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

๋ฌด์—‡์ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ์œ ํ•˜๋„๋ก, ์‹๋ณ„ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ• ๊นŒ?

๋” ๋‚˜์•„๊ฐ€ ๋ฐ์ดํ„ฐ์˜ ์‹๋ณ„์„ฑ์„ ์กฐ์ ˆ ํ•œ๋‹ค๋Š” ๋ง์ด ๋ฌด์Šจ ๋œป ์ผ๊นŒ?



Identity, Identifier

๋จผ์ € Identity๋ž€ ๋ฌด์—‡์ผ๊นŒ ๊ณ ๋ฏผํ•˜๋ฉฐ ์ž์—ฐ์Šค๋ ˆ ๋ณ€์ˆ˜ / ์ƒ์ˆ˜ ๊ฐœ๋…์„ ๋Œ์•„๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค.

๋ณ€ํ•˜์ง€ ์•Š๋Š” ์ •์ฒด์„ฑ- ์— ๋Œ€ํ•ด ๊ณ ๋ฏผํ•˜์ž๋ฉด ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ’, ์ƒ์ˆ˜(let)๊ฐ€ ๋– ์˜ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๋ ‡๊ฒŒ var๋ž‘ let์ด ๋ญ์˜€๋Š”์ง€ ์ƒ๊ฐํ•˜๋‹ค ์ƒˆ์‚ผ์Šค๋ ˆ ๋ฐœ๊ฒฌํ•˜๊ฒŒ ๋œ ๊ฒƒ์ด ์žˆ๋‹ค.


var test: String = ""


๋ฐ”๋กœ ์œ„ ๋ณ€์ˆ˜(๋˜๋Š” ์ƒ์ˆ˜)์˜ ์ด๋ฆ„์ธtest๋ฅผ ๋ถ€๋ฅด๋Š” ๋ช…์นญ์ด Identifier, ์‹๋ณ„์ž๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋งค๋ฒˆ '์ด๋ฆ„'์ด๋ผ๊ณ  ๋ถˆ๋ €๊ธฐ์— Identifier๋ผ๋Š” ๋ช…์นญ์ด ์žˆ์—ˆ์Œ์„ ์žŠ๊ณ  ์žˆ์—ˆ๋‹ค.


์•„๋ฌดํŠผ ๋ณ€์ˆ˜ ์ƒ์ˆ˜์˜ ์ด๋ฆ„, ์ฆ‰ Identifier๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๊ธฐ์ค€์€ ๋ญ˜๊นŒ?

struct์™€ class์˜ ๊ทผ๋ณธ์ ์ธ ์ฐจ์ด๋ผ ํ•˜๋ฉด, ๊ฐ’ ํƒ€์ž…์ด๋ƒ ์ฐธ์กฐ ํƒ€์ž…์ด๋ƒ์ด๋‹ค.

struct ๋ฐ์ดํ„ฐ์˜ ์‹๋ณ„์ž๋Š” ์Šคํƒ์— ์ €์žฅ๋œ ๊ฐ’์„ ๋ฐ”๋ผ๋ณด๊ณ , class์˜ ์‹๋ณ„์ž๋Š” ํž™์— ์ €์žฅ๋œ ์ธ์Šคํ„ด์Šค ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ๊ฐ’์„ ๋ฐ”๋ผ๋ณธ๋‹ค.

์ž์—ฐ์Šค๋ ˆ ์–ป๋Š” ๊นจ๋‹ฌ์Œ์ด ์žˆ๋‹ค.

์•„. ๊ตฌ์กฐ์ฒด์—๊ฒ ์›๋ณธ ๊ฐœ๋…์ด ์—†๊ตฌ๋‚˜


struct๋Š” ๊ฐ’ํƒ€์ž…์œผ๋กœ ๋ฐ์ดํ„ฐ ์ž์ฒด์— ํŠน๋ณ„ํ•œ ์ •์ฒด์„ฑ์ด ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์Šคํƒ ๋‚ด๋ถ€์—์„œ ์ƒ์„ฑ๋˜๊ณ , ์‚ฌ๋ผ์ง€๋ฉฐ ๋ˆ„๊ตฐ๊ฐ€ ๋ณด๊ณ  ์žˆ๋‹ค๋Š” ์ด์œ ๋กœ ์œ ์ง€๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž„. (์ฐธ์กฐ ์นด์šดํŠธ ์ฆ๊ฐ€ ๊ฐœ๋…์ด ์—†์Œ)


๋‹ค์‹œ ๋Œ์•„๊ฐ€ ์•„๋ž˜ ๋ฌธ์žฅ์„ ๋ณด์ž.

๋ชจ๋ธ๋งํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ identity๋ฅผ ์ปจํŠธ๋กคํ•ด์•ผ ํ•  ๋•Œ๋Š” class๋ฅผ ์‚ฌ์šฉํ•˜๋ผ.

identity๋ž€ ๋ฐ์ดํ„ฐ์˜ ์ •์ฒด์„ฑ์„ ๋Œ€๋ณ€ํ•˜๋Š” ์š”์†Œ๋กœ, ๋ฌธ๋งฅ์ƒ ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ identity ์ปจํŠธ๋กค์ด๋ž€ ์ฃผ์†Œ๊ฐ€ ์œ ์ง€๋˜๋Š” ์ƒํ™ฉ ์ „์ œ๋ฅผ ํ†ตํ•œ ์—ฌ๋Ÿฌ ์ ‘๊ทผ์„ ์˜๋ฏธํ•˜๋Š” ๊ฒŒ ์•„๋‹๊นŒ ์ถ”์ธกํ•  ์ˆ˜ ์žˆ๋‹ค.

์—ฌ๊ธฐ๊นŒ์ง€ ์ƒ๊ฐ์„ ์ขํžˆ์ž ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋’ค๋”ฐ๋ฅด๋Š” ๋˜ ๋‹ค๋ฅธ ์งˆ๋ฌธ์ด ์žˆ์—ˆ๋‹ค.

Identity์™€ Identifiable์€ ๋ฌด์Šจ ์ฐจ์ด์ง€ ?



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 Operators๋Š” ๊ฐ์ฒด์˜ ๊ณ ์œ ์„ฑ์„ ํŒ๋ณ„ํ•˜๊ธฐ ์œ„ํ•œ ์—ฐ์‚ฐ์ž์ด๋‹ค.

ํ•ด๋‹น ์—ฐ์‚ฐ์ž๋Š” ๊ฐ์ฒด์˜ Identity๋ฅผ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด ์ฐธ์กฐ(์ฃผ์†Œ)๋ฅผ ๋น„๊ตํ•œ๋‹ค.


๋งŒ์•ฝ struct ์ธ์Šคํ„ด์Šค์˜ ๋น„๊ต๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด,

ํด๋ž˜์Šค ํƒ€์ž…์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒฝ๊ณ ๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

identifiable์„ ์ฑ„ํƒํ•œ ๊ตฌ์กฐ์ฒด๋ผ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค.

๋ช…์‹œ์ ์œผ๋กœ ์‹๋ณ„์„ฑ์„ ์‹ฌ์–ด์ค€๋‹ค ํ•œ๋“ค ๊ฐ’ ํƒ€์ž…์—๊ฒ ์›๋ณธ ๊ฐœ๋…์ด ์—†๋‹ค.

ํŽธ์˜๋ฅผ ์œ„ํ•ด ์‹ฌ์–ด์ค€ ์‹๋ณ„์„ฑ์€, ๋ฐ์ดํ„ฐ์˜ ์‹๋ณ„์„ฑ(์ฐธ์กฐ)์„ ๋Œ€๋ณ€ํ•ด์ฃผ์ง€ ๋ชปํ•œ๋‹ค.



๋ฐ์ดํ„ฐ์˜ ์ •์ฒด์„ฑ(Identity)์ด๋ž€,

๊ฐ’ ํƒ€์ž…์—๊ฒŒ๋Š” ์ปดํ“จํ„ฐ๊ฐ€ ๊ทธ ์ •์ฒด์„ฑ์„ ์‹๋ณ„ํ•œ ๋งŒํ•œ ์š”์ธ์ด ์—†๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์ •์ฒด์„ฑ(identity)์ด๋ž€ ๊ฐ์ฒด(ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค)์˜ ์ฃผ์†Œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

๋ชจ๋ธ๋งํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ identity๋ฅผ ์ปจํŠธ๋กคํ•ด์•ผ ํ•  ๋•Œ๋Š” class๋ฅผ ์‚ฌ์šฉํ•˜๋ผ.


์•„๋ž˜๋Š” ๋‚ด ๋‚˜๋ฆ„๋Œ€๋กœ ์ •๋ฆฌํ•ด๋ณธ ์ƒ๊ฐ์ด๋‹ค.



์ •๋ฆฌ

์‚ฌ์šฉ๋‹จ์˜ ์ฃผ๊ธฐ๋ณด๋‹ค ์˜ค๋ž˜ ์œ ์ง€๋˜์–ด์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ๊ทธ ์ •์ฒด์„ฑ(identity) ์ด ์œ ์ง€๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ class๋กœ ๋‘์–ด์•ผ ๊ฒ ๋‹ค ๊ฐ’ ํƒ€์ž…(struct)์€ ์›๋ณธ์ด ์—†๋‹ค. ์ฆ‰ ์‹๋ณ„ํ•  ์ˆ˜ ์—†๋‹ค.

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

์œ ์ง€๋œ๋‹ค- ๋Š” ์›๋ณธ ๊ฐœ๋…์€ ์˜ค์ง ์ฐธ์กฐ ํƒ€์ž…์—๋งŒ ์กด์žฌํ•œ๋‹ค

์ ์ ˆํžˆ ํŒ๋‹จํ•˜์—ฌ ํ™œ์šฉํ•˜์ž