iOS

[iOS][swift] class와 struct

A든 2021. 12. 15. 21:53

struct

import UIKit

struct ItemStruct {
    var name : String
    var age : Int
}

var devJun = ItemStruct(name: "성준", age: 29)

var devJunTest = devJun

print("devJunTest.name : \(devJunTest.name)")

devJunTest.name = "문식쿤"

print("devJunTest.name : \(devJunTest.name)")

print("devJun.name : \(devJun.name)")

struct 결과

 

class

import UIKit

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

var aidenKim = ItemClass(name: "성준", age: 29)

var aidenKimTest = aidenKim

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

aidenKimTest.name = "문식쿤"

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

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

class 결과

 

 

Classes support a few more capabilities that structs don’t have:

  • Classes are reference types and structs are value types

 

That last point is important: classes are reference types, and structs are value types. Here’s what’s what:

  • Value Type: When you copy a value type (i.e., when it’s assigned, initialized or passed into a function), each instance keeps a unique copy of the data. If you change one instance, the other doesn’t change too.
  • Reference Type: When you copy a reference type, each instance shares the data. The reference itself is copied, but not the data it references. When you change one, the other changes too.

 

Value Type은 각 하나의 유니크한 벨류를 갖게 된다. 

Reference Type에서 보앗듯이 어떤 한 데이터 값을 바꾼다면, 다른곳에서도 그 데이터 값이 자동적으로 바뀐다.

 

그렇다면 언제 struct를 쓰고, 언제 class를 쓰는게 좋을까? 

먼저 struct는 간단한 데이터 타입들을 쓸 때, 스레드에서의 안정성이 필요할 때, 그리고 상속이 필요 없을 때 쓰이며, 

class는 생명주기에서 모든 영향을 줄 때, 예를 들면, DatabaseConnection 또는 TemporaryFile 등에 쓰일때 그리고 또 다른 카피가 필요 없을 때, 예를들면, API 또는 온라인 소스 reference 등에 쓰일 때이다. 

 

참고로 struct에서 class 혹은 class에서 struct로 바꿀 수 있다.

 

 

*개발하는 정대리 유튜브를 참고하였습니다.