연산프로퍼티 - getter&setter

라무·2023년 8월 9일

정의

💡 다른 저장 프로퍼티의 값을 읽어 연산을 실행하거나, 프로퍼티로 전달받은 값을 다른 프로퍼티에 저장한다

역할

  1. 인스턴스의 내외부의 값을 연산해서 적절한 값을 돌려주는 역할
  2. 내부의 프로퍼티 값을 직접적으로 설정해주는 설정자 역할

특징

  • 클래스, 구조체, 열거형에서 사용된다
  • 저장 프로퍼티와 달리 저장 공간을 갖지 않는다 → 즉, 연산 프로퍼티는 직접적으로 값을 가지지 않는다
  • 항상 var로 선언된다→ 이유: 다른 저장 프로퍼티의 값을 읽어 연산을 실행하거나 전달받은 값을 다른 프로퍼티에 저장하기 때문에
  • 선언된 자료형 뒤에 {}를 붙이는 것이 연산 프로퍼티의 사용법이다
  • setter가 필요없다면 getter만 호출해줄 수 있다

직접적으로 값을 가지지 않는다면 어떻게 프로퍼티에 접근할까? → getter와 setter를 이용한다

  • 값을 직접적으로 저장하지 않고 getter와 setter를 사용해서 값에 직접적으로 접근할 수 있다
  • set함수에서 매개변수의 이름을 설정해주지 않으면 newValue라는 이름으로 접근이 가능하다
  • get을 getter로 부르고 set을 setter로 부른다!!!!!!!!!

주의사항

  • 연산프로퍼티는 어떠한 값을 저장하는 것이 아니기 때문에 타입 추론을 통해서 형식을 알 수 없다
  • 타입추론을 할 수 없기 떄문에 반드시! 선언할 떄 타입 어노테이션을 통해 자료형을 명시해야 한다
  • 연산프로퍼티를 사용하려면 읽거나 쓸 수 있는 저장 프로퍼티가 먼저 존재해야 한다

getter(get)과 setter(set)

getter

💡 말 그대로 무언가를 얻는 것으로 어떤 저장 프로퍼티의 값을 연산해서 return할 것인지 정한다

반드시 return 구문이 존재해야 한다

setter

💡 말 그대로 얻는 것으로 어떤 파라미터를 받아서 어떤 저장 프로퍼티에 어떻게 설정할 것인지를 구현한다

예시

  • name과 age, detailInfo는 저장프로퍼티
  • info는 get과 set을 가지므로 연산프로퍼티라고 할 수 있다
    • self.info는 에러가 난다 → 이유: 연산프로퍼티 자체를 get혹은 set안에서 호출하면 안된다
import UIKit

class Friend {
    var name: String = "" //저장 프로퍼티
    var age: Int //저장프로퍼티
    
    var detailInfo : String = ""
    
    var info : String { //info는 get과 set을 가지므로 연산프로퍼티이다
        //getter는 데이터를 가지고 올 때 가공을 해서 가지고 올 수 있는 것을 의미한다
        get {
            return  "내 친구 : \(name)"
        }
        //어떤 변수에 값이 들어왔을 때 연관된 값의 변수의 값을 변경해줄 수 있는 것을 의미한다
        set {
            detailInfo = "info에서 설정된 값: " + newValue
						self.info = name //Error!!!!!!!!!!!연산프로퍼티를 여기서 호출하면 안된다
        }
    }
    
		//초기화 구문
    init(_ name: String, _ age: Int) {
        self.name = name //내가 가진 name이 매개변수로 들어온 name이다
        self.age = age
    }
}

let myFriend = Friend("rayoung", 26) //초기화 구문을 통해서 파라미터에 값을 넣어준다

//getter
myFriend.info //내 친구 : rayoung이 출력된다 -> 즉, getter을 통해서 값을 가지고 온것

//setter
myFriend.info = "호호호" //setter을 통해서 값을 셋팅해준것 -> newValue가 '호호호'가된다

//setter을 통해서 값이 새롭게 바뀐 부분 호출
myFriend.detailInfo //getter을 가지고 오게 된다
profile
ios 개발을 하고있는 라무의 사적인 기술 블로그

0개의 댓글