Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

Swift/Swift BASIC

[Swift] ๊ธฐ์ดˆ ๋ฌธ๋ฒ• - Struct์™€ Class (feat.์ฐจ์ด์ )

๊ฐ์ž ๐Ÿฅ” 2022. 1. 16. 14:47
๋ฐ˜์‘ํ˜•

 

์•ˆ๋…•ํ•˜์„ธ์š”! ๊ฐ์ž์ž…๋‹ˆ๋‹ค. ์š”์ฆ˜ ๋งฅ๋ถ์ด ๋„์ฐฉํ•˜๊ธฐ ์ „์— ์†์„ฑ์œผ๋กœ ์Šค์œ„ํ”„ํŠธ ๋ฌธ๋ฒ• ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ ์žˆ๋Š”๋ฐ,, 2์›” ์ดˆ์— ๋ฐฐ์†ก๋ ๊ฑฐ๋ผ๊ณ  ํ–ˆ๋˜ ๋งฅ๋ถ์ด ์ดํ‹€ ๋’ค์— ์˜ฌ๊ฒƒ ๊ฐ™์•„์š”... *_* ๋„ˆ๋ฌด ์‹ ๋‚ฉ๋‹ˆ๋‹ค. ์–ผ๋ฅธ ๊ธฐ์ดˆ ํƒ„ํƒ„ํ•˜๊ฒŒ ์Œ“๊ณ  ๊ฐœ๋ฐœํ•˜๊ณ ์‹ถ๋„ค์š”! ๊ทธ๋Ÿผ go!

Struct์™€ Class

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

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

 

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

struct์˜ ๊ธฐ๋ณธ ํ˜•ํƒœ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค. struct ๋ธ”๋ก์•ˆ์— ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•  ์ˆ˜์žˆ๋‹ค. ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ํ•ฉ์ณ์„œ struct์˜ ๋งด๋ฒ„๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค. ๋งด๋ฒ„๋ณ€์ˆ˜๋ผ๊ณ  ํ•˜๋ฉด ํ”„๋กœํผํ‹ฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

struct ๊ตฌ์กฐ์ฒด ์ด๋ฆ„ {
	ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ
}

struct ๊ตฌ์กฐ์ฒด์˜ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

์œ ์ €์˜ ์ •๋ณด๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ตฌ์กฐ์ฒด๋ฅผ ์ •์˜ํ•ด๋ณด์ž. ๋Œ€๋ถ€๋ถ„์˜ ๋ณ€์ˆ˜๋Š” ์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š”๊ฒŒ ๊ทœ์น™?์˜ˆ์˜?์ง€๋งŒ, ํด๋ž˜์Šค๋‚˜ ๊ตฌ์กฐ์ฒด๋Š” ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š”๊ฒƒ์ด ๊ทœ์น™?์˜ˆ์˜?๋ผ๊ณ  ํ•œ๋‹ค. ใ…Žใ…Ž ์ด๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ์ด์œ ์ด๋ฆ„์„ ๋งŒ๋“ค์–ด๋ณด์ž!

struct User {
	var nickname: String
    var age: Int
}

/* ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด์ค˜์•ผํ•œ๋‹ค
์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๊ตฌ์กฐ์ฒด๋‚˜ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ์œ„ํ•ด์„œ
๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ์ƒ์„ฑ๋œ ํด๋ž˜์Šค , ๊ตฌ์กฐ์ฒด์˜ ์‹ค์ฒด ๋ผ๊ณ  ์ƒ๊ฐํ•˜์ž. */

var user = User(nickname: "potata", age: 25)
user.nickname // ์ด๋Ÿฐ์‹์œผ๋กœ ์ธ์Šคํ„ด์Šค์˜ nickname๊ณผ age์— ์ ‘๊ทผํ•  ์ˆ˜์žˆ๋‹ค.

// ํ”„๋กœํผํ‹ฐ ๊ฐ’ ๋ณ€๊ฒฝ
user.nickname = "ABC"
user.nickname
// prints "ABC" ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค.

์ฐธ๊ณ ) user ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•˜๋ฉด์„œ ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ• ๋•Œ ์ด๋ ‡๊ฒŒ ์ž๋™์œผ๋กœ ๋œจ๊ฒŒ ๋œ๋‹ค. ๊ตฌ์กฐ์ฒด ์•ˆ์— ๋”ฐ๋กœ ์ƒ์„ฑ์ž๋ฅผ ์„ ์–ธ์‹œ์ผœ์ฃผ์ง€ ์•Š์•˜๋Š”๋ฐ, ์ƒ์„ฑ์ž๋กœ ๊ฐ’์„ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋‚˜์˜จ๋‹ค. ๊ตฌ์กฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ”„๋กœํผํ‹ฐ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ ์žํ•  ๋•Œ ๋”ฐ๋กœ ์ƒ์„ฑ์ž๋ฅผ ์•ˆ๋งŒ๋“ค์–ด์ค˜๋„ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒ์„ฑ์ž๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค. ์ด๋ ‡๊ฒŒ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ์ƒ์„ฑ์ž์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๊ตฌ์กฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„์œผ๋กœ ์ž๋™ ์ง€์ •๋œ๋‹ค.

 

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

struct User {
	var nickname: String
    var age: Int
	
    func information() {
    	print("\(nickname), \(age)")
	}
}
๋ฐ˜์‘ํ˜•

๊ตฌ์กฐ์ฒด ์•ˆ์— ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๋ฉด ํ”„๋กœํผํ‹ฐ๊ฐ’์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ . ์ ์œผ๋กœ ์—ฐ๊ฒฐํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

var user = User(nickname: "potato", age: 25)

user.information()
// User๊ตฌ์กฐ์ฒด์˜ ์ •์˜์™€ information ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด์„œ ๋‹‰๋„ค์ž„๊ณผ ๋‚˜์ด๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.
// prints "potato, 25"

 

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

ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๊ตฌ์กฐ์ฒด์™€ ๋งค์šฐ ๋น„์Šทํ•˜๋‹ค. ํด๋ž˜์Šค๋Š” classํ‚ค์›Œ๋“œ๋กœ ์ •์˜ํ•˜๊ณ  class ๋ธ”๋ก์•ˆ์— ํ”„๋กœํผํ‹ฐ๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค. 

class ํด๋ž˜์Šค ์ด๋ฆ„ {
	ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ
}

 ๊ฐ•์•„์ง€์˜ ์ •๋ณด๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•ด๋ณด์ž.

class Dog {
	var name: String = ""
    var age: Int = 0
    
    init() {
    
    }
    
    //๋ฉ”์„œ๋“œ ์ •์˜
    func introduce() {
    	print("name \(name), age \(age)")
	}
}

var dog = Dog() // ์ธ์Šคํ„ด์Šคํ™” (์ด๋ ‡๊ฒŒ ๋ณ€์ˆ˜์— ๊ตฌ์กฐ์ฒด,ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•ด์ค€๊ฒƒ์„ ์ธ์Šคํ„ด์Šค๋ผ๊ณ ํ•œ๋‹ค.
dog.name = "coco"
dog.age = 3

dog.name // prints "coco"
dog.age // prints "3"

โ–ท class์—์„œ๋Š” ์ƒ์„ฑ์ž๋ฅผ ์ •์˜ํ•ด์ค˜์•ผํ•œ๋‹ค. ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•˜๊ณ ์žํ• ๋•Œ ๊ธฐ๋ณธ์ ์ธ ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ƒ์„ฑ์ž๋ฅผ ๋”ฐ๋กœ ์ •์˜ ์•ˆํ•ด์ค˜๋„ init() {  } ์ƒ์„ฑ์ž๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค. ์œ„ ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๊ฐ’์„ ์ดˆ๊ธฐํ™”ํ•ด์ฃผ์—ˆ๋Š”๋ฐ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด์„œ๋„ ๊ฐ’์„ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ดˆ๊ธฐํ™” ๊ตฌ๋ฌธ์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ๊ธ€์—์„œ ํฌ์ŠคํŒ…ํ•˜๊ฒ ๋‹ค. 

๊ตฌ์กฐ์ฒด์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ . ์ ์„ ์ด์šฉํ•ด์„œ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์ฃผ๋ฉด๋œ๋‹ค.

dog.introduce()
// prints "name coco, age 3"

 

Struct์™€ Class ๊ณตํ†ต์  (๊ตฌ์กฐ์ฒด์™€ ํด๋ž˜์Šค์˜ ๊ณตํ†ต์ )

  • ๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜์˜ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ํ”„๋กœํผํ‹ฐ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ•จ์ˆ˜(๋ฉ”์„œ๋“œ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
  • init ๋ฉ”์„œ๋“œ๋ฅผ ๋‘์–ด์„œ ๊ฐ์ฒด๋ฅผ ์›ํ•˜๋Š” ํ˜•ํƒœ๋กœ ์„ค์ •ํ•ด์ฃผ๋Š” ์ดˆ๊ธฐํ™” ๋ธ”๋ก์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐ์ฒด ํ•จ์ˆ˜์  ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ํ™•์žฅ(extends) ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์†์„ฑ๊ฐ’์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š” ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค. (get, set)
  • ํŠน์ • ํ˜•์‹์˜ ํ•จ์ˆ˜์  ํ‘œ์ค€์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Struct์™€ Class ์ฐจ์ด์  (๊ตฌ์กฐ์ฒด์™€ ํด๋ž˜์Šค์˜ ์ฐจ์ด์ )

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

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

โ–ถ Struct (๊ตฌ์กฐ์ฒด)

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

1) ๊ฐ’ ํƒ€์ž…, ์ฐธ์กฐ ํƒ€์ž…์˜ ์ฐจ์ด ์‚ดํŽด๋ณด๊ธฐ

dev_pingu ๋‹˜์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ๊ธ€ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค :) 

class SimpleClass {
	var count: Int = 0
    
    deinit {
    	print("ํ• ๋‹น ํ•ด์ œ")
	}
}

struct SimpleStruct {
	var count: Int = 0
}

 

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

var class1 = SimpleClass()
var class2 = class1
var class3 = class1

class3.count = 3

print(class1.count)
// prints "3"

๋จผ์ € SimpleClass ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค์— ์ง€์†์ ์„ ๋„ฃ์–ด์ฃผ๊ณ , ๋งˆ์ง€๋ง‰์— class3์˜ ๊ฐ’์„ ๋ณ€๊ฒฝ์‹œ์ผœ ์ฃผ์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ ๋งˆ์ง€๋ง‰์— class1์„ printํ•ด๋ณด๋‹ˆ class3์„ ๋ณ€๊ฒฝํ•œ ๊ฐ’์ธ 3์ด ์ถœ๋ ฅ๋˜๋”๋ผ. ์ด์ œ ์œ„์—์„œ ๋งํ•œ "๋ฉ”๋ชจ๋ฆฌ๋งŒ ๋ณต์‚ฌ"๋ผ๋Š” ๋ง์ด ์ดํ•ด๊ฐ€๋œ๋‹ค. ํด๋ž˜์Šค๋Š” ์ฐธ์กฐ ํƒ€์ž…์ด๋ผ ๊ฐ™์€ ํด๋ž™์Šค ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•œ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ณ€๊ฒฝ์‹œํ‚ค๋ฉด ์ฐธ์กฐ๋œ ๊ฐ์ฒด์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๊ธฐ ๋–„๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ณต์‚ฌํ–ˆ๋‹ค๊ณ  ํ‘œํ˜„ํ•œ ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿผ ์ด์ œ ๊ตฌ์กฐ์ฒด๋ฅผ ์‚ดํŽด๋ณด์ž.

var strunct1 = SimpleStruct()
var struct2 = struct1
var struct3 = struct1

struct2.count = 2
struct3.count = 3

print(struct1.count) // prints "0"
print(struct2.count) // prints "2"
print(struct3.count) // prints "3"

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

 

๋งˆ๋ฌด๋ฆฌ

์ถ”๊ฐ€๋กœ ์•Œ์•„๋ด์•ผํ•  ๊ฐœ๋…๋“ค์ด ๋งŽ์Šต๋‹ˆ๋‹ค. ARC๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š”๊ฒŒ ๋ญ”์ง€, ๋ฉ”๋ชจ๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ํ• ๋‹นํ•˜๋Š”์ง€ ๋“ฑ์— ๋Œ€ํ•œ ๊ฐœ๋… ๋ง์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๊ธฐ์ดˆ ๋ฌธ๋ฒ• ๋ง๊ณ  ์ถ”ํ›„ ๋‹ค๋ฅธ ํฌ์ŠคํŒ…์œผ๋กœ ์ฐพ์•„๋ต™๋„๋ก ํ• ๊ฒŒ์š”. ์ œ๊ฐ€ ์ฐธ๊ณ ํ•œ ํ•‘๊ตฌ๋‹˜์˜ ๋ธ”๋กœ๊ทธ๋Š” ์•„๋ž˜ ๋งํฌ์— ๊ฑธ์–ด๋‘๊ฒ ์Šต๋‹ˆ๋‹ค.

https://icksw.tistory.com/256

 

๋ฐ˜์‘ํ˜•