2023. 2. 27. 21:33ㆍ👩🏻💻 ios 앱개발 ( swift )
class
- 데이터와 기능을 갖고 있다.
- named
- reference타입 (structure는 value 타입)
- class 와 structure의 차이를 구별하는 게 좀 어렵다고 한다.
- class 는 기본 initializer를 만들어주지 않는다. -> init으로 만들어줘야함
class PersonClass {
var firstName: String
var lastName: String
init(firstName: String, lastName: String){
self.firstName = firstName
self.lastName = lastName
}
var fullName: String{
return "\(firstName) \(lastName)"
}
}
structure | class |
value type | reference type //reference = 주소 |
copy | share (변수들이 한 객체를 공유하고 있는 형태) |
values | objects |
immutable (mutating 키워드 사용해야 변경 가능) | mutable (class 내용 변경가능) |
fast( stack에 저장되기 때문에 빠름) | slower( heap 에 저장되므로 느림) |
- class는 reference 타입이다.
class - 실제 객체가 아닌 reference를 담고 있음 (structure와의 큰 차이점)
밑에있는 structure의 내용을 변경해도 위의 변수에는 아무런 영향 없음. 독립적
✍️ structure vs. class
- class 인스턴스는 heap에 저장됨
- 인스턴스를 할당한 변수 자체는 stack에 저장됨
- 변수의 값은 class 인스턴스에 대한 reference를 갖고 있다.
- reference = 해당 인스턴스의 메모리주소
- structure 인스턴스는 stack에 저장됨
✍️ structure
person1과 person2는 독립적
✍️ class
yangjae는 아무도 가리키고있지 않은 상태.
똑똑한 swift가 heap에서 삭제시켜줌!
struct에 함수를 하나 추가해보쟈
structure의 경우 자기 자신을 변경하려고 하면 mutating 키워드가 필요하다.
mutating 키워드를 사용하는 이유: class는 기본적으로 변경 가능. structure는 그렇지 않다.
structure의 내용을 바꾸는 것 = 새로운 값을 할당하는 것
mutating의 뜻 = 새로운 값을 할당하겠다고 알려주는것
class 인스턴스는 변경가능하므로 mutating 키워드 필요 없다.
같은 함수를 class에 넣어보면 오류안뜸.
언제 class를 쓰고 언제 structure를 써야 좋을까??
3가지 전략
1. value vs. object
- value타입인지 object 타입인지 고민. object는 생성된 인스턴스가 고유하다.
- 두 지점사이의 거리는 value타입이 적절
- 회원의 경우는 개별 객체를 생성하여 class를 만드는 경우가 많음
2. speed
structure는 class보다 만들어지는 속도가 빠르다.
여러개의 인스턴스를 만들어야 하는가? 짧은 기간동안만 존재하는가? --> structure
ex. 가속도 센서의 값들을 여러개 이용해서 짧은 시간동안 계속 계산해야하는 경우
긴 사이클을 사용하는 경우 & 생성되는 인스턴스 개수가 적은 경우 --> class
ex. 사용자의 구매내역처럼 사이클이 길고 인스턴스가 몇개 안되는 경우
*** 3. struct first
일단 sturct로 만든다.
필요하다면 class로 전환
최근 struct의 속도가 증가해서 apple에서도structure 사용을 권장한다고 함.
'👩🏻💻 ios 앱개발 ( swift )' 카테고리의 다른 글
[swift] Class 이니셜라이져 (1) | 2023.03.01 |
---|---|
[swift] Class 상속 (0) | 2023.02.27 |
[swift] Closure & Collection **연습하기(reduce, filter, map) (3) | 2023.02.24 |
[swift] Closure (0) | 2023.02.22 |
[swift] Collection (1) | 2023.02.17 |