THIS IS ELLIE

XCTest를 사용해서 메모리 누수 감지하기 본문

공부/Unit Testing

XCTest를 사용해서 메모리 누수 감지하기

Ellie Kim 2023. 10. 30. 18:06

안녕하세요 :)

 

저는 크래시 때문에 메모리 관련해서 딥 다이브를 해보고 있는데요
XCTest 프레임워크를 활용하여 메모리 누수 가능성을 쉽게 확인할 수 있는 방법이 있어서
관련해서 오늘 포스팅을 해보려고 합니다

 

사용할 함수는
바로 바로

https://developer.apple.com/documentation/xctest/xctestcase/2887226-addteardownblock

addTeardownBlock이 함수입니다
테스트가 끝날 때 실행할 블록을 등록하고
블록은 현재 테스트 메서드가 끝나면 이후에 실행됩니다

즉 현재 테스트 메서드가 종료될 때 실행되는 코드 블록입니다

 

???이걸로 어떻게 메모리 누수 가능성을 판단하냐???



더 이상 사용되지 않는 객체는 dealloc이 되잖아요
이 걸 addTeardownBlock 여기 블록 내에서 확인해 볼 수 있어요
XCTAssertNil를 활용해서 이 객체 더 이상 사용되지 않으니 nil일 거야!!! 이런식으로요

 

코드로 같이 봐요

 

A 클래스와 B 클래스가 각각 이렇게 있다고 생각해 봅시다

A는 B를 가지고 B도 A를 가지고 서로를 참조하고 있죠
그리고 테스트를 돌려보겠습니다

B라는 클래스를 만들어서 A에 주입해 주는 코드
실행해 보니 에러가 발생했습니다 sut은 nil이 아니야
??? 이유는 서로 참조하고 있기 때문

 

그럼 B 클래스를 조금 변경해 볼게요

요랬던 코드가

요래 됐습니다

서로 참조하는 코드를 수정했어요

이전에 실패했던 테스트가 성공하게 되고
sut도 dealloc이 잘 되는 것을 확인할 수 있습니다

 

 

메모리를 할당하고 해지하지 않는 경우 메모리 누수가 발생하게 되고
이는 메모리가 점차 쌓이면서 앱의 메모리 사용량이 증가하게 만들어
결국에는 앱이 느려지거나 크래시가 발생할 수도 있겠죠?

이렇게 유닛테스트 코드를 작성해 잠재적인 메모리 누수 가능성인 코드를 발견할 수 있고
사전에 방지할 수 있으면 더욱더 좋을 것 같습니다

 

진짜 끝

반응형