반응형
Greensky0026
삽질러의 대환장 공사판
Greensky0026
전체 방문자
오늘
어제
  • 분류 전체보기 (241)
    • Language (56)
      • JAVA (13)
      • Swift (38)
      • Kotlin (4)
      • Dart (0)
      • PHP (0)
      • JavaScript (1)
    • IDE & Framework (92)
      • Spring (10)
      • Android (48)
      • iOS (8)
      • NodeJS (1)
      • CodeIgniter (3)
      • Flutter (1)
      • 분류중 (18)
    • Infra (8)
    • Database (12)
    • VCS (4)
    • Debug Log (34)
      • java (7)
      • swift (3)
      • Android (9)
      • Web (7)
      • 삽질기 (7)
    • Others (19)
      • 코딩테스트 풀이 (0)
      • IT 이야기 (18)
    • 쉼터 (2)
    • 개발공부 (14)
      • Network (1)
      • 자료구조와 알고리즘 (2)
      • Code design (8)
      • ETC (1)
      • 아카이브 (1)

블로그 메뉴

    공지사항

    • 프로그래머스 코딩 테스트 관련글 비공개 처리

    인기 글

    태그

    • 프로그래밍
    • 타입
    • IT
    • 구축
    • swift
    • 코딩테스트
    • 개발
    • JSP
    • 공부
    • map
    • level1
    • ios
    • kotlin
    • Android
    • reduce
    • 프로그래머스
    • Java
    • swfit
    • xcode
    • 예제

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    Greensky0026

    삽질러의 대환장 공사판

    Swift 프로퍼티 타입들
    Language/Swift

    Swift 프로퍼티 타입들

    2021. 3. 12. 17:55
    반응형

     프로퍼티는 속성이라고도 불린다.

    객체의 일부로, 이름과 값 사이의 연결을 의미힌다.

    즉, 프로퍼티는 객체를 구성하는 블록(내부의 속성)들이다.

    프로퍼티의 종류는 5가지로 나눌 수 있다.

    1. 인스턴스 저장 프로퍼티
    2. 타입 저장 프로퍼티
    3. 인스턴스 연산 프로퍼티
    4. 타입 연산 프로퍼티
    5. 지연 저장 프로퍼티

    저장 프로퍼티

    저장 프로퍼티는 단순히 값을 저장하고 있는 프로퍼티 입니다.

    let 키워드로 불변, var 키워드로 가변 프로퍼티를 만들 수 있습니다.

    struct Coordinate{
    	//불변 프로퍼티로 선언 후 변경 불가
    	let x: Int
    	//가변 프로퍼티로 값 변경이 자유로움
    	var t: Int
    }
    
    var pointA = Coordinate(x: 0, y: 4)
    pointA.x = 2 //error 불변 프로퍼티는 변경 불가능.
    porintA.y = 9

     

    타입 프로퍼티

    타입 프로퍼티 선언을 위해 static 및 class의 두가지 형태를 사용합니다.

    class 형태는 static과 달리 자식클래스에서 상속받아 재정의가 가능합니다.

    물론 값 타입인 열거형과 구조체에서는 상속이나 재정의가 불가능하니,

    class의 기능은 무용지물입니다 ㅠ

    class Intro {
        static var name: String{
            return "녹색하늘"
        }
        class var age: Int{
           return 20
        }
    
        func print(){
            Swift.print(" \(Intro.name)은 \(Intro.age)살 입니다. ")
        }
    }
    
    class Intro2 : Intro {
        override class var age: Int{
           return 25
        }
    	/*
    	static 타입 변수는 재정의가 불가능합니다.
    	override class var name: Int{
    	return "푸른하늘"
        }
    	*/
        override func print(){
            Swift.print(" \(Intro.name)은 \(Intro2.age)살 입니다. ")
        }
    }
    
    var a : Intro = Intro()
    var b : Intro2 = Intro2()
    
    a.print() // 녹색하늘은 20살 입니다.
    b.print() // 녹색하늘은 25살 입니다.

     

    연산 프로퍼티

    연산 프로퍼티는 실제 값을 저장하고 있는게 아니라, getter와 옵셔널한 setter값을 제공해서

    값을 탐색하고 다른 프로퍼티값 또한 설정할 수 있니다.

    연산 프로퍼티는 var로만 선언이 가능합니다.

    struct Exchange {
        var rate: Double = 1200
        var dollar: Double = 0
        var won : Double{
            get{
                return dollar * rate
            }
            set{
    						//set (매개변수명)을 입력하지 않았을시 자동으로 newValue사용가능
                dollar = newValue / rate
            }
        }
    }
    
    var myMoney = Exchange()
    //won을 직접 입력하는것도 가능합니다.
    myMoney.won = 10000
    print (myMoney.won) //10000.0
    
    myMoney.dollar = 11
    print(myMoney.won) //13200.0

     

    저장 프로퍼티와 연산 프로퍼티의 기능은

    함수, 메서드, 클로저, 타입 등 외부에 위치한 지역/전역 변수에도 모두 사용가능합니다.

    var rate = 1000
    var dollar = 40
    var exchange: Int{
    	return rate * dollar
    }
    print(exchange) // 40000

     

    프로퍼티 감시자

    프로퍼티의 값이 변경될 때 동작합니다.

    값의 변경전엔 willSet 블럭이, 직후엔 didSet이 호출됩니다.

    변경 전후로 모두 암시적 매개변수 newValue, oldValue를 사용가능합니다.

    struct Exchange {
    	var rate: Double = 1200 {
    		willSet{ print("환율이 \(rate)에서 \(newValue)로 변경될 예정입니다.")}
    		didSet{ print("환율이 \(oldValue)에서 \(rate)로 변경됬습니다.") }
    	}
    	var dollar: Double = 0
    	var won : Double{
    		get{ return dollar * rate }
    		set{ dollar = newValue / rate }
    	}
    }
    
    var myMoney = Exchange()
    myMoney.rate = 1100
    //환율이 1200.0에서 1100.0로 변경될 예정입니다.
    //환율이 1200.0에서 1100.0로 변경됬습니다.

     

     


    공부에 도움을 준 사이트들

     

    전반적인 공부 가이드라인

    https://yagom.net/

     

    야곰닷넷 - yagom.net

    iOS 개발자들의 놀이터, 배움터, 모임터, 기록보관소 야곰닷넷입니다.

    yagom.net

    애플 공식 스위프트 언어 가이드 한국어 변역 사이트

    https://jusung.gitbook.io/the-swift-language-guide/language-guide/10-properties

     

    프로퍼티 (Properties)

     

    jusung.gitbook.io

    property에 대한 추가 이해

    https://m.blog.naver.com/magnking/220966405605

     

    [JavaScript] property란 무엇인가?

    property?!JavaScript를 공부하다보면 property(프로퍼티)라는 단어를 자주 듣게 됩니다. 만약 property...

    blog.naver.com

    https://negabaro.github.io/archive/js-property

     

    javascript Property란?

     

    negabaro.github.io

    https://enterkey.tistory.com/165

     

    "변수(Variable)"와 "프로퍼티(property)"의 차이가 무엇인가요?

    프로퍼티는 무엇인가? 변수란 무엇인가? 둘 간의 차이가 있다면 어떤 것인가? 기본적인 질문이다. 이것은 언어를 이해하기 위한 기본적인 내용이지만, 대개 자바스크립트에서는 그냥 대충 넘어

    enterkey.tistory.com

    반응형

    'Language > Swift' 카테고리의 다른 글

    Swift 타입캐스팅 (형변환)  (0) 2021.03.13
    Swift 인스턴스의 생성과 소멸  (0) 2021.03.12
    Swift 클로저  (0) 2021.03.11
    Swift 사용자 정의 타입 - 값타입과 참조 타입 [추가정리]  (0) 2021.03.11
    Swift 사용자 정의 타입 - enum  (0) 2021.03.11
      'Language/Swift' 카테고리의 다른 글
      • Swift 타입캐스팅 (형변환)
      • Swift 인스턴스의 생성과 소멸
      • Swift 클로저
      • Swift 사용자 정의 타입 - 값타입과 참조 타입 [추가정리]
      Greensky0026
      Greensky0026
      점이 모여 선이 된다. 내 삽질도 언젠간 거대한 지하 도시가 되겠지!

      티스토리툴바