[swift] Swift 구조체의 값 복사와 참조 복사에 대해 설명해주세요.

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

위 예제에서 p2p1의 값이 복사되었기 때문에 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"

위 예제에서 person2person1의 참조가 복사되었기 때문에 person2를 통해 name을 변경하면 person1에도 영향을 줍니다.

따라서, Swift에서는 구조체와 클래스를 사용할 때 값 복사와 참조 복사에 대해 주의해야 합니다. 값을 공유하고 싶을 때에는 클래스를 사용하고, 값의 복사본을 유지하고 싶을 때에는 구조체를 사용하는 것이 좋습니다.

이상으로 Swift 구조체의 값 복사와 참조 복사에 대해 알아보았습니다. 값 타입과 참조 타입의 동작 방식을 이해하면 변수 간의 데이터 전달 및 수정에 대해 더욱 효율적으로 관리할 수 있습니다.

참고 문헌: