[객체지향]Swift에서 구조체(struct)와 클래스(class)의 차이
메모리 저장 방식의 차이
클래스
클래스는 그 인스턴스를 힙에 저장한다.
클래스 초기화 시, 클래스는 인스턴스가 저장된 힙 데이터에 대한 메모리 주소를 변수에 저장한다.
구조체
구조체는 그 인스턴스를 스택 프레임에 저장한다.
구조체 초기화 시, 구조체는 인스턴스 자체를 변수에 저장한다.
복사할 때의 차이점
클래스
클래스의 복사는 참조형식(Referency Type)이다.
클래스의 복사가 이루어질 때에는 클래스의 인스턴스를 가리키는 메모리 주소가 복사되는 것이다.
따라서 새로운 복사본이 생성되지 않는다.
구조체
구조체의 복사는 값 형식(Value Type)이다.
구조체의 복사가 이루어질 때에는 구조체 인스턴스 자체가 복사된다.
따라서 새로운 복사본이 생겨난다.
let을 사용할 때의 차이점
클래스
클래스를 선언하는 변수에 let을 사용하면 클래스의 인스턴스를 가리키는 주소값이 불변함을 뜻하기 때문에 해당 변수는 가장 처음 선언된 인스턴스의 메모리 주소만을 가리킬 수 있게 된다.
그러나 가리키고 있는 인스턴스를 변경하지 못할 뿐, 인스턴스 내의 멤버들은 수정 가능하다.
구조체
구조체를 선언하는 변수에 let을 사용하면 구조체 인스턴스 자체가 변경불가하게 된다.
따라서 구조체 내의 변수들도 let 취급을 받게 되어 변경이 불가능해진다.