์ƒˆ์†Œ์‹

๐Ÿ“ฑ iOS/-- Swift 5

(Swift) Class ์™€ Struct ์˜ ์ฐจ์ด , ์šฉ๋„์™€ ์„ ํƒ ๋ฐฉ๋ฒ•

  • -

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

 

#Class, Struct ๊ณตํ†ต์ 

  • ๊ฐ’์„ ์ €์žฅํ•  ํ”„๋กœํผํ‹ฐ๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฉ”์„œ๋“œ๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‚ด๋ถ€ ํ”„๋กœํผํ‹ฐ์— .๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ƒ์„ฑ์ž(init)๋ฅผ ์‚ฌ์šฉํ•ด ์ดˆ๊ธฐ ์ƒํƒœ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • extension์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Protocol์„ ์ฑ„ํƒํ•˜์—ฌ ๊ธฐ๋Šฅ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

#Class์˜ ํŠน์ง•

  • Reference Type
  • ARC๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ํ•œ๋‹ค.
  • ๊ฐ™์€ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ชจ๋“  ๋ณ€์ˆ˜์— ์˜ํ–ฅ์„์ค€๋‹ค. (์ฐธ์กฐํƒ€์ž…์ด๋‹ˆ๊นŒ;)
  • ์ƒ์†์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ํƒ€์ž… ์บ์ŠคํŒ…์„ ํ†ตํ•ด ๋Ÿฐํƒ€์ž„์—์„œ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค์˜ ํƒ€์ž…์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ธ์Šคํ„ด์Šค๊ฐ€ ์†Œ๋ฉธ๋ ๋•Œ deinit ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋œ๋‹ค. (์ฐธ์กฐํƒ€์ž…์ด๋‹ˆ๊นŒ)

#Struct์˜ ํŠน์ง•

  • Value Type
  • ์—ฌ๋Ÿฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด๋„ , ๊ฐ ์ธ์Šคํ„ด์Šค์˜ ๊ฐ’์€ ๋‹ค๋ฅด๋‹ค. (๊ฐ’ ํƒ€์ž…์ด๋‹ˆ๊นŒ;)

 

๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€ ๊ตฌ์กฐ์ฒด๋Š” ๊ฐ’ํƒ€์ž…, ํด๋ž˜์Šค๋Š” ์ฐธ์กฐํƒ€์ž…์ด๋ผ๋Š” ์ ์ด๋‹ค.

์ด ๋•Œ๋ฌธ์— ํŒŒ์ƒ๋˜๋Š” ์ฐจ์ด์ ๋“ค์ด ์กด์žฌํ•œ๋‹ค.

  1. ๊ตฌ์กฐ์ฒด๋Š” ์ƒ์†ํ•  ์ˆ˜ ์—†๋‹ค.
  2. ํƒ€์ž…์บ์ŠคํŒ…์€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์—๋งŒ ํ—ˆ์šฉ๋œ๋‹ค.
  3. deinit์€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์—์„œ๋งŒ ํ˜ธ์ถœ๋œ๋‹ค.
  4. ์ฐธ์กฐ ํšŸ์ˆ˜ ๊ณ„์‚ฐ์€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์—๋งŒ ์ ์šฉ๋œ๋‹ค.

 

  • ๊ตฌ์กฐ์ฒด๋Š” ์ƒ์„ฑ์ž๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„๋„ default initalizer ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ตฌ์กฐ์ฒด ๋‚ด๋ถ€์— ๊ตฌ์กฐ์ฒด, ํด๋ž˜์Šค ๋‚ด๋ถ€์— ํด๋ž˜์Šค ๋“ฑ ์ค‘์ฒฉํƒ€์ž…์˜ ์ •์˜ ๋ฐ ์„ ์–ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๋ฐ˜๋ฉด์— ๊ตฌ์กฐ์ฒด๋Š” init์€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค deinit์€ ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
  • Swift ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ธฐ๋ณธ ํƒ€์ž…์€ ๋ชจ๋‘ ๊ตฌ์กฐ์ฒด์ด๋‹ค.(String, Bool, Int, Array, Dictionary, Set .....)
class Person{
  var name = "kim"
  var age = "20"
  deinit {
    print("Person ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๊ฐ€ ์†Œ๋ฉธ๋ฉ๋‹ˆ๋‹ค.")
  }
}
โ€‹
let kim = Person()
kim = nil // >>> Person ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๊ฐ€ ์†Œ๋ฉธ๋ฉ๋‹ˆ๋‹ค.

ํด๋ž˜์Šค๋Š” ์ฐธ์กฐํƒ€์ž…์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋” ์ด์ƒ ์ฐธ์กฐํ•  ํ•„์š”๊ฐ€ ์—†์„๋•Œ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์†Œ๋ฉธ๋œ๋‹ค. (class ์ธ์Šคํ„ด์Šค์— nil์„ ๋„ฃ์—ˆ์„๋•Œ)

์ด๋•Œ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ deinit ๋ฉ”์„œ๋“œ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์ธ์Šคํ„ด์Šค๊ฐ€ ์†Œ๋ฉธ๋˜๊ธฐ ์ง์ „์— ์ฒ˜๋ฆฌํ•  ์ฝ”๋“œ๋ฅผ ๋„ฃ์–ด์ฃผ๊ฒŒ๋œ๋‹ค.

 

#์ฐธ์กฐ ๋น„๊ต ์—ฐ์‚ฐ์ž

ํ”ํžˆ ๊ฐ’ ๋น„๊ต์— ์‚ฌ์šฉ๋˜๋Š” != , == ์™€๋Š” ๋‹ค๋ฅด๊ฒŒ reference๋ฅผ ๋น„๊ตํ•˜๋Š” ๋น„๊ต์—ฐ์‚ฐ์ž์ด๋‹ค.

=== : ๋‘ ์ƒ์ˆ˜๋‚˜ ๋ณ€์ˆ˜๊ฐ€ ๊ฐ™์€ ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ ์ฐธ
!== : ๋‘ ์ƒ์ˆ˜๋‚˜ ๋ณ€์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ ์ฐธ

 

#๊ตฌ์กฐ์ฒด์™€ ํด๋ž˜์Šค๊ฐ€ ์ค‘์ฒฉ๋œ ๊ฒฝ์šฐ๋Š” ํž™ ์˜์—ญ์— ์ €์žฅ๋ ๊นŒ? ์Šคํƒ ์˜์—ญ์— ์ €์žฅ๋ ๊นŒ?

 

1. ๊ฐ’ ํƒ€์ž…์„ ํฌํ•จํ•˜๋Š” ์ฐธ์กฐํƒ€์ž…

ํด๋ž˜์Šค ๋‚ด๋ถ€์— ๊ตฌ์กฐ์ฒด ํ”„๋กœํผํ‹ฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ๋งํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์—๋Š” ์ฐธ์กฐํƒ€์ž…์ด ์†Œ๋ฉธ๋˜๊ธฐ ์ „์— ๊ฐ’ ํƒ€์ž…๋„ ํž™์— ์ €์žฅ๋œ๋‹ค.

ํด๋กœ์ € ๋‚ด๋ถ€์— ์‚ฌ์šฉํ•˜๋Š” ๊ฐ’ ํƒ€์ž…๋„ ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์— ํฌํ•จ๋œ๋‹ค.

2. ์ฐธ์กฐ ํƒ€์ž…์„ ํฌํ•จํ•˜๋Š” ๊ฐ’ ํƒ€์ž…

๊ตฌ์กฐ์ฒด ๋‚ด๋ถ€์— ํด๋ž˜์Šค ํ”„๋กœํผํ‹ฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ๋งํ•œ๋‹ค. ๋‚ด๋ถ€์— ์ฐธ์กฐํƒ€์ž…์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฐธ์กฐ ์นด์šดํŒ…์„ ์ฒ˜๋ฆฌํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

#์–ด๋–ค ์ƒํ™ฉ์— ํด๋ž˜์Šค๋ฅผ ์“ฐ๊ณ , ๊ตฌ์กฐ์ฒด๋ฅผ ์“ธ๊นŒ ?

์• ํ”Œ ๋ฌธ์„œ - ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ์ข‹์€ ๊ฒฝ์šฐ

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

์ถ”๊ฐ€์ ์œผ๋กœ Objective-C์™€ ์ƒํ˜ธ ์šด์šฉ์„ฑ์ด ํ•„์š”ํ•  ๋•Œ๋Š” ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.