https://youtu.be/R8OWOgCNt4M?si=bldau6gYEZ3seGj2
위 영상을 보고 정리한 글입니다. (35:40 ~ 37:02)
# 구조체
- 구조체/enum의 인스턴스는 값 타입, 클래스의 인스턴스는 참조 타입
- 구조체는 상속 불가
struct Resolution { // 구조체 정의
var width = 1024 // 프로퍼티
var height = 76
}
let myComputer = Resolution() // 인스턴스 생성
print(myComputer.width) // 프로퍼티 접근
구조체 : Memberwise Initializer
struct Resolution { // 구조체 정의
var width : Int // 프로퍼티
var height : Int
}
let myComputer = Resolution(width:1000, hight:500)
// Memberwise Initializer
print(myComputer.width)
클래스 내에 구조체
struct Resolution {
var width = 1024
var height = 76
}
class VideoMode {
var resolution = Resolution()
var frameRate = 0.0
}
let myComputer = VideoMode()
print(myComputer.width)
Swift의 기본 데이터 타입은 모두 구조체
public struct Int
public struct Double
public struct String
public struct Array<Element>
# 클래스(class) vs 구조체(structure)
클래스 : 참조 타입(reference type)
- 상속 가능
- 타입 캐스팅(is, as)을 통해 실행 시점에 클래스 인스턴스의 타입을 해석하고 검사할 수 있다
- deinit 함수를 사용해 사용한 자원을 반환할 수 있다
- 참조 카운팅을 통해 한 클래스 인스턴스를 여러 곳에서 참조(사용)할 수 있다
class Human {
var age : Int = 1
}
var kim = Human()
var lee = kim // 참조 타입
print(kim.age, lee.age)
lee.age = 20
print(kim.age, lee.age)
kim.age = 30
print(kim.age, lee.age)
// 참조 타입은 복사할 때 주소를 복사해서 한 데이터의 reference가 2개 생김
- 출력값
1 1
30 30
20 20
구조체 : 값 타입(value type)
- 간단한 데이터 값들을 한 데 묶어서 사용하는 경우
- 전체 덩어리 크기가 작은 경우, 복사를 통해 전달해도 좋은 경우
- 멀티 스레드 환경
- 기존 타입의 특성을 상속할 필요가 없음
- 너비, 높이를 표현하는 기하학적 모양을 처리할 경우
- 좌표, 시스템의 각 좌표
struct Human {
var age : Int = 1
}
var kim = Human()
var lee = kim // 값 타입
print(kim.age, lee.age)
lee.age = 20
print(kim.age, lee.age)
kim.age = 30
print(kim.age, lee.age)
// 값 타입은 복사할 때 새로운 데이터가 하나 더 생김
- 출력값
1 1
30 20
1 20
call by value vs call by reference
- Swift에서 제공하는 Int, String, Array, Dictionary 등 기본 자료형들은 구조체로 만들어져 있어서 call by value 방식
- enum도 call by value 방식
- 클래스는 call by reference 방식
'iOS프로그래밍기초(Smile Han) > 문법 정리' 카테고리의 다른 글
[Swift] 문법 정리 - 오류 처리(Error Handling), Generic<> (0) | 2024.12.01 |
---|---|
[Swift] 문법 정리 - 옵셔널 체이닝(Optional Chaining) (1) | 2024.11.24 |
[Swift] 문법 정리 - 열거형(enum) (1) | 2024.11.17 |
[Swift] 문법 정리 - extension, Swift 접근 제어(access control), 프로토콜(protocol) (0) | 2024.11.17 |
[Swift] 문법 정리 - 상속 (3) | 2024.11.10 |