프로퍼티
메소드
타입 프로퍼티
저장 프로퍼티
@_@)???
import Foundation
import UIKit
//인스턴스 생성여부와 상관없이 타입프로퍼티의 값은 하나다.
struct User{
static var originalName = "RealName" //타입 저장 프로퍼티
var nickName = "NickName" //인스턴스 저장 프로퍼티
}
var user1 = User()
user1.nickName = "user1"
print(user1, User.originalName) //user1, RealName
var user2 = User()
User.originalName = "OriginalName"
print(user2, User.originalName) //NickName, OriginalName
var user3 = User()
print(user3, User.originalName) //NickName, OriginalName
var user4 = User()
//연산 프로퍼티(인스턴스 연산 프로퍼티 / 타입 연산 프로퍼티)
struct BMI{
var nickname: String
var weight: Double
var height: Double
//저장 프로퍼티는 메모리 0, 연산 프로퍼티는 저장 프로퍼티를 활용해서 주로 원하는 값을 반환하는 용도로 사용
//계산하는 값에 따라 결과가 달라져서 변수 var 선언하지만 읽기 전용(read-only) 프로퍼티
var BMIResult: String{
get {
let bmiValue = (weight * weight) / height
let bmiStatus = bmiValue < 18.5 ? "저체중" : "정상"
return "\(nickname)님의 BMI 지수는 \(bmiValue)로 \(bmiStatus)입니다."
}
set {
nickname = newValue
}
}
}
var bmi = BMI(nickname: "NickName", weight: 50, height: 180)
let bmiValue = (bmi.weight * bmi.weight) / bmi.height
let bmiStatus = bmiValue < 18.5 ? "저체중" : "정상"
var result = "\(bmi.nickname)님의 BMI 지수는 \(bmiValue)로 \(bmiStatus)입니다."
print(result)
print(bmi.BMIResult)
bmi.BMIResult = "set nickname"
print(bmi.BMIResult)
class FoodRestaurant{
let name = "Chicken"
var totalOrderCount = 0
var newOrder: Int{
get {
return totalOrderCount * 5000
}
set {
totalOrderCount += newValue // newValue 기본 파라미터, 변경가능
}
}
}
let food = FoodRestaurant()
print(food.newOrder)
food.totalOrderCount += 20
print(food.newOrder)
food.newOrder = 10
print(food.newOrder)
food.newOrder = 100
print(food.newOrder)
food.newOrder = 5
print(food.newOrder)
//열거형은 타입 자체, 인스턴스 생성 불가, 그래서 초기화 구문 없음
//인스턴스 생성을 통해서 접근할 수 있는 인스턴스 저장 프로퍼티 사용 불가
//인스턴스 연산 프로퍼티는 사용 가능
//메모리 관점 + 열거형이 컴파일 타임에 확정되야아 한다
//타입 저장 프로퍼티 = 열거형에서 사용가능
enum ViewType{
case start
case change
//var nickname: String = "instance stored property"
var nickname: String{
get{
return "nickname"
}
}
static var title = "시작하기"
}
//let type = ViewType()
ViewType.title
//인스턴스 저장 프로퍼티는 메모리에 올라가야함, 값이 달라질 수 있음, 열거형(초기화 구문만들수 없기 때문에)에서 사용불가
//타입 프로퍼티는 인스턴스랑 상관없이 접근 가능. 따라서 열거형에서 타입 저장 프로퍼티, 타입 연산 프로퍼티는 모두 사용 가능.
//타입 저장 프로퍼티, 타입 연산 프로퍼티, 인스턴스 저장 프로퍼티, 인스턴스 연산 프로퍼티