Structures and Classes - The Swift Programming Language (Swift 5.5)

class 는 reference type이다.

<aside> 💡 class A {int num = 0}, a=A(3), b=A(2), 클래스가 참조타입이면 a.num = 2 가 되야하지 않나요???

</aside>

처음에 헷갈렸던 부분이 스위프트에서 class는 reference타입이라는데, 각각의 객체들로 인스턴스화 했을 때, 각각의 속성값이 참조값인데 변하지 않는 부분이 헷갈렸다.

그러니까 클래스를 init하는 부분을 잘 이해하지 못했던 거 같다. (클래스가 참조값이라면서 왜? 초기화할 때마다 각각의 속성들은 서로 참조가 되지 않는 거지??🤔)

클래스는 참조타입이므로 초기화 말고, 대입 연산자를 사용할 때, 참조값으로 얕은 복사가 된다.

즉, A라는 클래스를 a로 초기화하고 b = a형식으로 전달하면, struct같은 경우에는 깊은 복사가 일어나고 class같은 경우에는 얕은복사가 일어난다.

결국 인스턴스화 하기 전까지는 메모리 영역에 실리지 않았고 (확실치 않음..) , 인스턴스화를 하는 순간 메모리에 실리는데 해당 객체를 사용할 때, 클래스 또는 구조체이냐에 따라서 value로 사용할지 ref로 사용할지가 나뉜다.

===

“동일한”(===)는 “같은”(==)과는 같은 의미가 아님.

Class A {var p = 0}
a = A()
b = a
a === b // true, 동일한 클래스의 인스턴스 주소를 참조하기 때문에
a == b // syntax error 
Binary operator '==' cannot be applied to two 'Value' operands