[Swift] - 클래스와 구조체

sai06266·2023년 9월 9일
0

Swift 문법

목록 보기
5/9

클래스와 구조체의 공통점

  • 값을 저장할 프로퍼티를 선언할 수 있다.
  • 함수적 기능을 하는 메서드를 선언 할 수 있다.
  • 내부 값에. 을 사용하여 접근할 수 있다.
  • 생성자를 사용해 초기 상태를 설정할 수 있다.
  • extension을 사용하여 기능을 확장할 수 있다.
  • Protocol을 채택하여 기능을 설정할 수 있다.
//구조체와 클래스의 기본적인 형태
struct 구조체 이름 {
 프로퍼티와 메서드
}
class 클래스 이름 {
 프로퍼티와 메서드
}

차이점

클래스(Class)

  • 참조 타입 -> 값을 복사하는 것이 아닌 메모리를 참조
  • ARC(Automatic Reference Counting)로 메모리를 관리한다.
  • 같은 클래스 인스턴스를 여러 개의 변수에 할당한 뒤 값을 변경시키면 모든 변수의 값에 변화가 생긴다. -> 인스턴스를 참조하기 때문
  • 상속이 가능하다
  • 타입 캐스팅을 통해 런타임에서 클래스 인스턴스의 타입을 확인할 수 있다.
  • Init을 필수적으로 만들어줘야한다.
  • deinit을 사용하여 클래스 인스턴스의 메모리 할당을 해제할 수 있다.

구조체(Struct)

  • 값 타입 -> 값을 복사
  • 구조체 변수를 새로운 변수에 할당할 때마다 새로운 구조체가 할당되기 때문에 하나의 구조체를 여러 개의 변수에 할당하고 값을 바꾸더라도 다른 변수의 값에 영향을 미치지 않는다. -> 값 타입이기 때문

클래스 -> 스프레드시트 UIKIT에서 사용

구조체 -> 엑셀 SwiftUI에서 사용


어떤 상황에 클래스를 쓰고, 구조체를 쓸까 ?

구조체를 사용하는게 좋은 경우

  • 연관된 간단한 값의 집합을 캡슐화하는 것만이 목적일 경우
  • 캡슐화한 값을 참조하는 것보다 복사하는 것이 합당할때
  • 구조체에 저장된 프로퍼티가 값 타입이며, 참조하는 것보다 복사하는것이 합당할때
  • 다른 타입으로부터 상속받거나, 자신을 상속할 필요가 없을때
  • Swift 표준 라이브러리의 기본 타입은 모두 구조체

0개의 댓글