Deep_Dev
article thumbnail

 

 

๊ตฌ์กฐ์ฒด์™€ ํด๋ž˜์Šค 

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

 

๊ตฌ์กฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค =  ๊ฐ’ ํƒ€์ž…

ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค = ์ฐธ์กฐ ํƒ€์ž…

 

๊ตฌ์กฐ์ฒด

๊ตฌ์กฐ์ฒด์˜ ์ •์˜ 

 struct ํ‚ค์›Œ๋“œ๋กœ ์ •์˜

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

BaicInformation ๊ตฌ์กฐ์ฒด ์ •์˜

struct BasicInformation{
    var name: String
    var age: Int
}

 

๊ตฌ์กฐ์ฒด ์ธ์Šคํ„ด์Šค์˜ ์ƒ์„ฑ ๋ฐ ์ดˆ๊ธฐํ™”

๊ตฌ์กฐ์ฒด ์ •์˜๋ฅผ ๋งˆ์นœ ํ›„, ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•˜๊ณ ์ž ํ•  ๋•Œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ๋ฉค๋ฒ„์™€์ด์ฆˆ ์ด๋‹ˆ์…œ๋ผ์ด์ฆˆ๋ฅผ ์‚ฌ์šฉ

 

์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์ดˆ๊ธฐํ™”๋œ ํ›„ ํ”„๋กœํผํ‹ฐ ๊ฐ’์— ์ ‘๊ทผํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋งˆ์นจํ‘œ . ์‚ฌ์šฉ

 

๊ตฌ์กฐ์ฒด๋ฅผ ์ƒ์ˆ˜ let์œผ๋กœ ์„ ์–ธํ•˜๋ฉด ์ธ์Šคํ„ด์Šค ๋‚ด๋ถ€์˜ ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ณ , ๋ณ€์ˆ˜ var๋กœ ์„ ์–ธํ•˜๋ฉด ๋‚ด๋ถ€์˜ ํ”„๋กœํผํ‹ฐ๊ฐ€ var๋กœ ์„ ์–ธ๋œ ๊ฒฝ์šฐ์— ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค.

 

์˜ˆ์‹œ

// ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„(name, age)์œผ๋กœ ์ž๋™ ์ƒ์„ฑ๋œ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์กฐ์ฒด ์ƒ์„ฑ
var yagomInfo: BasicInformation = BasicInformation(name: "yagom", age: 99)
yagomInfo.age = 100	// ๋ณ€๊ฒฝ๊ฐ€๋Šฅ
yagomInfo.name = "Seba"	// ๋ณ€๊ฒฝ๊ฐ€๋Šฅ

// ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„(name, age)์œผ๋กœ ์ž๋™ ์ƒ์„ฑ๋œ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌ์กฐ์ฒด ์ƒ์„ฑ
let yagomInfo: BasicInformation = BasicInformation(name: "Seba", age: 99)
sebaInfo.age = 100	// ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€! ์˜ค๋ฅ˜
jennyInfo.age = 100 // ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€!

 

ํด๋ž˜์Šค

์Šค์œ„ํ”„ํŠธ์˜ ํด๋ž˜์Šค๋Š” ๋ถ€๋ชจํด๋ž˜์Šค๊ฐ€ ์—†๋”๋ผ๋„ ์ƒ์† ์—†์ด ๋‹จ๋…์œผ๋กœ ์ •์˜ ๊ฐ€๋Šฅ

 

ํด๋ž˜์Šค ์ •์˜

class ํ‚ค์›Œ๋“œ๋กœ ์ •์˜

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

 

๋‹ค๋งŒ, ํด๋ž˜์Šค๋Š” ์ƒ์†๋ฐ›์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ƒ์†๋ฐ›์„ ๋•Œ๋Š” ํด๋ž˜์Šค ์ด๋ฆ„ ๋’ค์— ์ฝœ๋ก (:)์„ ์จ์ฃผ๊ณ  ๋ถ€๋ชจํด๋ž˜์Šค ์ด๋ฆ„์„ ๋ช…์‹œํ•œ๋‹ค.

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

 

Person ํด๋ž˜์Šค ์ •์˜

class Person{
    var height: Float = 0.0
    var weight: Float = 0.0
}

 

ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค์˜ ์ƒ์„ฑ๊ณผ ์ดˆ๊ธฐํ™” 

ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•œ ํ›„, ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ดˆ๊ธฐํ™”ํ•˜๊ณ ์ž ํ•  ๋•Œ๋Š” ๊ธฐ๋ณธ์ ์ธ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

Person ํด๋ž˜์Šค์—์„œ๋Š” ํ”„๋กœํผํ‹ฐ์˜ ๊ธฐ๋ณธ๊ฐ’์ด ์ง€์ •๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ์ „๋‹ฌ์ธ์ž๋ฅผ ํ†ตํ•˜์—ฌ ๋”ฐ๋กœ ์ดˆ๊นƒ๊ฐ’์„ ์ „๋‹ฌํ•ด์ฃผ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 

์ธ์Šคํ„ด์Šค์™€ ๊ฐ์ฒด
์ธ์Šคํ„ด์Šค = ๊ฐ์ฒด
๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ๋Š” ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ์ฒด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ๋ฌผ๋ก  ์Šค์œ„ํ”„ํŠธ์—์„œ๋„ ๊ฐ์ฒด๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ์ด ํ‹€๋ฆฐ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ์Šค์œ„ํ”„ํŠธ ๊ณต์‹ ๋ฌธ์„œ์—๋Š” ์ข€ ๋” ํ•œ์ •์ ์ธ ์ธ์Šคํ„ด์Šค๋ผ๋Š” ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์ดˆ๊ธฐํ™”๋œ ํ›„ ( ์ด๋‹ˆ์…œ๋ผ์ด์ฆˆ ๋œ ํ›„ ) ํ”„๋กœํผํ‹ฐ ๊ฐ’์— ์ ‘๊ทผํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋งˆ์นจํ‘œ . ๋ฅผ ์‚ฌ์šฉ

 

๊ตฌ์กฐ์ฒด์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋Š” ์ฐธ์กฐ ํƒ€์ž…์ด๋ฏ€๋กœ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์ˆ˜ let ์œผ๋กœ ์„ ์–ธํ•ด๋„

๋‚ด๋ถ€ ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Person ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๋ฐ ์‚ฌ์šฉ

var yagom: Person = Person()
yagom.height = 123.4
yagom.weight = 123.4

let jenny: Person = Person()
jenny.height = 123.4
jenny.weight = 123.4

 

ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค์˜ ์†Œ๋ฉธ

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

์†Œ๋ฉธ๋˜๊ธฐ ์ง์ „, deinit ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ 

 

deinit : ๋””์ด๋‹ˆ์…œ๋ผ์ด์ €

deinit ๋ฉ”์„œ๋“œ๋Š” ํด๋ž˜์Šค๋‹น ํ•˜๋‚˜๋งŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ๋ฐ˜ํ™˜ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

 

Person ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ๋ฐ ์†Œ๋ฉธ

class Person{
    var height: Float = 0.0
    var weight: Float = 0.0
    
    deinit{
    	print("Person ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์†Œ๋ฉธ๋ฉ๋‹ˆ๋‹ค.")
    }
}

var yagom: Person? = Person()
yagom = nil // Person ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์†Œ๋ฉธ๋ฉ๋‹ˆ๋‹ค.

 

 

๊ตฌ์กฐ์ฒด์™€ ํด๋ž˜์Šค์˜ ์ฐจ์ด

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

 

๊ฐ’ ํƒ€์ž…๊ณผ ์ฐธ์กฐ ํƒ€์ž…

๊ฐ’ ํƒ€์ž…๊ณผ ์ฐธ์กฐ ํƒ€์ž…์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์  : ๋ฌด์—‡์ด ์ „๋‹ฌ๋˜๋Š๋ƒ

์ฆ‰, ๊ฐ’ ํƒ€์ž…์˜ ๊ฐ’ ์ „๋‹ฌ์€ ๊ฐ’์ด ๋ณต์‚ฌ๋˜์–ด ์ „๋‹ฌ๋˜๊ณ , ์ฐธ์กฐ ํƒ€์ž…์˜ ๊ฐ’์ด ์ „๋‹ฌ๋  ๋•Œ๋Š” ๊ฐ’์„ ๋ณต์‚ฌํ•˜์ง€ ์•Š๊ณ  ์ฐธ์กฐ(์ฃผ์†Œ)๊ฐ€ ์ „๋‹ฌ

 

๊ฐ’ ํƒ€์ž…๊ณผ ์ฐธ์กฐํƒ€์ž…์˜ ์ฐจ์ด

struct BasicInformation{
    let name: String
    var age: Int
}

var yagomInfo: BasicInformation = BasicInformation(name: "yagom", age: 99)
yagomInfo.age = 100

// yagomInfo์˜ ๊ฐ’์„ ๋ณต์‚ฌํ•˜์—ฌ ํ• ๋‹นํ•œ๋‹ค.
var friendInfo: BasicInformation = yagomInfo

print("yagom's age: \(yagomInfo.age)") // 100 
print("friend's age: \(friendInfo.age)") // 100

friendInfo.age = 999

print("yagom's age: \(yagomInfo.age)") // 100 - yagom์˜ ๊ฐ’์€ ๋ณ€๋™ ์—†๋‹ค.
print("friend's age: \(friendInfo.age)")
// 999 - friendInfo๋Š” yagomInfo์˜ ๊ฐ’์„ ๋ณต์‚ฌํ•ด์™”๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๊ฐœ์˜ ๊ฐ’์„ ๊ฐ–๋Š”๋‹ค.

class Person{
    var height: Float = 0.0
    var weight: Float = 0.0
}

var yagom: Person = Person()
var friend: Person = yagom // yagom์˜ ์ฐธ์กฐ๋ฅผ ํ• ๋‹นํ•œ๋‹ค.

print("yagom's height: \(yagom.height)") // 0.0
print("friend's height: \(friend.height)") // 0.0

friend.height = 185.5
print("yagom's height: \(yagom.height)")
// 185.5 - friend๋Š” yagom์„ ์ฐธ์กฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ’์ด ๋ณ€๊ฒฝ๋œ๋‹ค.

print("friend's height: \(friend.height)")
// 185.5 - ์ด๋ฅผ ํ†ตํ•ด yagom์ด ์ฐธ์กฐํ•˜๋Š” ๊ณณ๊ณผ friend๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ๊ณณ์ด ๊ฐ™์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

func changeBasicInfo(_ info: BasicInformation){
    var copiedInfo: BasicInformation = info
    copiedInfo.age = 1
}
func changePersonInfo(_ info: Person){
    info.height = 155.3
}

// changeBasicInfo(_:)๋กœ ์ „๋‹ฌ๋˜๋Š” ์ „๋‹ฌ์ธ์ž๋Š” ๊ฐ’์ด ๋ณต์‚ฌ๋˜์–ด ์ „๋‹ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์—
// yagomInfo์˜ ๊ฐ’๋งŒ ์ „๋‹ฌ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
changeBasicInfo(yagomInfo)
print("yagom's age: \(yagomInfo.age)") // 100

// changePersonInfo(_:)์˜ ์ „๋‹ฌ์ธ์ž๋กœ yagom์˜ ์ฐธ์กฐ๊ฐ€ ์ „๋‹ฌ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์—
// yagom์ด ์ฐธ์กฐํ•˜๋Š” ๊ฐ’๋“ค์— ๋ณ€ํ™”๊ฐ€ ์ƒ๊ธด๋‹ค.
changePersonInfo(yagom)
print("yagom's height: \(yagom.height)") // 155.3

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

 

๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

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

์ด๋Ÿฐ ๋ช‡๊ฐ€์ง€ ์ƒํ™ฉ์„ ์ œ์™ธํ•˜๋ฉด ํด๋ž˜์Šค๋กœ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค.