Search

class vs struct (조민식)

class 와 struct 의 유사점

객체의 속성과 메소드를 정의하여 하나의 구성 요소로 분류한 청사진 역할을 한다. 이 청사진을 이용해 여러 객체를 만들 수 있다.
프로토콜을 준수하여 특정한 표준 함수를 제공하도록 할 수 있다.
초기화를 정의하여 초기화 상태를 설정할 수 있다.
서브스크립트를 정의하여 서브스크립트 문법으로 구조체나 클래스의 값에 접근할 수 있다.
extension을 사용하여 기능을 확장할 수 있다.

class 와 struct 의 차이점

class 는 상속이 가능 하지만 struct 는 상속을 받는 것도 상속을 시키는 것도 불가능하다!
struct 는 value type, class 는 reference type
클래스는 복사 시 주소를 참조하므로, 복사된 곳에서 클래스 속성의 변경이 원본에도 영향을 미치게 되고, 구조체는 복사 시 값만 전달할 뿐, 복사된 곳과 원본 사이에 연결성은 하나도 없다.
메모리에서 class 의 저장공간은  인데 반해 struct 의 저장공간은 스택이 된다.
스택에서의 저장은 가장 마지막 데이터의 위에 바로 저장하면 되므로 저장 속도가 굉장히 빠르지만, 힙에서의 저장은 동적으로 메모리의 빈 공간을 찾아서 저장해야 하므로 힙을 전체 탐색 -> 데이터 저장이라는 하나의 단계가 더 포함됩니다.
struct 는 따로 초기화를 해줄 필요가 없다.
class 는 init 메소드를 지정해줘야하지만, De-initializers 를 통해 struct 는 할 수 없는 인스턴스가 할당된 리소스를 확보할 수 있다.
struct 의 속성을 변형하려면 속성을 업데이트하는 메서드 선언 앞에 mutating 키워드를 작성해야 한다.

결론

단순한 데이터 값을 보유하기 위해서는 구조체가 낫다.
메모리의 스택은 크기가 크지 않기 때문에 작은 값을 갖는 데이터를 처리할 때 구조체를 사용한다.
상속이 필요한 경우에는 클래스를 사용한다.