KWiOS
KWiOS0101
KWiOS
  • 분류 전체보기 (108)
    • Algorithm (41)
      • 이코테 (14)
      • 이코테 문제풀이 (21)
      • 프로그래머스 (6)
    • CS (1)
      • 모두를 위한 컴퓨터 과학(CS50 2019) (0)
    • iOS (15)
    • Swift (36)
      • Swift문법 (32)
      • 기타 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 6

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
KWiOS

KWiOS0101

Swift/Swift문법

Swift문법 - Properties

2023. 3. 19. 23:05

프로퍼티란?

클래스, 구조체, 열거형과 관련한 값


프로퍼티 종류

  1. 저장 프로퍼티
  2. 연산 프로퍼티
  3. 타입 프로퍼티

저장 프로퍼티

  • 클래스나 구조체에서 단순히 변수나 상수에 값을 저장하고 있는 프로퍼티

  • 클래스, 구조체에서만 사용 가능

  • 인스턴스를 생성해주어야 초기화됨

  • 구조체는 인스턴스를 var로 선언해야만 내부 프로퍼티 변경 가능

  • 클래스는 인스턴스를 var,let으로 선언해도 내부 프로퍼티 변경 가능

    // 구조체 
    struct Car {
      var model : String = "A6"
      let brand : String = "Audi"
    }
    var car = Car()
    car.model = "A7"
    car.brand = "BMW" // 에러
    // 클래스
    class Car {
      var model : String
      let brand : String
    
      init(){
          self.model = "A6"
          self.brand = "Audi"
      }
    }
    let car = Car(model: "A6", brand: "Audi")
    car.model // 상수로 인스턴스 생성했어도 내부 저장프로퍼티인 model은 값 변경이 가능하다.
    car.brand // 에러

Lazy Stored Properties 게으른 저장 프로퍼티

  • 무조건 var 를 사용해야하며 인스턴스가 초기화 되는 시점이 아니라 속성에 처음 접근하는 시점에 초기화 되기 때문에 상수를 사용할 수 없다.
  • 키워드는 lazy를 붙여준다.
  • 인스턴스를 생성할때 초기화 시켜주지 않아 항상 기본값이 있어야한다.
  • 인스턴스 이름으로 속성에 접근한다.
struct Test {
    init(){
        print("생성 완료!")
    }
}
struct Car {
    var model : String = "A6"
    lazy var test: Test = Test()
}
var car = Car()
car.test // 이때 생성

lazy를 사용하지 않으면 인스턴스 생성과 동시에 print로그가 나온다. lazy를 사용하면 인스턴스 생성때 print로그가 나오지 않고 호출 했을때 생성된다.


연산 프로퍼티

  • 값을 저장하고 있지 않고,특정하게 계산한 값을 반환해주는 프로퍼티

  • 값을 탐색하고 간접적으로 다른 프로퍼티 값을 설정할 수 있는 방법 제공

  • 클래스, 구조체, 열거형에서 사용 가능

  • get 블록과 set블록이 있다.

  • get - 속성을 호출했을때

  • set - 속성에 새로운 값을 할당할때

    struct Test {
      var width: Double
      var height: Double
      var result = 0.0
    
      var area: Double {
          get {
              return width * height
          }
          set {
             result += newValue
          }
      }
    

}
var test = Test(width: 1.5, height: 2.5)
print("계산 결과 : (test.area) ") // get블록 실행되서 1.5 * 2.5값 반환
test.area = 10 // set블록 실행되서 result에 10 저장
test.result // 10

> 대부분 읽기전용으로 작성을 많이한다. 읽기 전용으로 작성하면 생략해서 작성이 가능한데 아래 소스와 같이 만들수있다.
```swift
    var area: Double {
        return width * height
    }

프로퍼티 옵저버

  • 새로운 값이 설정될 때마다 이 이벤트를 감지할 수 있는 옵저버를 제공한다.
  • willset과 didset 키워드를 사용한다.
  • willset - 새로운 값을 newValue로 받을 수 있다.
  • didset - 먼저 저장되어있는 값을 oldValue로 받을 수 있다.
  • 일반적으로 어떤 속성의 값이 변경되었을때 UI의 상태를 변경해주거나 특정 메소드를 호출할때 사용한다.
struct Car {
    var model: String
    var brand: String

    var state = "브랜드가 없습니다." {
        willSet {
            print("새로운 브랜드 \(newValue)로 변경되었습니다. ")
        }
        didSet {
            print("이전 브랜드는 \(oldValue) 입니다.")
        }
    }
}
var car = Car(model: "A6", brand: "Audi")
car.state = "BMW"
car.state = "Benz"


타입 프로퍼티

인스턴스 프로퍼티란?
구조체와 클래스에 속한 저장프로퍼티와 연산 프로퍼티를 말한다.

타입 프로퍼티

  • static 키워드를 사용한다. static을 사용하면 타입 프로퍼티구나 라고 이해하면 된다
  • class 키워드를 사용하여 서브클래스에서 슈퍼클래스의 구현을 재정의할 수 있다.
  • 재정의(override)
  • 저장 프로퍼티에 사용하면 저장 타입 프로퍼티라고 한다.
  • 연산 프로퍼티에 사용하면 연산 타입 프로퍼티라고 한다.
  • 저장, 연산 프로퍼티와는 다르게 타입 이름으로 접근한다.
    • Type.stored Type.computed
  • 구조체, 클래스, 열거형에서도 사용 가능하다.
    struct Type {
      static var stored: String = "저장 타입 프로퍼티"
      static var computed: String {
          return "연산 타입 프로퍼티"
      }
    }
    Type.stored // "저장 타입 프로퍼티"
    Type.computed // "연산 타입 프로퍼티"
// class 키워드를 사용해서 오버라이드 
class FirstClass {
    class var first: String {
        return "슈퍼클래스"
    }
}

class SecondClass : FirstClass {
    override static var first: String {
        return "서브클래스"
    }
}

'Swift > Swift문법' 카테고리의 다른 글

Swift문법 - self & super  (0) 2023.04.02
Swift문법 - Subscript  (0) 2023.03.26
Swift문법 - Struct and Class  (0) 2023.03.12
Swift문법 - Enumeration  (0) 2023.03.05
Swift문법 - Collection  (0) 2023.02.26
    'Swift/Swift문법' 카테고리의 다른 글
    • Swift문법 - self & super
    • Swift문법 - Subscript
    • Swift문법 - Struct and Class
    • Swift문법 - Enumeration
    KWiOS
    KWiOS

    티스토리툴바