Swift 기초 문법 - 6. 클래스 vs 스트럭트(구조체)

정성윤·2023년 7월 10일
0

Swift 이론

목록 보기
7/64

클래스와 구조체는 Swift에서 사용되는 두 가지 데이터 타입입니다. 둘 다 멤버 변수와 멤버 함수를 포함하는 자체적인 타입을 정의할 수 있습니다.

구조체 - 하나의 동작을 하는 객체 만들기

구조체에 기본 생성된 이니셜라이저의 매개변수는 구조체 프로퍼티 이름으로 자동 지정됩니다. 인스턴스가 생성되고 초기화된 후 프로퍼티 값에 접근하고 싶다면 마침표(.)를 사용하면 됩니다.
let 선언 시 인스턴스 내부 프로퍼티 값 변경 X
var 선언 시 인스턴스 내부 프로퍼티 값 변경 O

struct 구조체 이름 {
	프로퍼티, 메소드 }
    
var 이름 = 구조체이름()

클래스

스위프트의 클래스는 부모클래스가 없더라도 상속 없이 단독으로 정의가 가능합니다.

class 클래스 이름 {
	프로퍼티, 메소드 }

class 클래스 이름 : 부모클래스 이름 {
	프로퍼티, 메소드 }

구조체와 다르게 참조 타입이므로 let으로 선언을 해도 내부 프로퍼티 값을 변경할 수 있습니다.

소멸

클래스의 인스턴스는 참조 타입이므로 더는 참조할 필요가 없을 때 메모리에서 해제됩니다. 소멸되기 직전 deinit라는 메소드가 호출됩니다. 클래스 내부에 deinit 메소드를 구현해주면 소멸되기 직전에 호출됩니다. 호출되는 메소드는 디이니셜라이저라고 부릅니다. 클래스당 하나만 구현할 수 있으며, 매개변수와 반환 값을 가질 수 없습니다.

차이점

  1. 상속성 : 클래스는 다른 클래스로부터 상속을 받을 수 있지만, 구조체는 상속을 지원하지 않습니다. 클래스는 기존 클래스의 특성을 상속받아 새로운 특성을 추가하거나 수정할 수 있상속 계층 구조를 형성할 수 있습니다.
  1. 참조 타입 vs 값 타임 : 클래스는 참조 타입이며, 구조체는 값 타입입니다.
    클래스 인스턴스는 힙(heap)에 저장되고, 인스턴스를 참조하는 변수나 상수는 해당 인스턴스의 메모리 주소를 가리킵니다.
    구조체 인스턴스는 스택에 직접 저장되고, 인스턴스를 할당하는 변수나 상수에는 값 자체가 저장됩니다.
    클래스는 참조에 의해 전달되고 복사되지 않지만, 구조체는 갑이 복사되어 전달됩니다.
  1. 클래스의 생명 주기 관리 : 클래스는 참조 카운팅을 통해 메모리를 관리합니다. 여러 개의 참조가 동일한 인스턴스를 가리킬 수 있으며, 참조 카운트가 0이 되면 자동으로 메모리에서 해제됩니다.
    구조체는 값 타입이므로 참조 카운팅이 필요하지 않습니다. 구조체 인스턴스는 스코프를 벗어나면 자동으로 해제됩니다.
  1. 멤버 초기화 : 클래스는 지정 이니셜라이저와 편의 이니셜라이저를 사용하여 멤버 변수를 초기화할 수 있습니다. 구조체는 자동으로 멤버 변수를 초기화하는 멤버와 이니셜라이저를 제공합니다.

일반적으로 클래스는 상속이 필요하거나 참조 타입의 특성이 필요한 경우에 사용됩니다. 구조체는 간단한 데이터 구조를 표현하거나 값 복사가 필요한 경우에 사용됩니다. 또한, 구조체는 값 타입이므로 스레드 안정성이나 코드 예측 가능성을 높이는 데 도움이 될 수 있습니다.

참고(출처) : 개발하는 정대리, 야곰(swift5)

profile
이유있는 스위프트 개발자

0개의 댓글