ios

Swift - 프로퍼티(저장, 연산, 타입)

Product ? Project ? IT ? 2023. 2. 10. 11:40

안녕하세요 ! 오늘은 swift의 프로퍼티에 대해서 알아보려고 합니다!

먼저 프로퍼티가 무엇인가요??

프로퍼티는 클래스, 구조체 또는 열거형 등에 관련된 값을 뜻한다!

프로퍼티에는 3가지의 종류가 있습니다.

1. 저장 프로퍼티 - 인스턴스의 변수 또는 상수를 의미!

2. 연산 프로퍼티 - 값을 저장하는 게 아닌 특정 연산을 실행하는 결과 값.

3. 타입 프로퍼티 - 특정 타입에서만 실행되는 것!

먼저 Dog이라는 구조체를 만들어 주었습니다.

또한 name, gender를 선언해주었죠.

여기서 name, gender는 프로퍼티입니다.

또한 var dog으로 프로퍼티에 값을 선언해주었습니다.

이렇게 인스턴스 내부에 저장이 되어 있는 프로퍼티를

저장 프로퍼티라고 합니다!

그러면 만약 저장 프로퍼티의 값을 변경하려면?

당연하게 오류가 납니다!

변수로 선언된 프로퍼티만 값을 변경할 수 있습니다!

gender는 상수니까 당연히 변경이 불가능하죠.

그럼 위에 같이 새로운 dog2를 선언해주고

name을 변경하려고 작성했는데 왜 오류가 날까요?

구조체인 dog2가 let 상수형이기 때문입니다.

구조체 인스턴스를 상수로 선언한다면 내부도 전부 상수가 됩니다!

값 타입이라는 특징을 가지고 있기 때문이죠!


그러면 클래스는 참조타입인데 어떻게 나올까요?

위처럼 클래스는 이름이 변경이 가능한 것을 확인할 수 있습니다!

클래스는 참조타입이라는 특징을 가지고 있다는 것을 확인 할 수 있습니다!!


연산 프로퍼티

- 클래스, 구조체, 열거형에서 사용 가능!

값을 직접 저장하지 않지만 getter, setter를 사용해서 다른 프로퍼티와 값에 직접 접근이 가능하다!

위의 코드를 보면 직접 값을 저장하지 않았지만, 향후에 값을 보여주는 것을 볼 수 있습니다!

연산 프로퍼티는 인스턴스 내, 외부의 값을 연산해서 적절한 값을 돌려주는 접근자의 역할이나

내부의 프로퍼티의 값을 설정하는 설정자의 역할로 사용할 수 있습니다.

set을 사용할 때 매개변수의 이름을 사용해주지 않는다면 newValue라는 값으로 대체할 수 있습니다!


그러면 저장 프로퍼티는 어떻게 사용이 될까요?

위의 코드를 보면 credit은 저장형 프로퍼티입니다.

프로퍼티에는 willSet, didSet이 선언되어있습니다.

프로퍼티의 옵저버에는 2가지가 존재합니다.

값이 저장되기 직전에 호출되는 willSet

값이 저장된 직후에 호출되는 didSet

이렇게 2가지가 존재합니다.

willSet은 새로 저장될 프로퍼티의 값을 상수 매개변수 값으로 전달합니다

위에서 newValue는 이름을 따로 지정하지 않았을 때 사용가능합니다.

didSet 옵저버는 프로퍼티의 기본 값이 상수 매개변수로 전달됩니다!

이름을 따로 지정하지 않는다면 oldValue 매개변수의 이름이 됩니다.

위의 코드처럼 account.credit으로 1000이라는 값을 대입하자

newValue / credit에 들어간 것을 확인할 수 있습니다!


타입 프로퍼티

타입 프로퍼티는 인스턴스 생성 없이 객체 내의 프로퍼티에 접근을 가능하게 하는 것입니다.

프로퍼티 타입 자체와 연결하는 것을 의미합니다!

타입 프로퍼티는 저장 프로퍼티와 연산 프로퍼티에서만 사용 가능합니다.

static 키워드를 사용해서 정의합니다!

코드와 같이 인스턴스가 없어도 . 으로 연결하면 가능합니다!

hello로 변경했을 때 바로 변경되는 것을 확인할 수 있습니다!

간략하게 swift에서 프로퍼티 3가지를 알아보았습니다!