생각, 고민, 문제해결의 기록

[iOS/Swift] 구조체(Struct)와 클래스(Class) 본문

iOS/Swift

[iOS/Swift] 구조체(Struct)와 클래스(Class)

김예티 2022. 8. 14. 10:42

해당 내용은 공부한 내용을 바탕으로 작성하였기에 수시로 업데이트됩니다.
피드백과 태클은 언제나 환영입니다.


구조체 vs 클래스

새로운 데이터 구조를 정의할 때 구조체냐 클래스냐로 고민이 될 때가 있을것이다.
오늘은 구조체와 클래스의 차이및 특징과 어느 상황에서 무엇을 사용해야 좋을지 알아보도록 하자😎

공통점

  • 값을 저장할 프로퍼티를 선언할 수 있다.
  • 함수 기능을 하는 메서드를 선언할 수 있다.
  • 내부 값에 .(점)을 사용하여 접근할 수 있다.
  • 생성자를 사용해 초기 상태를 설정할 수 있다.
  • extension을 사용하여 기능을 확장할 수 있다.
  • Protocol을 채택하여 기능을 설정할 수 있다.

구조체와 클래스의 차이점

 

구조체(Struct)

  • 값 타입이다. (값이 복사되서 전달됨)
    • 열거형도 값 타입이다.
  • 구조체 변수를 새로운 변수에 할당할 때마다 새로운 구조체가 생성된다.
    즉, 하나의 구조체를 여러 변수에 할당한 뒤에 값을 변경하더라도, 새로이 생성된 변수들의 값은 변하지 않는다.

 

클래스(Class)

  • 참조 타입이다. (참조: 값을 갖고 있는 메모리를 바라보고 있다는 뜻)
  • ARC로 메모리를 관리한다.
  • 클래스의 변수를 여러 변수에 할당한 뒤 값을 변경하면 할당된 모든 변수의 값이 바뀐다.
  • 클래스에서만 가능한 기능
    • 상속 (Inheritance) : 클래스의 여러 속성을 다른 클래스에 물려 줌
    • 타입 캐스팅 (Type casting) : 런타임에 클래스 인스턴스의 타입을 확인
    • 소멸자 (Deinitializers) : 할당된 자원을 해제(free up) 시킴
    • 참조카운트 (Reference counting) : 클래스 인스턴스에 하나 이상의 참조가 가능

클래스를 쓸까 구조체를 쓸까

일반적으로 다음의 조건 중 1개 이상을 만족하면 구조체를 사용하는 것을 고려해 볼 수 있다.
해당조건이 없으면 클래스를 사용하면 된다.

  • 구조체의 주 목적이 관계된 간단한 값을 캡슐화하기 위한 것인 경우
  • 구조체의 인스턴스가 참조되기보다 복사되기를 기대하는 경우
  • 구조체에 의해 저장된 어떠한 프로퍼티가 참조되기보다 복사되기는 기대하는 경우
  • 구조체가 프로퍼티나 메소드 등을 상속할 필요가 없는 경우

'iOS > Swift' 카테고리의 다른 글

[iOS/Swift] 연산자(Operators)  (0) 2022.10.24
[iOS/Swift] 컬렉션 타입(Collection Type)  (0) 2022.10.20
[iOS/Swift] 클로저(Closures)  (0) 2022.10.11