새싹 iOS 4주차 - 2

영 yyyng·2022년 7월 26일
0

Sesac

목록 보기
20/32

프로퍼티
메소드
타입 프로퍼티
저장 프로퍼티
@_@)???

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

//인스턴스 저장 프로퍼티는 메모리에 올라가야함, 값이 달라질 수 있음, 열거형(초기화 구문만들수 없기 때문에)에서 사용불가
//타입 프로퍼티는 인스턴스랑 상관없이 접근 가능. 따라서 열거형에서 타입 저장 프로퍼티, 타입 연산 프로퍼티는 모두 사용 가능.




//타입 저장 프로퍼티, 타입 연산 프로퍼티, 인스턴스 저장 프로퍼티, 인스턴스 연산 프로퍼티
profile
yyyng2.github.io

0개의 댓글