๐ŸŽ iOS/Swift

[Swift] Structure

โ€ป convention: ๊ตฌ์กฐ์ฒด์˜ ์ด๋ฆ„์€ ๋Œ€๋ฌธ์ž, ๊ทธ ์•ˆ์— property๋‚˜ method๋“ค์€ ์†Œ๋ฌธ์ž, ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ๋Š” ์†Œ๋ฌธ์ž

instance ์ธ์Šคํ„ด์Šค

์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ์ดˆ๊ธฐํ™”๋ฅผ ํ•ด์•ผํ•˜๊ณ  ๊ฐ๊ฐ์˜ ์ธ์Šคํ„ด์Šค๋Š” structure์˜ ๋ชจ๋“  ํ”„๋กœํผํ‹ฐ์™€ ๊ธฐ๋Šฅ๋“ค์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.

struct User {
    
    static var currentUser: User = User(userName: "Default", email: "Default", age: 0)
    var userName: String
    var email: String
    var age: Int
    
    static func logIn(user: User){
        currentUser = user
    }
}

let me = User(userName: "Harry", email: "djkdf@naver.com", age: 16) // me ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ

 

initializers ์ด๋‹ˆ์…œ๋ผ์ด์ €

var string = String.init() // " "
var integer = Int.init() // 0
var bool = Bool.init() // false

var string = String() // " "

 

- Default value

์ƒˆ๋กœ์šด ์ธ์Šคํ„ด์Šค๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋ ค๋ฉด ๋ชจ๋“  ํ”„๋กœํผํ‹ฐ์— ๋Œ€ํ•ด์„œ ๊ฐ’์„ ์„ค์ •ํ•ด์•ผํ•œ๋‹ค. ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ํƒ€์ž… ์„ ์–ธ ์•ˆ์— ๊ธฐ๋ณธ๊ฐ’์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ธ๋ฐ ์ •ํ•ด์ ธ์žˆ๋Š” ๊ธฐ๋ณธ ๊ฐ’์„ ์„ค์ •ํ•ด๋†“์•„์•ผํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๋‹ค. ex. ์ž๋™์ฐจ์˜ ์ตœ์ดˆ ์ฃผํ–‰๊ฑฐ๋ฆฌ๋ฅผ 0์œผ๋กœ ์‹œ์ž‘ํ•˜๊ธฐ

struct Odometer {
	var count: Int = 0
}

let odmeter = Odometer()

 

- Memberwise Initializers

์ดˆ๊ธฐํ™”์‹œํ‚ฌ ๋•Œ ๋ชจ๋“  ๊ฐ’์„ ์„ค์ •ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค.

struct Car{
	var make: String
    var year: Int
    var color: Color
    var topSpeed: Int
}

let firstCar = Car(make: "Hyundae", year: 2021, color: .black, topSpeed: 120)

 

- Custom Initializers

์ดˆ๊ธฐํ™” ํ”„๋กœ์„ธ์Šค๋ฅผ customize ํ•  ์ˆ˜ ์žˆ๋‹ค. 

struct Temperature {
	var celsius: Double
    
    init(celsius: Double) {
    	self.celsius = celsius
    }
    
    init(fahrenheit: Double){ // customize initializer
    	celsius = (fahrenheit - 32)/1.8 // ํ™”์”จ
    }
}

let temperature = Temperature(fahrenhit: 212.0)

 

Instance Methods ์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œ

ํŠน์ • ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค์—๋งŒ ํ˜ธ์ถœ ํ•  ์ˆ˜ ์žˆ๋Š” ์ œํ•œ ๋œ ํ•จ์ˆ˜.

struct Size{
	var width: Double
    var height: Double
    
    func area() -> Double{
    	return width * height
    }
}

let someSize = Size(width: 10.0, height: 5.5)
let area = someSize.area()

 

Mutating Methods 

์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œ ์•ˆ์—์„œ ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ์—…๋ฐ์ดํŠธ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ mutating ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์ธ๋‹ค.

struct Odometer{
	var count: Int = 0
    
    mutating func increment(){
    	count += 1
    }
    
    mutating func reset(){
    	count = 0
    }
}

 

Stored Property

: ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ’์„ ์ „๋‹ฌํ•จ

Computed Property(Calculated Property)

: ํ”„๋กœํผํ‹ฐ ๊ฐ’์— access ํ•  ๋•Œ ๋งˆ๋‹ค ๊ทธ ๋•Œ ๊ทธ ๋•Œ ๊ณ„์‚ฐํ•ด์„œ return 

 

Copying

structure๋Š” value type์ด๋‹ค. (class๋Š” reference type) ๋”ฐ๋ผ์„œ, ์ธ์Šคํ„ด์Šค๋ฅผ ์–ด๋–ค ๋ณ€์ˆ˜์— ํ• ๋‹นํ•œ๋‹ค๊ฑฐ๋‚˜ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜๊ธฐ๋ฉด ๊ทธ ๊ฐ’์€ ๋ณต์‚ฌ๊ฐ€ ๋œ๋‹ค. ์ฆ‰, ํ• ๋‹นํ•œ ๋’ค์— ๊ฐ’์„ ๋ฐ”๊พธ๋ฉด ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ’์„ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.

 

↓ Struct Class ๋น„๊ต ↓

asxpyn.tistory.com/17?category=839455

 

[Swift] Struct์™€ Class

๊ตฌ์กฐ์ฒด์™€ ํด๋ž˜์Šค ๊ธฐ๋ณธ ํ˜•ํƒœ struct ๊ตฌ์กฐ์ฒด_์ด๋ฆ„{ ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์†Œ๋“œ๋“ค } class ํด๋ž˜์Šค_์ด๋ฆ„{ ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์†Œ๋“œ๋“ค } ๊ตฌ์กฐ์ฒด์™€ ํด๋ž˜์Šค์˜ ๊ณตํ†ต์  ์—ฌ๋Ÿฌ ๋ณ€์ˆ˜๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ์ปจํ…Œ์ด๋„ˆ ๋ฐ์ดํ„ฐ๋ฅผ ์šฉ๋„์—

asxpyn.tistory.com

 

Self

ํ˜„์žฌ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

 

Variable Properties

์ธ์Šคํ„ด์Šค ํ”„๋กœํผํ‹ฐ๋“ค์ด ๋ชจ๋‘ var์—ฌ๋„ ์ธ์Šคํ„ด์Šค ์ž์ฒด๊ฐ€ let์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ๋‹ค๋ฉด ์†์„ฑ์„ ํ•˜๋‚˜๋„ ๋ชป ๋ฐ”๊พผ๋‹ค.

structure ์•ˆ์— ์žˆ๋Š” ์ธ์Šคํ„ด์Šค ์„ ์–ธ, ์ธ์Šคํ„ด์Šค ๊ทธ ์ž์ฒด์˜ ์„ ์–ธ ๋ชจ๋‘ var ์ผ ๋•Œ๋งŒ ์†์„ฑ์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.

 

 

โ€ป Swift๋Š” Class๋ณด๋‹ค Structure ์‚ฌ์šฉ์„ ๊ถŒํ•œ๋‹ค.