티스토리 뷰
클래스와 구조체는 코드의 조직화와 객체화를 위하여 반드시 필요한 요소이다. 그만큼 익숙하기도 한데, 기초적인 부분부터 복습한다는 느낌으로 정리해보려고 한다.
구조체와 클래스는 값과 메서드를 내부에서 정의하고 그 기능을 확장한다는 맥락에서는 동일하지만, 다음 4가지 특징은 클래스만의 고유 특징이다.
- 상속
- 타입 캐스팅: 런타임에 클래스 인스턴스의 타입을 확인
- 소멸자
- 참조 카운트: 클래스 인스턴스에 하나 이상의 참조가 가능
1. 선언 문법
class SomeClass {
// 클래스 내용은 여기에
}
struct SomeStructure {
// 구조체 내용은 여기에
}
struct Resolution {
var width = 0
var height = 0
}
class VideoMode {
var resolution = Resolution() // 위 Resolution 구조체를 값으로 사용
var interlaced = false
var frameRate = 0.0
var name: String?
}
인스턴스는 아래와 같이 생성자를 호출하여 생성한다.
let someResolution = Resolution() // 구조체 인스턴스 생성
let someVideoMode = VideoMode() // 클래스 인스턴스 생성
Java나 python 과 동일하게 dot(.)을 사용하여 해당 프로퍼티의 값에 접근할 수 있다.
print("The width of someResolution is \(someResolution.width)")
// "The width of someResolution is 0" 이 출력
또한 모든 구조체는 초기화 시 프로퍼티를 선언할 수 있는 초기 생성자를 자동으로 생성하여 제공한다. 즉, 아래와 같은 맴버의 초기화는 구조체 안에 width와 height 프로퍼티만 정의했다면 자동으로 사용이 가능하다는 의미이다.
let vga = Resolution(width: 640, height: 480)
2. 구조체와 열거형은 값 타입!
값 타입이라는 의미는 참조 타입과 대조되는 관계로 해당 구조체나 열거형의 인스턴스가 상수나 변수에 전달될 때, 그 값을 메모리로 바로 참조하는 것이 아니라 복사하여 전달된다는 의미이다.
let hd = Resolution(width: 1920, height: 1080)
var cinema = hd
cinema.width = 2048
print("cinema is now \(cinema.width) pixels wide")
// "cinema is now 2048 pixels wide" 출력
print("hd is still \(hd.width) pixels wide")
// "hd is still 1920 pixels wide" 출력
3. 클래스는 참조 타입!
값 타입과 달리 참조 타입은 변수나 상수에 값을 할당을 하거나 함수에 인자로 전달할 때 그 값이 메모리에 복사되는 곳이 아닌, 참조된다.
let tenEighty = VideoMode()
tenEighty.resolution = hd
tenEighty.interlaced = true
tenEighty.name = "1080i"
tenEighty.frameRate = 25.0
let alsoTenEighty = tenEighty
alsoTenEighty.frameRate = 30.0
print("The frameRate property of tenEighty is now \(tenEighty.frameRate)")
// "The frameRate property of tenEighty is now 30.0" 출력
참조 타입은 식별 연산자(===) 를 통하여 두 상수나 변수가 같은 인스턴스를 참조하고 있는 지 확인할 수 있다.
if tenEighty === alsoTenEighty {
print("tenEighty and alsoTenEighty refer to the same VideoMode instance.")
}
// "tenEighty and alsoTenEighty refer to the same VideoMode instance." 출력
반응형
'Mobile > ios' 카테고리의 다른 글
[ios] swift 기본 문법 정리 10: Method (0) | 2022.11.30 |
---|---|
[ios] swift 기본 문법 정리 9: Properties (0) | 2022.11.30 |
[ios] swift 기본 문법 정리 7: Enum (0) | 2022.11.29 |
[ios] swift 기본 문법 정리 6: Closures (0) | 2022.11.29 |
[ios] swift 기본 문법 정리 5: Function (0) | 2022.11.28 |
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
- Async
- 맛집
- redux
- javascript
- 인천 구월동 맛집
- react-native
- react
- AsyncStorage
- await
- redux-thunk
- 인천 구월동 이탈리안 맛집
- 정보보안기사 #실기 #정리
- 파니노구스토
- Promise
- 이탈리안 레스토랑
- Total
- Today
- Yesterday