[스위프트] 프로퍼티 개념 요약
프로퍼티
- 클래스, 구조체, 열거형 등에 관련된 값
- 저장 프로퍼티 = 특정 타입의 인스턴스에 사용, 인스턴스의 변수 또는 상수, 클래스와 구조체에서만 사용
- 연산 프로퍼티 = 특정 타입의 인스턴스에 사용, 값의 저장 x, 특정 연산을 실행한 결괏값
- 타입 프로퍼티 = 특정 타입에 사용되는 프로퍼티
// 클래스, 구조체 같은데에서 사용되는 자원(값), 변수가 해당되는거로 보임
지연 저장 프로퍼티(복잡한 클래스나 구조체 구현에서 효율적)
- 클래스 인스턴스의 저장 프로퍼티로 다른 클래스 인스턴스나 구조체 인스턴스를 할당해야 할 때
- 인스턴스를 초기화하면서 저장 프로퍼티로 쓰이는 인스턴스들이 한번에 생성되어야 하거나 모든 저장 프로퍼티를 사용할 필요가 없는 경우
struct CoordinatePoind{
var x : int = 0
var y : int = 0
}
Class Position {
// lazy는 반드시 var와 쓰여야함,
// 사용되기 전까지는 불필요한 로드를 하지 않음
lazy var point : CoordinatePoint = CoordinatePoint()
let name: String
init(name : String){
self.name = name
}
}
// Position이라는 객체는 생성됬지만 아직 CoordinatePoint는 객체에 생성되지 않은 상태.
let yagomPosition: Position = Position(name: "yagom")
// 이 코드를 통해 point 프로퍼티로 처음 접근할 때 point 프로퍼티의 CoordinatePoint가 생성됨
print(yagomPosition.point)
연산 프로퍼티
- 인스턴스 내/외부 값을 연산하여 적절한 값을 돌려주는 Getter 역할이나 은닉화된 내부의 프로퍼티 값을 간접적으로 설정하는 Setter 역할 수행.
- 클래스와 구조체 열거형에 모두 추가 가능.
- get, set 메서드를 통하여 간결화.
- 기존에 인스턴스를 외부에서 메서드를 통해 내부 값에 접근하려면 접근자, 설정자 두개의 메서드를 구현해야 했음 (가독성이 나빠짐).
// 연산 프로퍼티를 생성할때
// var oppositePoint: CoordinatePoint{} 이런 형태로 ( : 구조체명 ) 해주는 이유를 모르겠음
읽기 전용 연산 프로퍼티
- get 메서드만 사용
메서드
- 특정 타입에 관련된 함수