// 변수하나하나를 묶는 방법이 클래스와 스트럭트 두가지가 있다.
struct YoutuberStruct {
var name : String
var subscribersCount: Int
}
// 메모리에 올리는데 name과 subscribersCount를 쓰라고 정함
var devGikko = YoutuberStruct(name: "기꼬", subscribersCount: 99999)
var devGikkoClone = devGikko
devGikkoClone.name = "호롤롤로"
class YoutuberClass {
var name : String
var subscribersCount: Int
// 처음에 메모리에 올리려면 위의 name과 subscribersCount에 대한 값이 없는 상태이기 때문에 외부에서 데이터를 넘겨준다.
// init으로 매개변수를 가진 생성자 메소드를 만들어야 매개변수를 넣어서 그 값을 가진 객체(object)를 만들 수 있다.
init(name: String, subscribersCount: Int){
// 내가 가지고 있는 이름을 외부에서 들어온 name으로 넣겠다.외부의 subscribersCount를 subscribersCount에 넣겠다.
// 매개변수를 넣을 때 이름을 쓰지 않고 "_"로 사용가능
self.name = name
self.subscribersCount = subscribersCount
}
}
var gikko = YoutuberClass(name: "기꼬", subscribersCount: 99999)
var gikkoClone = gikko
gikkoClone.name = "호롤롤롤로"
====== struct ======
값 넣기 전 devGikko.name : 기꼬
값 넣기 전 devGikkoClone.name : 기꼬
값 넣은 후 devGikkoClone.name : 호롤롤로
값 넣은 후 devGikko.name : 기꼬
====== class ======
값 넣은 전 gikko.name : 기꼬
값 넣기 전 gikkoClone.name : 기꼬
값 넣은 후 gikkoClone.name : 호롤롤롤로
값 넣은 후 gikko.name : 호롤롤롤로
스트럭트는 원본과 그에 따른 복사본과 같다.
그래서 복사본의 값이 바뀌어도 원본은 그대로
클래스는 원본과 복사본이 연결되어있다.( 같은 곳을 바라보고 있다)
그래서 복사본의 값이 바뀌면 원본도 바뀐다.
import UIKit
// 변수라는 공간에 데이터를 담는 것은 한도가 있다.
// 모델이라는 곳에 덩어리로 묶어둔다. ex) 모델(이름, 영상, 조회수)
// 변수하나하나를 묶는 방법이 클래스와 스트럭트 두가지가 있다.
// 유튜버 (데이터) 모델 - struct / 구조체
struct YoutuberStruct {
var name : String
var subscribersCount: Int
}
// 메모리에 올리는데 name과 subscribersCount를 쓰라고 정함
var devGikko = YoutuberStruct(name: "기꼬", subscribersCount: 99999)
var devGikkoClone = devGikko
print("====== struct ======")
print("값 넣기 전 devGikkoClone.name : \(devGikkoClone.name)")
// -> 값 넣기 전 devGikkoClone.name : 기꼬
devGikkoClone.name = "호롤롤로"
// 값 복사이기 때문에 둘의 값이 다르다
print("값 넣은 후 devGikkoClone.name : \(devGikkoClone.name)")
print("값 넣은 후 devGikko.name : \(devGikko.name)")
// -> 값 넣은 후 devGikkoClone.name : 호롤롤로
// -> 값 넣은 후 devGikko.name : 기꼬
// #2 클래스 : 스트럭트처럼 데이터들의 모음이다.
// -> 생성자를 만들어 주어야한다. -> 생성: 메모리에 올린다 (init)
class YoutuberClass {
var name : String
var subscribersCount: Int
// 처음에 메모리에 올리려면 위의 name과 subscribersCount에 대한 값이 없는 상태이기 때문에 외부에서 데이터를 넘겨준다.
// init으로 매개변수를 가진 생성자 메소드를 만들어야 매개변수를 넣어서 그 값을 가진 객체(object)를 만들 수 있다.
init(name: String, subscribersCount: Int){
// 내가 가지고 있는 이름을 외부에서 들어온 name으로 넣겠다.외부의 subscribersCount를 subscribersCount에 넣겠다.
// 매개변수를 넣을 때 이름을 쓰지 않고 "_"로 사용가능
self.name = name
self.subscribersCount = subscribersCount
}
}
var gikko = YoutuberClass(name: "기꼬", subscribersCount: 99999)
var gikkoClone = gikko
print("====== class ======")
print("값 넣기 전 gikkoClone.name : \(gikkoClone.name)")
gikkoClone.name = "호롤롤롤로"
print("값 넣은 후 gikkoClone.name : \(gikkoClone.name)")
print("값 넣은 후 gikko.name : \(gikko.name)")
/*
====== struct ======
값 넣기 전 devGikkoClone.name : 기꼬
값 넣은 후 devGikkoClone.name : 호롤롤로
값 넣은 후 devGikko.name : 기꼬
====== class ======
값 넣기 전 gikkoClone.name : 기꼬
값 넣은 후 gikkoClone.name : 호롤롤롤로
값 넣은 후 gikko.name : 호롤롤롤로
*/
'모바일앱 > Swift' 카테고리의 다른 글
Day10 closure (0) | 2021.12.03 |
---|---|
Day09 generic (0) | 2021.12.03 |
Day08 function parameter (0) | 2021.12.03 |
Day07 property_observer (0) | 2021.12.02 |
Day05 Unwrap_Optional (0) | 2021.11.29 |
Day04 For_Loops (0) | 2021.11.29 |
Day03: enum (0) | 2021.11.29 |
Day02 : For-each(자료 보강 필요) (0) | 2021.11.28 |