suvera-dev ๐Ÿฅฆ

Swift ) ๊ธฐ์ดˆ ๋ฌธ๋ฒ• 6์ผ์ฐจ - Class ์™€ Struct ๋ณธ๋ฌธ

Language/Swift

Swift ) ๊ธฐ์ดˆ ๋ฌธ๋ฒ• 6์ผ์ฐจ - Class ์™€ Struct

suvera 2022. 2. 10. 03:11

์ง€๊ธˆ๊นŒ์ง€๋Š” ํด๋ž˜์Šค์™€ ๊ตฌ์กฐ์ฒด์˜ ์ฐจ์ด๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ๋ชจ๋ฅด๊ณ  ๊ทธ๋ƒฅ ViewController๋Š” Class.. Model ๋งŒ๋“ค ๋•Œ๋Š” Struct .. ๋ฅผ ์จ์™”์Šต๋‹ˆ๋‹ค ! ํ•˜์ง€๋งŒ.. ์ด์ œ๋Š” ์กฐ๊ธˆ์ด๋ผ๋„... ์•Œ์•„์•ผ ํ•  ๋•Œ๊ฐ€ ์˜จ ๊ฒƒ ๊ฐ™๋„ค์š” ^_^ 

 

 

๐Ÿ“Œ Class์™€ Struct์˜ ๊ณตํ†ต์ ์€ ?

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

 

๐Ÿ“Œ Class์™€ Struct์˜ ์ฐจ์ด์ ์€ ?

๐ŸŽฏ Class

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

๐Ÿ”ฎ Struct

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

 

โฌ‡๏ธ  ์ถ”๊ฐ€์— ์ถ”๊ฐ€์— ์ถ”๊ฐ€... ๋ชจ๋“  ๊ฑธ ์•Œ์•„์•ผ ์ง์„ฑ์ด ํ’€๋ฆฌ๋Š” .. ๐Ÿง 

๋”๋ณด๊ธฐ

 

"Class๋Š” ์ฐธ์กฐํƒ€์ž…์ด๊ณ  ARC๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ํ•œ๋‹ค. Struct๋Š” ๊ฐ’ ํƒ€์ž…์ด๋‹ค."

๊ตฌ์กฐ์ฒด์™€ ํด๋ž˜์Šค์˜ ์ฐจ์ด ์ค‘ ๊ฐ€์žฅ ๋‘๋“œ๋Ÿฌ์ง€๋Š” ๊ฒƒ์€ ๊ตฌ์กฐ์ฒด๋Š” ๊ฐ’ ํƒ€์ž…, ํด๋ž˜์Šค๋Š” ์ฐธ์กฐ ํƒ€์ž…์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ตฌ์กฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค๋Š” ๋ณ€์ˆ˜์— ๋Œ€์ž…๋˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋กœ ์ „๋‹ฌ๋  ๋•Œ, ๋ฉค๋ฒ„๋“ค์˜ ๊ฐ’์ด ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌ๋œ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜์ง€๋งŒ ํด๋ž˜์Šค๋Š” ํ˜„์žฌ ์ธ์Šคํ„ด์Šค์˜ ์ฐธ์กฐ ๊ฐ’์ด ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

 

- ๊ตฌ์กฐ์ฒด๋Š” ์ƒ์†ํ•  ์ˆ˜ ์—†๋‹ค.

- ํƒ€์ž…์บ์ŠคํŒ…์€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์—๋งŒ ํ—ˆ์šฉ๋œ๋‹ค.

- deinit์€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์—์„œ๋งŒ ํ˜ธ์ถœ๋œ๋‹ค.

- ์ฐธ์กฐ ํšŸ์ˆ˜ ๊ณ„์‚ฐ์€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์—๋งŒ ์ ์šฉ๋œ๋‹ค.

 

- ๊ตฌ์กฐ์ฒด๋Š” ์ƒ์„ฑ์ž๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„๋„ default initalizer ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

- ๊ตฌ์กฐ์ฒด ๋‚ด๋ถ€์— ๊ตฌ์กฐ์ฒด, ํด๋ž˜์Šค ๋‚ด๋ถ€์— ํด๋ž˜์Šค ๋“ฑ ์ค‘์ฒฉํƒ€์ž…์˜ ์ •์˜ ๋ฐ ์„ ์–ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

- ๋ฐ˜๋ฉด์— ๊ตฌ์กฐ์ฒด๋Š” init์€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค deinit์€ ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

 

- Swift ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ธฐ๋ณธ ํƒ€์ž…์€ ๋ชจ๋‘ ๊ตฌ์กฐ์ฒด์ด๋‹ค.(String, Bool, Int, Array, Dictionary, Set .....)

- ๊ตฌ์กฐ์ฒด๋Š” let์œผ๋กœ ์„ ์–ธํ–ˆ์„ ๊ฒฝ์šฐ ํ”„๋กœํผํ‹ฐ ๊ฐ’์˜ ์ˆ˜์ •์ด ๋ถˆ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ํด๋ž˜์Šค๋Š” let์œผ๋กœ ์„ ์–ธํ•˜์—ฌ๋„ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

๐Ÿ› deinit์— ๊ด€ํ•˜์—ฌ...

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

 

 

๐Ÿฅ‘ ์˜ˆ์‹œ 

// ์œ ํŠœ๋ฒ„ (๋ฐ์ดํ„ฐ) ๋ชจ๋ธ - struct / ๊ตฌ์กฐ์ฒด
struct YoutuberStruct {
    var name : String
    var subscribersCount : Int
}

var suvera = YoutuberStruct(name: "์ˆ˜๋ฒ ๋ผ", subscribersCount: 99999)

var suveraClone = suvera

print("======== struct =========")

print("๊ฐ’ ๋„ฃ๊ธฐ ์ „ suveraClone.name : \(suveraClone.name)") // ์ˆ˜๋ฒ ๋ผ

suveraClone.name = "์ˆ˜๋ฒ ๋ผ ํด๋ก ํ–ˆ์ง€๋กฑ"

// ๊ฐ’ ๋ณต์‚ฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‘˜์˜ ๊ฐ’์ด ๋‹ค๋ฅด๋‹ค
print("๊ฐ’ ๋„ฃ์€ ํ›„ suveraClone.name : \(suveraClone.name)") // ์ˆ˜๋ฒ ๋ผ ํด๋ก ํ–ˆ์ง€๋กฑ
print("๊ฐ’ ๋„ฃ์€ ํ›„ suvera.name : \(suvera.name)") // ์ˆ˜๋ฒ ๋ผ

Struct ๋Š” ๊ฐ’ ํƒ€์ž…์ด๋ฏ€๋กœ ๊ฐ™์€ ๊ตฌ์กฐ์ฒด ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜๋”๋ผ๋„ ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋”๋ผ๋„ ๋‹ค๋ฅธ ๊ตฌ์กฐ์ฒด ๋ณ€์ˆ˜์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์œ„์— ์˜ˆ์‹œ์—์„œ YoutuberStruct ๋ผ๋Š” ๊ตฌ์กฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  suvera์— ๊ตฌ์กฐ์ฒด ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜์—ฌ ์ด๋ฆ„๊ณผ ๊ตฌ๋…์ž ์ˆ˜๋ฅผ ๋„ฃ์–ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  suveraClone์—๋„ ๊ฐ™์€ ๊ตฌ์กฐ์ฒด ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜์˜€์Šต๋‹ˆ๋‹ค. suveraClone์˜ ์ด๋ฆ„์„ ๋ฐ”๊พธ์–ด๋„ suvera์˜ ์ด๋ฆ„์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ! 

 

// ํด๋ž˜์Šค
class YoutuberClass {
    var name : String
    var subscribersCount : Int
    // ์ƒ์„ฑ์ž - ์ฆ‰ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฐ๋‹ค
    // init ์œผ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง„ ์ƒ์„ฑ์ž ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด์•ผ
    // ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋„ฃ์–ด์„œ ๊ทธ๊ฐ’์„ ๊ฐ€์ง„ ๊ฐ์ฒด(object)๋ฅผ ๋งŒ๋“ค์ˆ˜ ์žˆ๋‹ค.
    init(name: String, subscribersCount: Int){
        self.name = name
        self.subscribersCount = subscribersCount
    }
}

var suvera = YoutuberClass(name: "์ˆ˜๋ฒ ๋ผ", subscribersCount: 99999)

var suveraClone = suvera

print("๊ฐ’ ๋„ฃ๊ธฐ ์ „ suveraClone.name : \(suveraClone.name)") // ์ˆ˜๋ฒ ๋ผ

suveraClone.name = "์ˆ˜๋ฒ ๋ผ ํด๋ก ํ–ˆ์ง€๋กฑ"

print("๊ฐ’ ๋„ฃ์€ ํ›„ suveraClone.name : \(suveraClone.name)") // ์ˆ˜๋ฒ ๋ผ ํด๋ก ํ–ˆ์ง€๋กฑ

print("๊ฐ’ ๋„ฃ์€ ํ›„ suvera.name : \(suvera.name)") // ์ˆ˜๋ฒ ๋ผ ํด๋ก ํ–ˆ์ง€๋กฑ

class๋Š” init์„ ํ†ตํ•ด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง„ ์ƒ์„ฑ์ž ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋„ฃ๊ณ  ๊ฐ์ฒด(object)๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

class๋Š” suveraClone์˜ ์ด๋ฆ„์„ ๋ฅผ ๋ณ€๊ฒฝํ•ด์ฃผ์—ˆ๋”๋‹ˆ suvera์˜ ์ด๋ฆ„์ด ํ•จ๊ป˜ ๋ณ€๊ฒฝ๋œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์œ ๋Š” class๋Š” ์ฐธ์กฐ ํƒ€์ž…์ด๋ผ ๊ฐ™์€ ํด๋ž˜์Šค ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•œ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ณ€๊ฒฝ์‹œํ‚ค๋ฉด ์ฐธ์กฐ๋œ ๊ฐ์ฒด์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

 

์‰ฝ๊ฒŒ ๋งํ•ด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ๊ฐ™์ด ๊ณต์œ ๋ฅผ ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 


 

๊ธฐ์ดˆ ๋ฌธ๋ฒ• ํฌ์ŠคํŒ…์ด๊ธด ํ•˜์ง€๋งŒ, ๋” ๊นŠ๊ฒŒ ๋“ค์–ด๊ฐ€๋ณธ๋‹ค๋ฉด ... 

 

๐Ÿ”ฎ ๊ตฌ์กฐ์ฒด - ์Šคํƒ ์˜์—ญ

๊ตฌ์กฐ์ฒด๋Š” ๊ฐ’ ํƒ€์ž…์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋ฉ”๋ชจ๋ฆฌ์˜ ์Šคํƒ ์˜์—ญ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์Šคํƒ ์˜์—ญ์€ ๊ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— Thread-Safe ํ•˜๋‹ค๋Š” ํŠน์ง•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์Šคํƒ ์˜์—ญ์€ ์Šคํƒ ํฌ์ธํ„ฐ๋งŒ ์ด๋™์‹œํ‚ค๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ๋ฒˆ์˜ ๋ช…๋ น์œผ๋กœ ํ• ๋‹น๊ณผ ํ•ด์ œ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ปดํŒŒ์ผ ํƒ€์ž„์— ํ• ๋‹นํ•  ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•ด์ฃผ์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

์ด๋Š” ์šด์˜์ฒด์ œ๊ฐ€ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ํ• ๋‹นํ•  ์˜์—ญ์„ ๋”ฐ๋กœ ๊ณ„์‚ฐํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

๐ŸŽฏ ํด๋ž˜์Šค - ํž™ ์˜์—ญ

ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋Š” ํž™ ์˜์—ญ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

ํž™ ์˜์—ญ์— ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์€ ๋ชจ๋‘ ์ปดํŒŒ์ผ ํƒ€์ž„์ด ์•„๋‹Œ ๋Ÿฐํƒ€์ž„์— ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋Ÿฐํƒ€์ž„์— ์ถ”๊ฐ€์ ์ธ ์—ฐ์‚ฐ์„ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ ํž™ ์˜์—ญ์€ ํ•œ ํ”„๋กœ์„ธ์Šค์˜ ์Šค๋ ˆ๋“œ๋“ค์ด ํ•จ๊ป˜ ๊ณต์œ ํ•˜๋Š” ์˜์—ญ์ด๊ธฐ ๋•Œ๋ฌธ์— Thread-Safe์„ ๋ณด์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

์œ„ ๋‚ด์šฉ์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ์ƒ๊ฐํ•ด๋ณด๋ฉด,

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

 

 


๐ŸŒ€ ํด๋ž˜์Šค์™€ ๊ตฌ์กฐ์ฒด๋Š” ์–ธ์ œ ์–ด๋–ป๊ฒŒ ์จ์•ผํ• ๊นŒ์š” ?

 

๊ทธ๋ž˜๋„ ์—ฌ๊ธฐ๊นŒ์ง€ ์™”๋Š”๋ฐ.. ์–ธ์ œ ๋ญ˜ ์“ฐ๋Š”์ง€ ๊นŒ์ง€๋Š” ์•Œ๊ณ  ๊ฐ€์•ผ๋  ๊ฒƒ ๊ฐ™์•„์„œ... 

์ด ๋ถ€๋ถ„์€ ๊ณต์‹ ๋ฌธ์„œ์— ๋‚˜์™€์žˆ์Šต๋‹ˆ๋‹ค ! 

https://developer.apple.com/documentation/swift/choosing_between_structures_and_classes

 

Apple Developer Documentation

 

developer.apple.com

 

 

 

1. ๋””ํดํŠธ๋กœ ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š” 

: ๋‹ค๋ฅธ ์–ธ์–ด๋“ค๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ์Šค์œ„ํ”„ํŠธ์˜ ๊ตฌ์กฐ์ฒด๋Š” ํด๋ž˜์Šค์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ์š”์†Œ๋“ค์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฐ์‚ฐ/์ €์žฅ ํ”„๋กœํผํ‹ฐ, ๋ฉ”์„œ๋“œ, ํ”„๋กœํ† ์ฝœ ์ฑ„ํƒ ๋“ฑ ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ๋Š” ํด๋ž˜์Šค์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์Šค์œ„ํ”„ํŠธ์—์„œ๋Š” ๊ตฌ์กฐ์ฒด์—์„œ๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์Šค์œ„ํ”„ํŠธ์˜ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์˜ ๋ฐ์ดํ„ฐ๋“ค ์—ญ์‹œ๋„ ๋Œ€๋ถ€๋ถ„ ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด ๊ตฌํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

2. Objective-C์™€ ์ƒํ˜ธ ์ด์šฉ(Interoperability) ํ•ด์•ผ ํ•  ๋•Œ๋Š” ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

: Objective-C์—์„œ ์ง€์›ํ•˜๋Š” API๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๋•Œ๋Š” Objective-C์˜ ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•„ ์‚ฌ์šฉํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

3. ๊ณ ์œ ํ•œ ๊ฐ’์„ ์ œ์–ดํ•ด์•ผ ํ•  ๋•Œ๋Š” ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

: ํด๋ž˜์Šค๋Š” ์ฐธ์กฐ ํƒ€์ž…์ด๊ธฐ ๋•Œ๋ฌธ์— ์Šค์œ„ํ”„ํŠธ์—์„œ ๊ณ ์œ ํ•œ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฐธ์กฐ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด ์•ฑ์˜ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ํ•œ ์˜์—ญ์—์„œ ์ ์šฉํ•œ ์ˆ˜์ •์ด ๋‹ค๋ฅธ ์˜์—ญ์—์„œ๋„ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ํŒŒ์ผ ๊ด€๋ฆฌ๋‚˜ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ๋‹ค๋ฃฐ ๋•Œ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

4. ๊ณ ์œ ํ•œ ๊ฐ’์„ ์ œ์–ดํ•˜์ง€ ์•Š์„ ๋•Œ๋Š” ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

: ์™ธ๋ถ€์—์„œ ์ด๋ฏธ ๊ณ ์œ ์„ฑ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ์•ฑ ๋‚ด์—์„œ ๋ฐ์ดํ„ฐ์˜ ๊ณ ์œ ์„ฑ์„ ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

 

5. ์ƒ์†๊ณผ ๊ณต์œ  ์†์„ฑ์„ ๋ชจ๋ธ๋ง ํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” ๊ตฌ์กฐ์ฒด์™€ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

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

 

 


์Œ ์•„์ง์€ ์ด ๋ชจ๋“  ์ฐจ์ด์ ๋“ค์„ ๋‹ค ์ดํ•ดํ•˜๊ณ  ์ž˜ ์“ธ ์ˆ˜๋Š” ์—†์ง€๋งŒ.. ์•ž์œผ๋กœ๋Š” ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์กฐ๊ธˆ ๋” ์ƒ๊ฐ์„ ํ•˜๋ฉด์„œ ์“ฐ๊ฒŒ ๋  ๊ฒƒ ๊ฐ™๋„ค์š” ! ๊ทธ๋ฆฌ๊ณ  ์—ฌ๋Ÿฌ ํฌ์ŠคํŒ…์„ ์ฝ๋‹ค๋ณด๋‹ˆ ์„ฑ๋Šฅ์ด๋‚˜ ARC ๊ด€๋ จํ•œ ์–˜๊ธฐ๋“ค์ด ๋งŽ์ด ๋ณด์—ฌ์„œ ! ์ถ”๊ฐ€์ ์œผ๋กœ ARC์™€ ์—ฐ๊ด€์ง€์–ด์„œ ๋˜ ๊ณต๋ถ€ํ•ด๋ณผ ์˜ˆ์ • ! .. 

 

์“ฐ๋‹ค๋ณด๋‹ˆ ์ซŒ ๊ธธ์–ด์ง„ ๊ธฐ์ดˆ ๋ฌธ๋ฒ•..ํด๋ž˜์Šค์™€ ์ŠคํŠธ๋ŸญํŠธ..์—ฌ๊ธฐ๊นŒ์ง€.. 

 

 

 

 

[ ์˜ˆ์‹œ ์ฝ”๋“œ ์ถœ์ฒ˜ ๋ฐ ์ฐธ๊ณ  ์‚ฌ์ดํŠธ ]

 

๊ฐœ๋ฐœํ•˜๋Š” ์ •๋Œ€๋ฆฌ ์Šค์œ„ํ”„ํŠธ ๊ธฐ์ดˆ ๋ฌธ๋ฒ• - ์ธํ”„๋Ÿฐ | ํ•™์Šต ํŽ˜์ด์ง€

์ง€์‹์„ ๋‚˜๋ˆ„๋ฉด ๋ฐ˜๋“œ์‹œ ๋‚˜์—๊ฒŒ ๋Œ์•„์˜ต๋‹ˆ๋‹ค. ์ธํ”„๋Ÿฐ์„ ํ†ตํ•ด ๋‚˜์˜ ์ง€์‹์— ๊ฐ€์น˜๋ฅผ ๋ถ€์—ฌํ•˜์„ธ์š”....

www.inflearn.com

 

 

[Swift] Class์™€ Struct์˜ ์ฐจ์ด์ ?

์•ˆ๋…•ํ•˜์„ธ์š” Pingu์ž…๋‹ˆ๋‹ค.๐Ÿง ์˜ค๋Š˜์€ iOS ๊ฐœ๋ฐœ์— ์“ฐ์ด๋Š” Swift ์–ธ์–ด์—์„œ Class, Struct์˜ ์ฐจ์ด์ ์ด๋ผ๋Š” ์ฃผ์ œ๋ฅผ ๊ฐ€์ง€๊ณ  ๊ธ€์„ ์จ๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. iOS ๊ฐœ๋ฐœ์ž๋กœ ๋ฉด์ ‘์„ ์ค€๋น„ํ•˜๋‹ค ๋ณด๋ฉด Class, Struct์˜ ์ฐจ์ด์ ์ด๋ผ

icksw.tistory.com

 

 

[Swift] Struct vs. Class (1), ์–ธ์ œ ๋ญ˜ ์จ์•ผํ• ๊นŒ?

๊ตฌ์กฐ์ฒด๋ƒ ํด๋ž˜์Šค๋ƒ.. ๊ณ ๊ฒƒ์ด ๋ฌธ์ œ๋กœ๋‹ค.. ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๊ฑฐ๋‚˜ ํƒ€์ž…์„ ๋งŒ๋“ค ๋•Œ, ๊ตฌ์กฐ์ฒด์™€ ํด๋ž˜์Šค ์ค‘ ์–ด๋–ค ๊ฒƒ์„ ์‚ฌ์šฉํ• ์ง€ ๊ณ ๋ฏผํ•˜๊ณค ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ๊ตฌ์กฐ์ฒด์™€ ํด๋ž˜์Šค์˜ ์ฐจ์ด์— ๋Œ€ํ•ด์„œ

jeonyeohun.tistory.com

 

Comments