티스토리 뷰

728x90
반응형

우선, 간단하게 lazy, tpye property 가 무엇인지 정리해보면

  • lazy property 는 호출할 때 연산을 하는 지연 연산 프로퍼티이다.
  • type property 는 인스턴스에서 호출하는 것이 아닌 타입에서 호출될 때 한 번만 메모리에 올라가는 프로퍼티이다.

✅ lazy property

lazy property 는 인스턴스를 생성할 때 초기값이 연산되지 않고, 호출될 때 지연 연산으로 생성이 되면서 메모리에 올라간다. 그래서 var 로만 사용할 수 있다.
이후 재호출할 때는 다시 초기화가 진행되지 않고 이전에 생성된 변수를 그대로 사용한다.

이를 통해 사용하기 전의 프로퍼티에 대한 메모리를 효율적으로 사용할 수 있다.

✅ type property

type property 는 인스턴스를 생성하지 않고도 타입으로 호출할 수 있다.

static 키워드로 선언되고, 저장 타입 프로퍼티의 경우는 선언할 때 항상 초기화 되어 있어야 한다. 초기화를 하지 않으면 initializer expression(값 지정) 혹은 연산 프로퍼티로(getter/setter)가 필요하다고 오류를 알린다.

type property 는 인스턴스가 생성될 때 initializer 에 의해서 초기화되지 않는 것일까?

기본 프로퍼티는 인스턴스가 생성될 때마다 매번 생성된다. 반면에 타입 프로퍼티는 한번 메모리에 올라가면 그 뒤로는 생성되지 않는다. 그렇기 때문에 인스턴스가 생성될 때 호출되는 initializer 와 상관없이 초기값을 가져야만 하는 것이다.

 

저장 프로퍼티는 호출할 때 최초로 한 번 메모리에 올라가는데 이는 lazy 와 동일하게 작동한다.

 

lazy 는 항상 var 로 선언이되어야 하는데 static 은 let 과 var 모두 가능하다. 왜일까?

lazy 프로퍼티는 인스턴스를 생성할 때 값을 가지지 않고, 사용할 때 지연 연산이 되어 프로퍼티를 생성합니다. 그래서 let 으로 선언하게 되면 값을 변경할 수 없기 때문에 var 로만 선언되어야 한다.

반면에, 타입 프로퍼티는 인스턴스를 생성하는 것과 관계 없이 최초 사용할 때 초기화되기 때문에 let 과 var 로 선언이 가능하다.

  • 추가적으로, static 키워드를 사용하는 타입 프로퍼티와 메소드는 subclass 에서 오버라이딩을 할 수 없다. 이때는 class 키워드를 사용하면 가능하다.
  • type property 는 특정 용도로 객체를 하나만 생성하여 공용으로 사용하는 싱글톤 패턴을 구현할 때 사용된다.

출처:
lazy var 정리
Swift) 프로퍼티 정복하기 (3/4) - 타입 프로퍼티(Type Property)
Swift) 싱글톤 패턴(Singleton Pattern)

728x90
반응형
댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
링크
Total
Today
Yesterday