NOW-ON / iOS-Interview-Preparation

iOS 면접 준비
3 stars 0 forks source link

Struct와 Class의 차이 #3

Closed heydoy closed 1 year ago

wodyddml2 commented 1 year ago

struct는 값 타입이며 class는 참조 타입이고 ARC로 메모리를 관리합니다. 
 또한 상속 가능성 유무를 차이점으로 말할 수 있습니다.



값 타입과 참조 타입의 차이점을 설명하자면 


  1. 값 타입: 값 타입은 값을 복사하기 때문에 struct 타입의 인스턴스는 모두 독립적인 객체를 가져 다른 변수에 영향을 주지 않습니다.
  2. 참조 타입: 동일한 클래스의 인스턴스를 가리키는 여러 변수들이 있을 때 하나의 변수를 통해 클래스 내부의 값을 바꾸면 모든 변수들이 하나의 인스턴스를 참조하고 있기 때문에 값이 변합니다.
Glsme commented 1 year ago
LeeJoobang commented 1 year ago
  1. Class

    • 참조타입(같은 클래스의 인스턴스를 여러개의 변수에 할당한 뒤 값을 변경하면 할당한 모든 변수에 영향을 준다.)
    • 상속이 가능하다.
    • deinit을 사용해 클래스의 인스턴스 메모리 할당을 해제됨을 확인할 수 있음.
    • 참조가 언제될지 몰라 heap에 저장됨
    • ARC로 메모리를 관리를 한다.
  2. Struct

    • 값 타입(구조체 변수를 새로운 변수에 할당할 때마다 새로운 구조체에 할당)
    • 컴파일 단게에서 알 수 있기 때문에 stack에 저장됨
heydoy commented 1 year ago

Struct와 Class의 공통점

  1. 내부에 프로퍼티와 메서드를 정의하여 데이터를 저장할 수 있고, 인스턴스를 만들 수 있다.
  2. 첨자 subscripts를 정의하여 값을 첨자 신택스로 접근할 수 있음.
  3. 둘 다 initializer를 정의하여 초기 상태를 세팅할 수 있음.
  4. 둘다 extension으로 기본 구현보다 기능성을 확장할 수 있음.
  5. 둘다 프로토콜을 준수할 수 있음.
  6. Class, Struct의 이름은 UpperCamelCase로, 프로퍼티와 메서드는 lowerCamelCase로 권장됨.
    • 표준 Swiftt 타입 역시 UpperCamelCase (e.g. String, Int)

차이점

  1. Class는 상속이 가능하지만 Struct는 상속이 불가능
  2. Class는 타입 캐스팅이 가능하고 런타임에 클래스의 인스턴스 타입을 해석할 수 있음.
  3. Class는 deinitilizer를 정의하여 메모리에서 해제할 수 있음.
  4. Struct는 memberwise initialiser가 지원됨.
  5. Class는 참조 타입, Struct는 값 타입으로, Struct는 복사할 때 `copy-on-write가 사용됨. (위: 값타입, 아래: 참조타입) image
image
  1. Class는 힙에 인스턴스를 저장하고, 그 주소값을 스택에 저장함. Struct는 스택에 인스턴스가 저장됨.
    • Class는 Heap에 할당되므로 속도가 느림 -> 런타임에 메모리를 할당하며 레퍼런스 카운팅(ARC)을 통해 해제가 필요함. 또한 레퍼런스 카운팅에서 클래스 인스턴스에 하나 이상의 참조가 가능함.
    • Struct는 Stack 영역에 할당되므로 속도가 빠름 -> 때문에 컴파일 타임에 컴파일러가 언제 메모리를 할당하고 해제할 지 정확히 알 수 있다.

참고

Yun-YeoJin commented 1 year ago

Struct : Stack 영역에 저장하기 때문에 값 타입, 상속과 재정의가 불가능 Class : Heap 영역에 저장하기 때문에 참조 타입, 상속과 재정의가 가능, ARC로 메모리 관리.