Swift에서는 값 타입인 구조체(Struct)와 참조 타입인 클래스(Class)를 사용할 수 있습니다. 구조체는 값 타입으로 동작하고, 클래스는 참조 타입으로 동작합니다. 이는 구조체와 클래스를 사용할 때 값 복사와 참조 복사가 어떻게 이루어지는지를 이해하는 데 중요합니다.
구조체(Struct)의 값 복사
구조체는 값 타입이기 때문에 변수 간에 값을 복사하여 전달합니다. 예를 들어, 구조체를 변수에 할당하거나 함수에 인자로 전달할 때, 그 값이 복사되어 전달됩니다. 따라서, 하나의 변수를 수정해도 원본 변수에는 영향을 주지 않습니다.
struct Point {
var x: Int
var y: Int
}
var p1 = Point(x: 10, y: 20)
var p2 = p1 // p1의 값을 복사하여 p2에 할당
p2.x = 30
print(p1.x) // 출력: 10
print(p2.x) // 출력: 30
위 예제에서 p2
에 p1
의 값이 복사되었기 때문에 p2.x
를 변경해도 p1.x
에는 영향을 주지 않습니다.
클래스(Class)의 참조 복사
클래스는 참조 타입이기 때문에 변수 간에는 참조를 복사하여 전달합니다. 변수에 할당되는 값은 객체의 참조이며, 이 객체가 실제 데이터를 가지고 있습니다. 따라서 변수 간에 객체의 참조만을 복사하므로, 하나의 변수를 수정하면 다른 변수에도 영향을 줍니다.
class Person {
var name: String
init(name: String) {
self.name = name
}
}
var person1 = Person(name: "Alice")
var person2 = person1 // person1의 참조를 person2에 할당
person2.name = "Bob"
print(person1.name) // 출력: "Bob"
print(person2.name) // 출력: "Bob"
위 예제에서 person2
에 person1
의 참조가 복사되었기 때문에 person2
를 통해 name
을 변경하면 person1
에도 영향을 줍니다.
따라서, Swift에서는 구조체와 클래스를 사용할 때 값 복사와 참조 복사에 대해 주의해야 합니다. 값을 공유하고 싶을 때에는 클래스를 사용하고, 값의 복사본을 유지하고 싶을 때에는 구조체를 사용하는 것이 좋습니다.
이상으로 Swift 구조체의 값 복사와 참조 복사에 대해 알아보았습니다. 값 타입과 참조 타입의 동작 방식을 이해하면 변수 간의 데이터 전달 및 수정에 대해 더욱 효율적으로 관리할 수 있습니다.
참고 문헌: