Swift - Struct vs Class

최조니·2022년 7월 25일
0

Swift

목록 보기
5/10

Struct vs Class

Struct

struct StructName {
	프로퍼티와 메서드
}

Class

class ClassName {
	프로퍼티와 메서드
}
class YoutuberClass {
	var name: String
    var subscribersCount: Int
    
    // 생성자 
    init(_ name: String, subscribersCount: Int) {
    	self.name = name
        self.subscribersCount = subscribersCount
    }
}

Struct vs Class

  • 공통점
    • 값을 저장할 프로퍼티를 선언할 수 있음

    • 함수적 기능을 하는 메서드를 선언할 수 있음

    • 내부 값에 .(마침표 연산)을 사용하여 접근할 수 있음

    • 생성자를 사용해 초기 상태를 설정할 수 있음

    • extension을 사용해 기능을 확장할 수 있음

    • protocol을 채택하여 기능을 설정할 수 있음


  • 차이점
    • struct는 값 타입
      class는 참조 타입
    • struct는 구조체 변수를 새로운 변수에 할당할 때마다 새로운 구조체가 할당, 다른 변수에 영향을 주지 않음 (값 자체 복사)
      class는 같은 클래스 인스턴스를 여러 변수에 할당한 뒤 값을 변경시키면 모든 변수에 영향을 줌 (메모리 복사)
    • struct 스택 영역에 저장, ARC로 메모리 관리 X
      class는 힙 영역에 데이터 저장, ARC로 메모리 관리
    • class는 상속이 가능
    • class는 타입 캐스팅을 통해 런타임에서 클래스 인스턴스의 타입을 확인할 수 있음
    • class는 deinit을 사용하여 클래스 인스턴스의 메모리 할당을 해제할 수 있음

✚ ARC(Automatic Reference Counting) 란?
ARC는 Swift 프로그램 메모리 관리 기법으로, 자동으로 메모리를 관리해주는 방식이다.

  • ARC는 메모리 영역 중 힙 영역을 관리한다.
  • ARC는 클래스 인스턴스가 더 이상 필요하지 않을 때 메모리를 자동으로 해제한다.
// class는 참조 타입
class TmpClass {
	var count: Int = 0
}

var class1 = TmpClass()
var class2 = class1
var class3 = class1

class3.count = 2
class1.count 				// 2


// struct는 값 타입
struct TmpStruct {
	var count: Int = 0
}

var struct1 = TmpStruct()
var struct2 = struct1
var struct3 = struct1

struct2.count = 2
struct3.count = 3

struct1.count				// 0
struct2.count				// 2
struct3.count				// 3

참조
개발하는 정대리 - 스위프트 기초 문법: 클래스 vs 스트럭트
개발자 소들이 - iOS 메모리 관리
Class vs Struct in Swift

profile
Hello zoni-World ! (◍ᐡ₃ᐡ◍)

0개의 댓글