Swift - 연산 프로퍼티

이원석·2024년 11월 12일

Swift

목록 보기
6/38

연산프로퍼티

클래스, 구조체, 열거형에서 사용된다. 저장 프로퍼티와 달리 저장 공간을 갖지 않고, 다른 "저장프로퍼티"의 값을 읽어 연산을 실행하거나, 프로퍼티로 전달받은 값을 다른 프로퍼티에 저장한다. 때문에 항상 var로 선언되어야 한다

형식)

var name: Type{
	get{	//getter(다른 저장 연산프로퍼티의 값을 얻거나 연산하여 리턴할 때 사용
    	statements
        return expr
    }
    set(name){//setter(다른 저장프로퍼티에 값을 저장할 때 사용
    	satements
    }
}
  • 연산프로퍼티는 어떠한 값을 저장하는 것이 아니기 때문에 타입추론으로 형식을 알 수 없음 -> 반드시 선언할 때 자료형을 명시해야 함
  • getter은 어떤 저장 프로퍼티의 값을 연산해서 return할 것인지, return 구문이 항상 존재해야 함
  • setter는 파라미터로 받은 값을 어떤 저장 프로퍼티에 어떻게 설정할 것인지 구현

ex)

//잘못된 예시
class Person{
	var alias: String { //다른 프로퍼티가 아닌 자신을 처리하므로 에러발생
    	get{
        	return alias
        }
        set(name) {
        	self.alias = name
        }
    }
}

//옳은 예시
class Person{
	var name: String = "abc"
	var alias: String {
    	get{
        	return name // 저장프로퍼티인 name 리턴
        }
        set(name) {
        	self.name = name // 저장프로퍼티인 name 저장
        }
    }
}

class Person{
	var name: String = "abc"
	var alias: String {
    	get{
        	return name + "hijk"// 원하는 연산추가 가능
        }
        set(name) {
        	self.name = name "defg"// 원하는 연산 추가 가능
        }
    }
}

연산프로퍼티 사용방법

class Person{
	var name: String = "abc"
	var alias: String {
    	get{
        	return name + "hijk"// 원하는 연산추가 가능
        }
        set(name) {
        	self.name = name "defg"// 원하는 연산 추가 가능
        }
    }
}

let people: Person = .init()

//get에 접근
print(people.alias) // abchijk

//set에 접근
people.alias = "가나다"
print(people.name) // 가나다defg
  • 연산프로퍼티인 alias값을 읽으면 alias의 getter가 실행
  • 연산프로퍼티인 alias에 값을 쓰면 setter의 파라미터로 넘어가 set 함수 실행

newValue : set 파라미터 생략

newValue를 통해 set의 파라미터 생략가능(스펠링 및 대소문자 변경X)

var displayValue: Double{
        get{
            return Double(display.text!)!
        }
        set{
            display.text = String(newValue)
        }
}
    
displayValue = Double.pi

get-only

연산 프로퍼티를 사용할 때 getter만 선언 가능

class Person{
	var name: String = "abc"
	var alias: String {
    	get{
        	return name + "hijk"
        }
    }
}
//get-only일 경우 get구문 생략 가능
class Person{
	var name: String = "abc"
	var alias: String {
        return name + "hijk"
    }
}

set-only는 안됨


참조
개발자 소들이

0개의 댓글