iOS/iOS Swift 문법

Day6_클래스 vs. 스트럭트

Developer-Michelle 2022. 4. 29. 11:04

클래스 vs. 스트럭트

(주로 Model 만들 때)

변수 하나하나를 클래스 또는 스트럭트로 묶는다.

함께 관리하기 위해서

묶는 방법이 2가지임 (클래스 또는 스트럭트)

 

Struct 

장점 : memberwise initializer 때문에 좋다.

생성자를 만들지 않아도 좋다. 알아서 만들어줌.

예를 들어서 아래 같은 경우 YoutuberStruct( 라고만 쳐도 name:, subscribersCount 자동완성됨)

//유튜버(데이터) 모델 - struct(구조체)
struct YoutuberStruct {
    var name: String
    var subscribersCount: Int
}

//메모리에 올린다.
var devJeong = YoutuberStruct(name: "정대리", subscribersCount: 9999)
var devJeongClone = devJeong
print("값 넣기 전 devJeongClone.name: \(devJeongClone.name)")
devJeongClone.name = "호롤롤로"

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

 

 

스트럭트 : 다른 종이에 복사

O.     O

다른 한쪽이 바뀌어도 다른 한쪽 종이는 훼손되지 않음 그대로임.

 

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: 9999)
var jeongDaeRiClone = jeongDaeRi
print("값 넣기 전 jeongDaeRi.name: \(jeongDaeRi.name)")
jeongDaeRiClone.name = "호롤롤롤로"

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

 

클래스: 서로 연결되어 있다.

O.     O

다른 한쪽이 바뀌면 다른 것에도 영향

선이 연결되어있다고 생각하면 될듯.

"참조"

(서로 같은 곳(메모리)을 바라보고 있음)

 

 

참고)https://www.youtube.com/watch?v=gYXNCJntXAY&list=PLgOlaPUIbynoqbQw_erl3L2w7vfOTCtFD&index=6

'iOS > iOS Swift 문법' 카테고리의 다른 글

iOS swift Xcode 에서 API문서 보는 법 단축키  (0) 2022.05.26
if 문 vs. switch문  (0) 2022.05.13
/ 와 % 의 차이  (0) 2022.05.09
옵셔널 변수  (0) 2022.05.02
Day5_ Optional, Unwrapping(2)  (0) 2022.04.29