inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

앨런 iOS 앱 개발 (15개의 앱을 만들면서 근본원리부터 배우는 UIKit) - MVVM까지

활용-8 앱 / 테이블뷰 코드로 만들기, 모델 구성 (활용 앱64강)

활용 앱 64강에서 lazt라는 키워드를 삭제해도되나요?

239

ios개발자

작성한 질문수 8

0

안녕하세요

Member구조체에서 memberImage를 Lazy 키워드로 작성했는데요

이걸 삭제하고 그냥 하면 왜 안되나요?

 

ios swift

답변 1

0

앨런(Allen)

네 안녕하세요 듀듀 님.
swift문법 관련 lazy 키워드에 대해서 먼저 좀 찾아보시긴 하셔야 할 것 같아요.


그래도 최대한 이해하실 수 있는 선에 쉽게 설명드려보자면,

일반적으로 lazy를 사용하는 것은 "메모리에 나중에(lazy) 올라간다"는 의미를 가지고 있어요.
(여기서는 name, age, phone... 등 다른 저장 속성(stored property)보다 나중에 메모리에 올라간다는 의미예요.)

여기서는 Member 구조체에 name이라는 속성이 선언이 되어 있고,
(1) 해당 name속성이 먼저 메모리에 올라가 있어야만
(2) UIImage(named: "\(name).png") 에서 name이라는 이름을 이용("\(name).png")해서, 이미지를 생성할 수 있기 때문에..

반드시 name이 먼저 메모리에 올라가 있어야만 그것을 사용해서 이미지를 생성할 수 있기 때문이예요.

즉, 여기서는 이미지를 생성하기 위해선 순서가 필요하다는 거죠.
(name을 이용 ===> 이미지 생성)의 순서가 필요한데, 여기서 lazy를 제거해 버리면

lazy var memberImage: UIImage? = {
    guard let name = name else {       // name 속성에 접근 중
        return UIImage(systemName: "person")
    }
    return UIImage(named: "\(name).png") ?? UIImage(systemName: "person")
 }()

해당 클로저 내의 로직에서 name을 아예 이용(접근)할 수가 없습니다.

다른 말로 하자면... memberImage속성하고, name속성이 동시에 메모리에 올라가는데.. 어떻게 memberImage속성이 name을 이용할 수 있을까요? name이 먼저 존재해야, memberImage가 name을 사용할 수 있겠죠.

그래서, 여기서는 memberImage속성 내부의 로직에서 name속성에 접근하고 있기 때문에.. 순서가 필요합니다. 그래서 memberImage가 더 나중에 생성되도록 lazy를 붙여준 것이라고 보시면 됩니다.

 

 

감사합니다. :)

1

ios개발자

친절한 답변감사합니다.

그럼 구조체 내에 name을 memberImage에 사용하지 않을 꺼라면?

lazy var로 선언안해도 되고?

name, age와 같이 구조체 내에 memberImage를 선언해도 되는거죠?

0

앨런(Allen)

네 맞아요.
지금 여기서의 memberImage 로직이 name이름을 name.png로 변환해서 해당하는 이름에 대한 이미지를 가지고 오고 있어서.. name이름이 필요할 뿐이지,
일반적인 경우엔 memberImage를 그냥 UIImage? 이런 타입으로 선언한다면 당연히 lazy로 선언할 필요가 없습니다. ^^

수강연장부탁드려도될까요..

0

43

2

Drawing Cycle 관련 질문

0

72

1

앱 제작 시 주로 코드로 작성하시는 이유가 있을까요?

0

97

2

델리게이트 패턴 관련 질문

0

68

2

수강 기간 연장 부탁드릴 수 있을까요?

0

65

1

활용 앱 57강 질문입니다.

0

55

1

활용 앱 30강 에러 질문입니다

0

64

2

기초앱 17강 Contraints 설정 질문입니다.

0

67

2

기초 앱 4강 Type Any -> UIButton

0

67

2

34강 유용한 앱 추천에 나오는 UIKitViewer에 대해서 질문이 있습니다

0

80

1

깃에 코드는 올려도 된다고 하셨는데

0

111

1

수강기간 연장신청 드려도 될까요?

0

84

1

수강 기간 연장 부탁드려도 될까요?

0

120

2

수강 기간 연장 신청 요청드립니다.

0

131

2

playground에서 상단 실행?아이콘 회전 관련하여...

0

137

1

활용앱53강에서 질문있습니다.

0

166

2

Project 명칭 변경방법이 궁금합니다.

0

140

1

override 에 대해서 궁금한 것이 있습니다.

0

125

2

섹션8] 코드 리팩토링 문의

0

100

1

xcode 에서 ios 버전 선택 및 시뮬레이터 관련 질문

0

569

2

수강 기간 연장 부탁드려도 될까요?

0

131

2

뷰모델의 상태변화 와 didSet

0

98

1

@Sendable 키워드

0

95

1

클로저

0

107

2