반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 문자열
- Android
- gcd
- Swift
- Java
- SwiftLint
- UIScrollView
- LazyHStack
- swipe
- subscript
- WebView
- autolayout
- dictionary
- Observable
- 웹뷰
- Firebase
- SwiftUI
- UITabBarController
- NavigationLink
- remote config
- Alamofire
- 라이트모드
- ios
- string
- 다크모드
- RxSwift
- UIButton
- Apple
- github
- Realtime Database
Archives
- Today
- Total
점진적 과부하 개발 블로그
Swift 클래스와 구조체 본문
반응형
클래스(class)와 구조체(structure)의 공통점
- https://docs.swift.org/swift-book/LanguageGuide/ClassesAndStructures.html
- 프로퍼티를 정의할 수 있다.
- 메서드를 정의할 수 있다.
- []를 사용해 첨자(subscript) 문법으로 내부의 값을 액세스할 수 있는 첨자를 정의할 수 있다.
- 초기 상태 설정을 위한 초기화 함수(initializer)를 정의할 수 있다.
- extension 가능 (extension Double {})
- protocol 채택 가능 (class Man : Runnable {})
클래스(class)와 구조체(structure)의 차이점
클래스(Class)
- 상속이 가능하다.
- 타입 캐스팅(is as as? as!) 을 통해 실행 시점에 클래스 인스턴스 타입을 검사하고 해석 가능하다.
- deinitializer(deinit{}) 로 사용한 자원을 반환 가능
- 참조 카운팅을 통해 한 클래스 인스턴스를 여러 곳에서 사용 가능하다.
클래스/구조체 정의하기
클래스 정의하기
- class 이름 { ... }
구조체 정의하기
- struct 이름 { ... }
타입 이름에는 Upper Camel Case를 사용
클래스/구조체 안의 프로퍼티나 메서드는 lower Camel Case를 사용
struct Example {
var x = 0
var y = 0
}
class Test {
var a = Example()
var b = false
var c = 0.0
var d = String?
}
구조체는 값 타입(value type) 클래스는 참조 타입(reference type)
struct Human {
var age : Int = 10
}
var park = Human()
var ho = park // 값 타입
print(park.age, ho.age) // 10, 10
ho.age = 20
print(park.age, ho.age) // 10, 20
park.age = 30
print(park.age, ho.age) // 30, 20
// 값 타입은 복사할 때 새로운 데이터가 하나 더 생긴다.
class Human {
var age : Int = 10
}
var park = Human()
var ho = park // 참조 타입
print(park.age, ho.age) // 10, 10
ho.age = 20
print(park.age, ho.age) // 20, 20
park.age = 30
print(park.age, ho.age) // 30, 30
// 참조 타입은 복사할 때 주소를 복사해서
// 한 데이터의 reference가 2개 생긴다.
언제 클래스를 쓰고 언제 구조체를 쓰나?
클래스는 참조타입, 구조체는 값 타입
- 구조체는 간단한 데이터 값들을 한데 묶어서 사용하는 경우
- 전체 덩어리 크기가 작은 경우, 복사를 통해 전달해도 좋은 경우 구조체
- 멀티 쓰레드 환경이라면 구조체가 더 안전
- 구조체는 상속할 필요가 없는 경우(너비, 높이를 표현하는 기하학적 모양을 처리할 경우, 시작값, 증분, 길이 등으로 순열을 표현할 경우, 3차원 좌표 시스템의 각 좌표)
참고 문헌 : iOS 프로그래밍 실무 한성현 교수님 강의 내용 변형 및 요약
반응형
'Swift > 문법' 카테고리의 다른 글
Swift 클로저(Closure) (0) | 2022.01.06 |
---|---|
Swift guard문 (0) | 2022.01.05 |
Swift 문법 정리 1 (0) | 2022.01.03 |
Swift 구조체(Struct) (0) | 2021.12.23 |
Swift 열거형(enum) (0) | 2021.12.23 |