본 내용은 '스위프트 프로그래밍' 책을 학습한 후 이를 바탕으로 작성한 글입니다.
구조체와 클래스는 프로그래머가 데이터를 용도에 맞게 묶어 표현하고자 할 때 유용하다
구조체의 인스턴스는 값 타입이다.
struct
키워드로 정의한다.struct 구조체 이름 {
프로퍼티와 메서드들
}
struct Food {
var name: String
var price: Int
}
var favoriteFood: Food = Food(name: "sushi", price: 10000)
favoriteFood.name = "pizza"
favoriteFood.price = 20000
print(favoriteFood.name, favoriteFood.price) //pizza 20000
let deliciousFood: Food = Food(name: "pasta", price: 20000)
deliciousFood.name = "steak" //오류 발생
deliciousFood.price = 50000 //오류 발생
클래스의 인스턴스는 참조 타입이다.
class
라는 키워드를 사용한다.class 클래스 이름 {
프로퍼티와 메서드들
}
class Book {
var title: String = ""
var author: String = ""
}
let myBook: Book = Book()
myBook.title = "Harry Potter"
myBook.author = "Joan K. Rowling"
print(myBook.title, myBook.author) //Harry Potter Joan K. Rowling
deinit
라는 메서드가 호출된다.deinit
메서드는 클래스당 하나만 구현할 수 있으며, 매개변수와 반환 값을 가질 수 없다.deinit
메서드 안에는 인스턴스가 메모리에서 해제되기 직전에 처리할 코드를 넣어준다.class Book {
var title: String = ""
var author: String = ""
deinit {
print("인스턴스가 소멸됩니다.")
}
}
var favoriteBook: Book? = Book()
favoriteBook = nil
//인스턴스가 소멸됩니다.
deinit
메서드는 클래스의 인스턴스에서만 활용할 수 있다.애플은 가이드라인에서 다음 조건 중 하나 이상에 해당한다면 구조체를 사용할 것을 권장하고 있다.