Swift에서 구조체와 열거형은 강력한 데이터 타입으로, 이들을 효율적으로 저장하고 전송하는 방법을 알고 있어야 합니다.
구조체 (Struct)
구조체는 값을 저장하거나 어떠한 종류의 데이터도 포함할 수 있는 타입입니다. 구조체는 일반적으로 관련된 데이터를 묶어서 표현하고자 할 때 유용합니다. 구조체에는 변수와 상수를 포함시킬 수 있으며, 함수도 추가할 수 있습니다.
구조체의 인스턴스를 저장하려면 NSKeyedArchiver
를 이용하여 직렬화하고, NSKeyedUnarchiver
를 이용하여 역직렬화해야 합니다. 직렬화(serialization)는 데이터를 그대로 저장할 수 있는 형태로 변환하는 작업이며, 역직렬화(deserialization)는 저장된 데이터를 다시 사용할 수 있는 형태로 변환하는 작업입니다.
예를 들어, 구조체 Person
을 저장하고 다시 불러오는 방법은 다음과 같습니다.
struct Person: Codable {
var name: String
var age: Int
}
let person = Person(name: "John", age: 30)
do {
let encodedData = try JSONEncoder().encode(person)
UserDefaults.standard.set(encodedData, forKey: "personData")
if let decodedData = UserDefaults.standard.object(forKey: "personData") as? Data {
let decodedPerson = try JSONDecoder().decode(Person.self, from: decodedData)
print("Decoded person:", decodedPerson)
}
} catch {
print("Error:", error)
}
열거형 (Enum)
열거형은 관련된 값들의 그룹을 정의할 때 사용되며, 연관값(associated values)을 가질 수 있습니다. 열거형은 주로 유사한 종류의 값들을 묶어서 사용하고자 할 때 유용합니다.
열거형의 인스턴스를 저장하고 불러올 때에도 NSKeyedArchiver
와 NSKeyedUnarchiver
를 사용할 수 있습니다.
다음은 열거형 CompassDirection
을 저장하고 다시 불러오는 예시입니다.
enum CompassDirection: String, Codable {
case north, south, east, west
}
let direction = CompassDirection.north
do {
let encodedData = try JSONEncoder().encode(direction)
UserDefaults.standard.set(encodedData, forKey: "directionData")
if let decodedData = UserDefaults.standard.object(forKey: "directionData") as? Data {
let decodedDirection = try JSONDecoder().decode(CompassDirection.self, from: decodedData)
print("Decoded direction:", decodedDirection)
}
} catch {
print("Error:", error)
}
위의 예제에서 Codable
프로토콜은 JSONEncoder
와 JSONDecoder
를 이용하여 구조체와 열거형을 인코딩하고 디코딩할 수 있도록 합니다.
구조체와 열거형의 저장 및 전송 방법에 대한 자세한 내용은 Swift 공식 문서를 참고하세요.
위에 제시한 예제를 통해, 구조체와 열거형을 저장하고 전송하는 방법에 대해 알아보았습니다. 앱 개발을 위해 구조체와 열거형을 효과적으로 활용할 수 있도록 연구해보시기 바랍니다.