class와 struct의 차이점에 대해 이야기하면서 이미 참조 타입, 값 타입의 특징에 대해 언급했지만, 다시 살펴보자.
class Shirt {
var size: Int
var color: String
var brand: String
init(size: Int, color: String, brand: String){
self.size = size
self.color = color
self.brand = brand
}
}
var blueShirt = Shirt(size: 66, color: "blue", brand: "8Seconds")
var favoriteShirt = blueShirt
파란색 셔츠 샀는데 너무 맘에 들어서 최애 셔츠가 되었음.
근데 사이즈가 쪼꼼 애매해서 블루셔츠의 사이즈를 바꾸기로 했음.
blueShirt.size = 77
👉 그리고 블루셔츠와 최애셔츠의 사이즈를 출력해보면,
print("blueShirt size: ", blueShirt.size)
print("favoriteShirt size: ", favoriteShirt.size)
앞과 똑같이 파란색 셔츠를 사고 맘에 들어서 최애셔츠 되었음. 그런데 사이즈를 바꾼다고 하자.
struct Shirt {
var size: Int
var color: String
var brand: String
}
var blueShirt = Shirt(size: 66, color: "blue", brand: "8Seconds")
var favoriteShirt = blueShirt
blueShirt.size = 77
init()
이 없는 이유는 struct는 모든 속성에 대해 초기화해주는 Memberwise Init
을 통해 자동 생성 초기화가 제공되기 때문이다.Memberwise Init
은 더이상 동작하지 않는다.👉 이 상황에서 두 블루셔츠와 최애 셔츠의 사이즈를 출력하면,
print("blueShirt size: ", blueShirt.size)
print("favoriteShirt size: ", favoriteShirt.size)
두 값의 변화에 차이가 나는 이유는 class는 참조 타입, struct는 값 타입이기 때문이다.
🙋 그렇다면, 위의 예제가 내부적으로 어떻게 동작하는지 알아보자!
favoriteShirt = blueShirt
), 파란 셔츠가 가리키고 있는 곳의 주소가 저장되는 것을 볼 수 있다.favoriteShirt = blueShirt
), 복사되어 새로운 인스턴스가 생성된다.이렇게... 참조 타입과 값 타입에 대해서 알아보았는데요!(갑자기 존댓말..)
공부하며 작성한 글이기 때문에 틀린 정보가 있다면, 알려주시면 감사히 수정하겠습니다!🐾
🔖 참고