์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

[MVVM] Model์—์„œ Class๋Œ€์‹  Struct๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

๋ณธ๋ฌธ

Swift์—์„œ ๊ตฌ์กฐ์ฒด์™€ ํด๋ž˜์Šค๋Š” ๋‘˜ ๋‹ค ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๊ตฌ์กฐ์ฒด (Struct)

  • ๊ฐ’ ํƒ€์ž…(Value Type)
    : ๊ตฌ์กฐ์ฒด๋Š” ๊ฐ’ ํƒ€์ž…์ด๋‹ค. ๊ตฌ์กฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜์— ํ• ๋‹นํ•˜๊ฑฐ๋‚˜ ํ•จ์ˆ˜์— ์ „๋‹ฌํ•  ๋•Œ, ํ•ญ์ƒ ์ƒˆ๋กœ์šด ๋ณต์‚ฌ๋ณธ์ด ๋งŒ๋“ค์–ด์ง„๋‹ค.
  • ๋ถˆ๋ณ€์„ฑ(Immutability)
    :
    ๊ตฌ์กฐ์ฒด๋Š” ๊ฐ’ ํƒ€์ž…์ด๊ธฐ ๋•Œ๋ฌธ์—, ๊ตฌ์กฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค๋Š” ๋‹ค๋ฅธ ๊ณณ์—์„œ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ƒ์† ๋ถˆ๊ฐ€: ๊ตฌ์กฐ์ฒด๋Š” ์ƒ์†์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ตฌ์กฐ์ฒด๋Š” ์ƒ์† ๊ณ„์ธต์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋‹จ์ˆœํ•œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์— ์ ํ•ฉํ•˜๋‹ค.
  • ์ดˆ๊ธฐํ™”: ๊ตฌ์กฐ์ฒด๋Š” ์ž๋™์œผ๋กœ ๋ฉค๋ฒ„์™€์ด์ฆˆ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋ฅผ ์ œ๊ณต.

 

 

ํด๋ž˜์Šค (Class)

  • ์ฐธ์กฐ ํƒ€์ž…(Reference Type)
    : ํด๋ž˜์Šค๋Š” ์ฐธ์กฐ ํƒ€์ž…์ด๋‹ค. ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜์— ํ• ๋‹นํ•˜๊ฑฐ๋‚˜ ํ•จ์ˆ˜์— ์ „๋‹ฌํ•  ๋•Œ, ๋™์ผํ•œ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ฐธ์กฐ๊ฐ€ ์ „๋‹ฌ๋œ๋‹ค.
  • ๊ฐ€๋ณ€์„ฑ(Mutability): ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๋ฅผ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ์ฐธ์กฐํ•˜๋ฉด, ํ•œ ๊ณณ์—์„œ ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์ด ๋ชจ๋“  ์ฐธ์กฐ์— ๋ฐ˜์˜๋œ๋‹ค.
  • ์ƒ์† ๊ฐ€๋Šฅ: ํด๋ž˜์Šค๋Š” ์ƒ์†์„ ์ง€์›ํ•œ๋‹ค. ์ƒ์† ๊ณ„์ธต์ด ํ•„์š”ํ•œ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์— ์ ํ•ฉํ•˜๋‹ค.
  • ๋””์ด๋‹ˆ์…œ๋ผ์ด์ €: ํด๋ž˜์Šค๋Š” deinit์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋˜๊ธฐ ์ „์— ์ •๋ฆฌ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๊ตฌ์กฐ์ฒด์™€ ํด๋ž˜์Šค๋ฅผ ์„ ํƒํ•˜๋Š” ๊ธฐ์ค€

  • ๊ฐ’ ํƒ€์ž… vs. ์ฐธ์กฐ ํƒ€์ž…: ๊ฐ’ ํƒ€์ž…์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๊ตฌ์กฐ์ฒด, ์ฐธ์กฐ ํƒ€์ž…์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์ƒ์† ํ•„์š”์„ฑ: ์ƒ์†์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ƒ์†์ด ํ•„์š” ์—†๋‹ค๋ฉด ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋ถˆ๋ณ€์„ฑ: ๋ฐ์ดํ„ฐ๊ฐ€ ๋ถˆ๋ณ€์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ถˆ๋ณ€์„ฑ์„ ์œ ์ง€ํ•˜์ง€ ์•Š์•„๋„ ๋˜๋ฉด ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋‹จ์ˆœ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ: ๋‹จ์ˆœํ•œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์€ ๊ตฌ์กฐ์ฒด๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์€ ํด๋ž˜์Šค๋กœ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

 

 

 

ํฌ์ผ“๋ชฌ ๋ชจ๋ธ์—์„œ์˜ ์ ์šฉ

 

Pokemon ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์ด ์ƒ์† ๊ณ„์ธต ํ•„์š” ์—†๋Š” ์ด์œ 

1. ๋‹จ์ˆœ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ:

ํฌ์ผ“๋ชฌ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹จ์ˆœํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋‹ค. ์—ฌ๋Ÿฌ ํƒ€์ž…์˜ ํฌ์ผ“๋ชฌ์„ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ ์žˆ์–ด์„œ ์ƒ์†์ด ํ•„์š”ํ•˜์ง€ ์•Š์Œ.

ํฌ์ผ“๋ชฌ์˜ ์†์„ฑ (ํ‚ค, ๋ชธ๋ฌด๊ฒŒ, ํƒ€์ž… ๋“ฑ)์€ ๊ฐ ํฌ์ผ“๋ชฌ ๊ฐ์ฒด์— ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌํ•˜๋ฏ€๋กœ, ์ƒ์†์„ ํ†ตํ•ด ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ๊ณต์œ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

 

 

2. ๊ตฌ์„ฑ(composition) ํ™œ์šฉ:

์ƒ์† ๋Œ€์‹  ๊ตฌ์„ฑ(composition)์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ ์ ˆํ•˜๋‹ค. ์ด๋Š” ์œ ์—ฐ์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•.

์˜ˆ๋ฅผ ๋“ค์–ด, Pokemon ๊ตฌ์กฐ์ฒด๋Š” Species, TypeElement, Sprites์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ๊ตฌ์กฐ์ฒด๋ฅผ ํฌํ•จํ•˜์—ฌ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๊ด€๋ฆฌ๋˜๊ณ  ์žฌ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

 

3. ๊ฐ’ ํƒ€์ž…์œผ๋กœ ๋ถˆ๋ณ€์„ฑ ์œ ์ง€:

Pokemon ๊ตฌ์กฐ์ฒด์™€ ๊ทธ ๋‚ด๋ถ€์˜ ๋‹ค๋ฅธ ๊ตฌ์กฐ์ฒด๋“ค(TypeElement, Species, Sprites) ๋ชจ๋‘ ๊ฐ’ ํƒ€์ž…์ด๋ฏ€๋กœ,
์ด ๋ฐ์ดํ„ฐ๋Š” ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ์œ ์ง€๋œ๋‹ค.

 

4. ๋‹จ์ˆœํ•œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ:

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

 

๊ฒฐ๋ก 

ํฌ์ผ“๋ชฌ ๋ชจ๋ธ์—์„œ ๋ถˆ๋ณ€์„ฑ์ด ์ค‘์š”ํ•œ ์ด์œ ๋Š” ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ์œ ์ง€, ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ, ์ฝ”๋“œ ๊ฐ€๋…์„ฑ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.

๋˜ํ•œ, ํฌ์ผ“๋ชฌ ๋ชจ๋ธ์€ ๋‹จ์ˆœํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์ด๋ฏ€๋กœ ์ƒ์† ๊ณ„์ธต์ด ํ•„์š” ์—†๊ณ , ๊ตฌ์„ฑ๋งŒ์œผ๋กœ ์ถฉ๋ถ„ํžˆ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋”ฐ๋ผ์„œ ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•˜๋‹ค๋Š” ๊ฒฐ๋ก .

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ