Swift개발

[Swift]class, struct 간단 비교

녹차맛고양이 개발강좌 및 IT리뷰 2022. 5. 17. 10:36

1. class

- 참조 타입

- ARC로 관리

- 상속 가능

 

2. struct

- 값 타입

- 변수에 할당 할때마다 새로운 구조체로 할당

 

아래와 같이 class와 struct이 있다고 할때

    class class_ex{
        var a : Int = 0
        
        deinit{
            print("참조 없음")
        }
    }

    struct struct_ex{
        var a : Int = 0
        
    }

 

class는 참조 방식이므로 Cclass.a의 값을 변경하면 같은 class를 참조하는 다른 변수들도 영향을 받고

struct는 값 방식이므로 값을 변경해준 Astruct.a와 Bstruct.a는 2,1로 각각 바뀝니다.

 

        var Aclass = class_ex()
        var Bclass = Aclass
        var Cclass = Aclass
        
        Cclass.a = 1
        
        print(Aclass.a)     // 1
        print(Bclass.a)     // 1
        print(Cclass.a)     // 1
        
        var Astruct = struct_ex()
        var Bstruct = Astruct
        var Cstruct = Astruct
        
        Astruct.a = 2
        Bstruct.a = 1
        
        print(Astruct.a)    // 2
        print(Bstruct.a)    // 1
        print(Cstruct.a)    // 0

 

마지막으로 class의 경우에는 참조이므로

하나의 변수에 참조시 2개의 참조 카운트부터 시작하여 늘어나고

할당 해제시 하나씩 줄어들어 총 참조 카운트 2개인 경우에 할당 해제시 0개로 deint가 수행됩니다.