Swift/Swift 언어이해

class와 struct의 차이

Teol 2023. 10. 31. 21:13

- 코드

 

유튜버 "개발하는 정대리"님의 학습코드자료입니다.

struct YoutuberStruct {
    var name : String
    var subscribersCount : Int
}

var devJeong = YoutuberStruct(name: "정대리", subscribersCount: 99999)

var devJeongClone = devJeong

print("======== struct =========")

print("값 넣기 전 devJeongClone.name : \(devJeongClone.name)")

devJeongClone.name = "호롤롤로"

// 값 복사이기 때문에 둘의 값이 다르다
print("값 넣은 후 devJeongClone.name : \(devJeongClone.name)")
print("값 넣은 후 devJeong.name : \(devJeong.name)")

print("======== class =========")

// 클래스
class YoutuberClass {
    var name : String
    var subscribersCount : Int
    // 생성자 - 즉 메모리에 올린다
    // init 으로 매개변수를 가진 생성자 메소드를 만들어야
    // 매개변수를 넣어서 그값을 가진 객체(object)를 만들수 있다.
    init(name: String, subscribersCount: Int){
        self.name = name
        self.subscribersCount = subscribersCount
    }
}

var jeongDaeRi = YoutuberClass(name: "정대리", subscribersCount: 99999)

var jeongDaeRiClone = jeongDaeRi

print("값 넣기 전 jeongDaeRiClone.name : \(jeongDaeRiClone.name)")

jeongDaeRiClone.name = "호롤롤롤로"

print("값 넣은 후 jeongDaeRiClone.name : \(jeongDaeRiClone.name)")

print("값 넣은 후 jeongDaeRi.name : \(jeongDaeRi.name)")

 

struct는 내가 미리 양식을 만들어 그 양식을 복사해서 사용(새로운 변수에 넣어 접근)하는 것이기 때문에 값을 바꾸어도 원래 양식의 있는 값은 변하지 않지만

class는 값을 바꾸면 원래 있던 양식의 값이 바뀌기 때문에 class와 struct는 다르다.

 

 

 

- 출력

 

값의 변화의 차이를 주목할것

+2023.12.02
한번 더 알게 된 사실이
struct는 메모리를 매번 새롭게 할당하여 값을 준다는것이고

 

class는 메모리를 ARC(aotomatic reference counting)를 사용하여 관리한다는 것이다

class는 메모리 관리가 중요한데, 어디서 메모리를 종료해야하는지의 시점이 결국 성능저하 문제로 이어질 수 있기 때문에

ARC를 활용하여 한정된 메모리 자원을 아껴준다.

(ARC는 말 그대로 메모리참조를 자동으로 카운팅하여 더이상 필요하지 않은 메모리 자원점유를 할당해제한다.)

개발자들에게 메모리 관리는 민감한 문제이므로 이를 잘 활용한것이 ARC인것같다.

 

struct : 값타입

class : 참조타입

'Swift > Swift 언어이해' 카테고리의 다른 글

swift mutating func 키워드란?  (1) 2023.12.02
for ~ in과 for each의 차이  (0) 2023.11.04
프로퍼티 옵저버란?  (0) 2023.10.30
Swift 모든 문법 정리  (1) 2023.10.21
Swift 기본문법 공부  (1) 2023.04.28