2개 앱을 만들고 앱스토어 출시하고, 앱 운영하면서 지금까지 메모리 누수 문제로 고생하거나, 문제가 된 적은 없었다.
Swift 가 기본적으로 메모리를 알아서 관리해주기 때문이기도 하고, 실질적으로 에러를 발생시킨 적이 없었으니.
우연히 모 기업 인터뷰를 보다가 메모리 누수 관련 질문을 받았는데,
기존에 관심이 없었다 보니 불편한 경험도, 답변을 할 내용도 없었다.
무작정 어떻게든 앱을 만들어야지 라는 급한 의욕과
체계적으로 공부할 이유를 몰랐던 비전공자의 시너지(?)로 발생한 사건이었고
인터뷰 후, 약 한시간 정도 실력 부족에 대한 자아비판 시간을 가진 후,
몇몇 서적과 인터넷을 통해 Swift Memory leak 를 알아보았다.
앱 안정성에 굉장히 중요한 내용인데 여태 관심도 없었다는 나 스스로에게 반성하며
잊지 않기 위해 포스팅으로 남기려 한다.
이번 공부기록 포스팅에서는 lazy 를 정리해 본다.
1. var 에만 사용 가능하며,
2. Lazy properties must have an initializer - 자동으로 초기화 되지 않는다
3. Struct, Class 에서만 사용 가능
4. 처음 사용할때 받은 값을 계속 저장함. 맨 처음 값을 유지 (처음 사용될때 메모리에 value를 넣고, 그 value를 계속 사용)
연산 프로퍼티는 해당 프로퍼티 내부 코드가 실행된 결과값을 반환 한다 - lazy 는 사용할 수 없다
5. lazy 변수가 lazy name: String 과 같이 저장용 변수라면 상관없지만, lazy name: () -> String 처럼 클로저를 가진 변수면, 클로저 안에서 다른 변수를 참조할 경우, 순환 참조로 인한 메모리 누수가 발생할 수 있다. 클로저 내부에 반드시 [weak self] 를 해주어야 한다
이 복잡한 걸 왜 쓰지?
1. 불필요한 메모리 차지, 불필요한 실행으로 인한 리소스 사용 방지
2. lazy 변수의 초기화에 사용되는 클로저에는 @noescape가 자동적으로 적용된다 (?????)
내용과 쓰임새를 알아보았고 이해는 했지만,
실전에서 사용을 해봐야 감이 오지 않을까 싶다.
lazy 를 사용하는 경우에 대한 좀 더 많은 예시를 보아야 할 것 같다.
'iOS_Swift' 카테고리의 다른 글
WWDC 2022 - KeyNote 확인 후 정리중... (0) | 2022.06.08 |
---|---|
Swift - Struct 와 Class 차이점 (0) | 2022.03.22 |
Swift) 키보드 위로 Textfield 따라 올라오게 하기 (2) | 2021.06.02 |
(Swift iOS) 메모리가 늘어나는 현상.. 줄어들질 않는다_Kingfisher (0) | 2020.10.29 |
(Swift iOS) 스쿼드매니아 앱 '선수평가 게시판' 기능 추가 (1) | 2020.10.28 |
댓글