스위프트 프로그래밍 3판을 보고 정리한 내용입니다.
클래스, 구조체 또는 열거형 등에 관련된 값을 뜻한다.
인스턴스의 변수 또는 상수를 의미
구조체와 클래스에서만 쓰일 수 있다.
struct Person{
var name:String //저장 프로퍼티
var age:Int //저장 프로퍼티
}
호출이 있어야 값을 초기화 한다.
복잡한 클래스나 구조체를 구현할 때 사용된다.
반드시 var로 선언해야 된다.
struct Person{
lazy var name:String
var age:Int
}
값을 저장한 것이 아니라 특정 연산을 실행한 결괏값을 의미
클래스, 구조체, 열거형에 쓰일 수 있다.
struct Person{
var name : String
var age : Int
var changeAge : Int{
get{
return age - 1
}set(inputValue){
age = inputValue + 1 //return 키워드 생략 가능
}
}
}
var person:Person = Person(name: "junseole", age: 27)
person.changeAge = 26 // age는 27이 된다.
새로운 인스턴스가 생성될 때마다 새로운 프로퍼티도 같이 생성
특정 타입의 모든 인스턴스에 공통으로 사용되는 값을 정의할 때 유용하다.
Static 키워드를 사용
property의 값이 변할 때 값의 변화에 따른 특정 작업을 실행
저장 프로퍼티에 적용할 수 있으며 부모클래스로부터 상속받을 수 있다.
프로퍼티의 값이 변경되기 직전에 호출한다.
매개변수를 따로 지정하지않으면 newValue라는 이름이 자동 저장된다.
다른 이름을 사용하고 싶다면 willSet(newValueName) 이런식으로 선언하면된다.
프로퍼티의 값이 변경된 직후에 호출한다.
매개변수를 따로 지정하지않으면 oldValue라는 이름이 자동 저장된다.
다른 이름을 사용하고 싶다면 didSet(oldValueName) 이런식으로 선언하면된다.
class Account{
var credit:Int = 0{
willSet{
print("잔액이 \(credit)원에서 \(newValue)로 변경될 예정입니다.")
}
didSet{
print("잔액이 \(oldValue)원에서 \(credit)로 변경 되었습니다.")
}
}
}
let myAccount: Account = Account()
// 잔액이 0원에서 1000로 변경될 예정입니다.
myAccount.credit = 1000
// 잔액이 0원에서 1000로 변경 되었습니다.
특정 타입에 관련된 함수를 뜻한다.
특정 타입의 인스턴스에 속한 함수를 뜻함
인스턴스 메서드는 함수와 달리 특정 타입 내부에 구현한다.
구조체 내부에서 데이터를 수정 할때는 mutating 키워드를 선언해야한다.
struct Point{
var x:Int = 0
var y:Int = 0
func moveTo(x:Int, y:Int){
self.x = x // 에러 발생
self.y = y // 에러 발생
}
}
struct Point{
var x:Int = 0
var y:Int = 0
//mutating 을 넣어줌으로써 오류 해결
mutating func moveTo(x:Int, y:Int){
self.x = x
self.y = y
}
}
자바의 this와 비슷하게 인스턴스 자기 자신을 가리키는 프로퍼티이다.
메소드 키워드 func 앞에 static 혹은 class 키워드를 추가하면 된다.
static 메소드는 서브클래스에서 오버라이드 할 수 없는 타입 메소드이고
class 메소드는 서브클래스에서 오버라이드 할 수 있는 타입 메소드이다.