자바의 참조타입은 Call by Value로 동작한다길래, swift의 개념도 흔들려서 이번기회에 꽉 잡기위해 포스팅한다.
누구나 알고 있겠지만 Call by Value, Call by Reference를 정의 하면
Call by Value
값을 복사하여 처리한다
Call by Reference
주소를 참조하여 처리한다.
여기서 헷갈린 개념이, 그러면 참조 타입은, 주소 값을 가지고 있고, 다른 변수에 할당 할 때, 이 값을 복사해서 다른 변수에 할당하는 것인지를 헷갈렸다.
결론부터 말하자면, 주소를 복사해서 다른 변수에 할당하는 것이 아닌, 참조 그 자체를 복사한다. 즉 주소값을 복사하는게 아니다.
class A {
var a: Int = 0
}
var classA = A()
var classB = classA
그림으로 표현하면 변수 classA는 힙 메모리에서 A객체의 "참조"를 가지고 있는 것이고
classA는 classB에 값을 할당할 때, 주소값을 할당하는게 아닌 객체의 실 메모리 주소를 가리키고 있는 "참조" 그 자체를 복사하는 것. 따라서 call by reference로 동작 된다.
자바는 이와 다르게 참조 타입을 다른 변수에 할당 할 때, 참조가 가리키는 주소값이 복사되어서 call by value로 동작 된다고 한다.
'iOS > swift' 카테고리의 다른 글
경로의 크기에 맞추어 지도 이미지 생성하기 (MKMapView, MKMapSnapshotter) (0) | 2023.05.12 |
---|---|
swift 참조 타입과 값 타입, 함수 파라미터의 관계 (0) | 2023.04.27 |
CAShapeLayer 특정 뷰의 중심에 맞추기 (0) | 2023.03.11 |
프로토콜 지향 프로그래밍을 이용한 프로젝트를 진행해보자 (2) (0) | 2022.08.14 |
프로토콜 지향 프로그래밍을 이용한 프로젝트를 진행해보자 (1) (0) | 2022.08.13 |