스위프트에서 제공하는 기본 자료형(정수, 문자열, 배열, 딕셔너리 등)과 열거형, 구조체는 인스턴스를 생성한 후 변수나 상수에 할당하거나 함수의 인자값으로 전달할 때 값을 복사하여 전달한다. 이 말은 우리가 생성하는 모든 구조체 인스턴스들이 상수나 변수에 할당될 때 복사된다는 뜻이다.
따라서 변수에 대입된 인스턴스와 기존의 인스턴스는 서로 독립적이다.
struct person {
var name : String
var age : Int
}
var aPerson = person(name : "hansol", age: 27) // 첫번째 구조체 인스턴스
print(aPerson.name) // hansol
var bPerson = aPerson // 두번째 구조체 인스턴스
bPerson.name = "sol"
print(aPerson.name) // 출력값: hansol
print(bPerson.name) // 출력값: sol
// 값이 변경되지않고 자신만의 인스턴스 데이터를 가진다.
메모리 주소 참조에 의한 전달 방식을 사용한다.
참조 타입은 변수나 상수에 할당되거나 함수의 인자값으로 전달될 때 값이 복사 되는게 아니라 현재 존재하는 인스턴스가 저장된 메모리 주소 정보가 전달된다.
class ReferenceType {
var property = 1
}
var third = ReferenceType() // 첫번째 클래스 인스턴스
var fourth = third // 두번째 클래스 인스턴스
fourth.property = 2
print(third.property) // 출력값: 2
print(fourth.property) // 출력값: 2
// 참조 타입이기 때문에 값이 같이 변경된다.
구조체/클래스 정리해주셔서 감사합니다!