Swift.Property and Method

junseole·2021년 8월 10일
0

Swift-Basic

목록 보기
3/12
post-thumbnail

스위프트 프로그래밍 3판을 보고 정리한 내용입니다.

Property

클래스, 구조체 또는 열거형 등에 관련된 값을 뜻한다.

1. 저장 프로퍼티(Stored Properties)

인스턴스의 변수 또는 상수를 의미

구조체와 클래스에서만 쓰일 수 있다.

struct Person{
  var name:String //저장 프로퍼티
  var age:Int //저장 프로퍼티
}

지연 저장 프로퍼티

호출이 있어야 값을 초기화 한다.

복잡한 클래스나 구조체를 구현할 때 사용된다.

반드시 var로 선언해야 된다.

struct Person{
  lazy var name:String
  var age:Int
}

2. 연산 프로퍼티(Computed Properties)

값을 저장한 것이 아니라 특정 연산을 실행한 결괏값을 의미

클래스, 구조체, 열거형에 쓰일 수 있다.

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이 된다.

3. 타입 프로퍼티(Type Properties)

새로운 인스턴스가 생성될 때마다 새로운 프로퍼티도 같이 생성

특정 타입의 모든 인스턴스에 공통으로 사용되는 값을 정의할 때 유용하다.

Static 키워드를 사용

4. 프로퍼티 감시자(Property Observers)

property의 값이 변할 때 값의 변화에 따른 특정 작업을 실행

저장 프로퍼티에 적용할 수 있으며 부모클래스로부터 상속받을 수 있다.

Willset

프로퍼티의 값이 변경되기 직전에 호출한다.

매개변수를 따로 지정하지않으면 newValue라는 이름이 자동 저장된다.

다른 이름을 사용하고 싶다면 willSet(newValueName) 이런식으로 선언하면된다.

didset

프로퍼티의 값이 변경된 직후에 호출한다.

매개변수를 따로 지정하지않으면 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로 변경 되었습니다.

Method

특정 타입에 관련된 함수를 뜻한다.

인스턴스 메서드

특정 타입의 인스턴스에 속한 함수를 뜻함

인스턴스 메서드는 함수와 달리 특정 타입 내부에 구현한다.

구조체 내부에서 데이터를 수정 할때는 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
  }
}

self 프로퍼티

자바의 this와 비슷하게 인스턴스 자기 자신을 가리키는 프로퍼티이다.

타입 메소드(type method)

메소드 키워드 func 앞에 static 혹은 class 키워드를 추가하면 된다.

static 메소드는 서브클래스에서 오버라이드 할 수 없는 타입 메소드이고

class 메소드는 서브클래스에서 오버라이드 할 수 있는 타입 메소드이다.

profile
Swift와 함께 여행중입니다.

0개의 댓글