새로 수강한 강의에 대해 정리
이미 정리한 내용도 있겠지만 다시 한 번 복습을 위해 작성했다 / 일부 참고
💡 프로퍼티 (Property)
- 프로퍼티는 클래스, 구조체 또는 열거형 등에 관련된 값
프로퍼티의 종류
- 저장 프로퍼티
- 지연 저장 프로퍼티
- 연산 프로퍼티
- 프로퍼티 감시자
- 타입 프로퍼티
💡 저장 프로퍼티 (Stored Property)
- 저장 프로퍼티는 인스턴스의 변수, 상수를 의미
즉, 클래스 또는 구조체의 인스턴스와 연관된 값을 저장하는 가장 단순한 개념의 프로퍼티
- let : 변경할 수 없는 상수(Constant)를 선언
- var : 변경할 수 있는 변수(Variable)를 선언
기본적인 저장 프로퍼티 선언과 인스턴스 초기화 방법
// 좌표
struct CoordinatePoint {
var x: Int // 저장 프로퍼티
var y: Int // 저장 프로퍼티
}
// 구조체에는 기본적으로 저장 프로퍼티를 매개변수로 갖는 이니셜라이저가 있습니다.
let eunseoPoint: CoordinatePoint = CoordinatePoint(x: 2, y: 4)
// 사람의 위치 정보
class Position {
var point: CoordinatePoint // 저장 프로퍼티 (변수)
let name: String // 저장 프로퍼티 (상수)
// 프로퍼티 기본값을 지정해주지 않는다면 이니셜라이저를 따로 정의해주어야 합니다.
init(name: String, currentPoint: CoordinatePoint) {
self.name = name
self.point = currentPoint
}
}
// 사용자 정의 이니셜라이저를 호출해야만 합니다.
// 그렇지 않으면 프로퍼티 초기값을 할당할 수 없기 때문에 인스턴스 생성이 불가능합니다.
let eunseoPosition: Position = Position(name: "eunseo", currentPoint: eunseoPoint)
이니셜라이저(Initializer)란?
- 새로운 인스턴스를 생성하고 초기화하는 특별한 메서드
- 클래스, 구조체, 열거형 등의 타입에서 사용
일반적인 이니셜라이저 (Initializer)의 형식
init(parameters) {
// 초기화 코드
}
여기서 parameters란?
- 이니셜라이저가 호출될 때 필요한 매개변수를 가리킴
- 매개변수들은 인스턴스를 초기화하는 데 필요한 데이터나 정보를 전달하는 데 사용
- 이니셜라이저의 매개변수는 해당 타입의 속성을 초기화하는 데 사용 됨
예시
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
위의 예제에서 Person 클래스에는 두 개의 속성 name과 age가 있다.
이니셜라이저는 이 두 속성을 초기화하기 위해 name과 age라는 두 개의 매개변수를 필요로 한다.
그렇기 때문에 이니셜라이저를 호출할 때는 다음과 같이 매개변수에 값을 전달하여 호출 함
let person = Person(name: "John", age: 30)
- Person 클래스의 이니셜라이저를 호출할 때 "John"과 30이라는 값이 각각 name과 age 매개변수에 전달되어 인스턴스 초기화
💡지연 저장 프로퍼티 (Lazy Stored Properties)
- var 키워드를 사용하여 변수로 정의
상수는 인스턴스가 완전히 생성되기 전 초기화해야 하므로 필요할 때 값을 할당하는 지연 저장 프로퍼티와는 맞지 않음
- 호출이 있어야 값을 초기화 함
- lazy 키워드 사용
예시
class DataManager {
lazy var data: [String] = {
// 데이터를 로드하거나 초기화하는 작업
// 이 클로저는 처음으로 data 프로퍼티에 접근할 때 실행됩니다.
return ["Data 1", "Data 2", "Data 3"]
}()
}
위 예제에서 data 프로퍼티는 지연 저장 프로퍼티로 선언되었다. 초기화 클로저는 해당 프로퍼티에 처음으로 접근될 때 한 번만 실행되며, 이러한 특성은 특히 프로퍼티가 복잡하거나 초기화하는 데 시간이 걸리는 경우에 유용하다.
💡 연산 프로퍼티 (Computed Property)
- 값을 저장하는 것이 아니라 특정한 연산을 통해 값을 제공하는 프로퍼티
이러한 프로퍼티는 특정한 값을 저장하는 것이 아니라, 값을 계산하기 위해 다른 프로퍼티나 데이터를 사용한다.
- 그때그때 계산한 값을 알려주기 때문에 변수를 나타내는 var를 사용하여 선언 (let은 불가능)
- getter와 optional한 setter를 제공
getter: 연산된 값 반환
setter: 값 설정
하지만 모든 연산 프로퍼티가 setter를 가져야 하는 것은 아님, 필요에 따라 getter만을 정의할 수도 있음
예시
원의 넓이를 계산하는 프로퍼티를 연산 프로퍼티로 정의
class Circle {
var radius: Double
init(radius: Double) {
self.radius = radius
}
var area: Double { // 연산 프로퍼티
return Double.pi * radius * radius
}
}
위 예제에서 area는 연산 프로퍼티로, getter를 통해 원의 넓이를 계산하여 반환한다.
이 프로퍼티는 값을 저장하는 것이 아니라 radius 프로퍼티를 사용하여 원의 넓이를 계산하며, 연산 프로퍼티는 실제로 값을 저장하지 않지만 읽기 전용 또는 읽기/쓰기 모두 가능한 형태로 사용할 수 있다.
' 𝗔𝗣𝗣𝗟𝗘 > SWIFT : GRAMMAR' 카테고리의 다른 글
Swift 기초 문법 - 객체지향 5원칙(SOLID) (0) | 2024.03.06 |
---|---|
Swift 기초 문법 - 추상 클래스 (0) | 2024.03.06 |
Swift 기초 문법 - 함수 기본 형태 (0) | 2024.03.06 |
SWIFT 기초 문법(02) Unwrap, 클래스 vs 스트럭트, 프로퍼티 옵저버, 함수 매개변수, 제네릭, 클로저 (0) | 2024.02.14 |
SWIFT 기초 문법(01) 조건문, foreach 반복문, enum, For 반복문 (0) | 2024.02.13 |