[Swift] 지연 저장 프로퍼티(Lazy Stored Properties)

2023. 10. 5. 09:00·Apple/Swift
728x90
반응형

지연 저장 프로퍼티(Lazy Stored Properties)

Swift에서 인스턴스를 생성할 때 프로퍼티에 값이 필요 없다면 프로퍼티를 옵셔널로 선언해줄 수 있습니다. 그런데 그것과는 조금 다른 용도로 필요할 때 값이 할당되는 지연 저장 프로퍼티(Lazy Stored Properties)가 있습니다.  또한 지연 저장 프로퍼티는 호출이 있어야 값을 초기화를 하게 되고 lazy라는 키워드를 써서 사용합니다.

 

지연 저장 프로퍼티는 초기 값이 필요할 때 계산되지 않고, 처음으로 접근될 때만 계산이 됩니다. 지연 저장 프로퍼티는 주로 복잡한 클래스나 구조체를 구현할 때 많이 사용합니다. 지연 저장 프로퍼티를 사용한다면 리소스를 절약하고 성능을 향상시킬 수 있다는 장점이 있습니다. 지연 저장 프로퍼티를 사용하는 방법은 아래와 같습니다.

 

사용 방법

lazy var propertyName: PropertyType = {
    // 초기화 코드
    // propertyName에 할당될 초기 값 반환
    return initialValue
}()

위의 코드에서 propertyName은 지연 저장 프로퍼티의 이름이며, PropertyType은 해당 프로퍼티의 타입을 나타냅니다. 초기화 코드 부분은 지연 저장 프로퍼티가 처음으로 접근될 때 실행되며, 그 결과가 propertyName에 할당됩니다.

 

지연 저장 프로퍼티의 예제 코드를 살펴보도록 하겠습니다.

 

예제 코드

class ImageProcessor {
    lazy var image: UIImage = {
        print("Image loading...")
        let loadedImage = loadImageFromDisk()
        return loadedImage
    }()
    
    func processImage() {
        let processedImage = applyFilters(to: image)
        display(image: processedImage)
    }
    
    private func loadImageFromDisk() -> UIImage {
        // 디스크에서 이미지 로드하는 로직
        return UIImage(named: "image.jpg")!
    }
    
    private func applyFilters(to image: UIImage) -> UIImage {
        // 이미지에 필터 적용하는 로직
        return filteredImage
    }
    
    private func display(image: UIImage) {
        // 이미지를 화면에 출력하는 로직
    }
}

위의 예제에서 image는 지연 저장 프로퍼티입니다. 처음으로 image에 접근할 때(processImage() 메서드 내부), 초기화 코드 블록이 실행되어 "Image loading..."이 출력되고, 디스크에서 이미지를 로드하여 반환합니다. 그 후부터는 이미지가 메모리에 캐시되어 재사용됩니다.

 

이처럼 지연 저장 프로파일르 사용하면 필요한 시점까지 값을 계산하지 않고도 리소스를 절약할 수 있으며, 복잡한 초기화 작업을 수월하게 처리할 수 있습니다.

 

감사합니다.


틀린 부분이 있거나 더 좋은 내용 훈수 환영합니다!

공감과 댓글 부탁드립니다.

728x90
반응형

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

[Swift] Raw Values (원시 값)  (0) 2023.10.10
[Swift] 델리게이트 패턴(Delegate Pattern)  (4) 2023.10.08
[Swift] 함수에 대한 개념과 다양한 예시 소스  (5) 2023.09.29
[Swift] 제어문과 다양한 예제 정리  (0) 2023.09.26
[Swift] 업캐스팅과 다운캐스팅, Swift와 Kotlin 옵셔널의 차이  (0) 2023.09.25
'Apple/Swift' 카테고리의 다른 글
  • [Swift] Raw Values (원시 값)
  • [Swift] 델리게이트 패턴(Delegate Pattern)
  • [Swift] 함수에 대한 개념과 다양한 예시 소스
  • [Swift] 제어문과 다양한 예제 정리
P_Piano
P_Piano
Apple 생태계 개발자가 되기 위한 학습과 경험의 기록
    반응형
    250x250
  • P_Piano
    피피아노의 개발 일지
    P_Piano
  • 전체
    오늘
    어제
    • 분류 전체보기 (207) N
      • Apple (125) N
        • iOS (22)
        • visionOS (4)
        • Swift (68) N
        • UIKit (2)
        • SwiftUI (23)
        • RxSwift (2)
        • Xcode (4)
      • C언어 (5)
      • C++ (8)
      • Dart (1)
      • Python (3)
      • JavaScript (17)
      • Git (1)
      • CS (39)
        • 디자인 패턴 (6)
        • 네트워크 (20)
        • 운영체제 (8)
        • Database (5)
        • 자료구조 (0)
      • IT 지식 (2)
      • IT 뉴스 (4)
      • 출처 표기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    비동기
    Optional
    변수
    함수
    UIKit
    swiftUI
    티스토리챌린지
    Vision Pro
    프로세스
    프로그래머스
    디자인패턴
    ios
    연산자
    SWIFT
    이니셜라이저
    제어문
    클래스
    combine
    Initializers
    배열
    스위프트
    운영체제
    프로퍼티 래퍼
    오블완
    자바스크립트
    네트워크
    visionOS
    옵셔널
    코딩테스트
    Xcode
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
P_Piano
[Swift] 지연 저장 프로퍼티(Lazy Stored Properties)
상단으로

티스토리툴바