iOS(36)
-
Equatable와 Hashable 프로토콜
SwiftUI와 같은 선언형 UI 프레임워크에서는 데이터의 변화에 따라 뷰를 자동으로 업데이트하는 기능이 핵심입니다. EquatableEquatable 프로토콜은 두 인스턴가 동일한지 여부를 판단할 수 있도록 해줍니다.프로토콜을 채택하면, == 연산자를 통해 객체 또는 값의 동일성을 비교할 수 있습니다.Swift 컴파일러는 모든 맴버가 이미 Equatable을 채택한 구조체의 경우, 자동으로 == 연산자를 합성해줍니다.상태변화 감지 -> SwiftUI는 뷰의 변경 사항을 감지할 때, 이전 값과 새로운 값을 비교하는데, 만약 해당 값이 Equatable을 채택하고 있다면, 두 값을 비교하여 실제로 변경되었을 때만 뷰를 업데이트하도록 최적화할 수 있습니다.불필요한 렌더링 방지: onChanged같은 핸들러나..
2025.02.01 -
Completion(escaping) 와 Combine
현재 진행 중인 프로젝트는 SwiftUI를 사용하여 전체 앱을 리뉴얼하는 상황입니다.서버 통신 역시 기존 Completion Handler(escaping closure)가 아닌 Combine을 통해 구현하고 있습니다. 여기서 의문점을 가지게 되었습니다. 단순히 “SwiftUI니까 Combine을 써야지!”라는 생각이 아니라, 두 방식을 비교해보고 Combine을 사용하면 어떤 점에서 이점이 있는지 이해하고자 합니다.왜? 그냥 SwiftUI를 쓰느니깐 거기에 맞는 Combine을 쓰는거 아닐까? 라는 생각을할 수 도있지만 그래도 이유를 알고 쓰는점 또한 어떤한 문제점에서는 Combine이 아닌 CompletionHandler로 통신을할 수 도있기에 차이점에 대해서 알아보고자 합니다.이스케이핑 클로저(Co..
2025.01.26 -
비동기 테스트
비동기 테스트먼저 테스트코드를 작성하신다면 이런식으로 하시는분들도 계실꺼라 생각됩니다.final class CalculatorQueueTests: XCTestCase { var sut: CalculatorItemQueue! override func setUpWithError() throws { try super.setUpWithError() sut = CalculatorItemQueue() } override func tearDownWithError() throws { try super.tearDownWithError() sut = nil } func test_enqueue_11_enqueue의_마지막값이11인지_확인() {..
2024.07.08 -
컴파일 최적화 방법
성능 최적화 하는 방법 및 설정먼저 이런 글을 쓰게 되는 이유는 컴파일 및 빌드 시간이 생각보다 오래 걸린다고 느낄수도 있다. 잘 느끼지는 못할수도 있겠지만 어느덧 느려진것을 느끼게되면 한번 코드를 확인해보면 좋을꺼같다. 작업을 하다보면 생각보다 은닉화를 까먹게 되기도 하면서 놓치는 부분들이 생기게 되는것 같다. 이러한 부분을 알아두기 위함이다.동적 디스패치 줄이기디스패치의 종류에는 정적(static), 동적(Dynamic)이 있습니다.정적 디스패치는 어떤 메서드를 호출해야 컴파일 시점에 알 수있는 방식이고,동적 디스패치는 메서드를 호출하는 런타임 시점에 알 수 있는 방식입니다.그래서 Dynamic DisPatch 줄이기실제로 애플에서 제공하는 최적화 관련 문서에서 Dynamic DisPatch를 줄여 ..
2024.05.05 -
Concurrency (await)
Concurrency (await) Swift는 구조화된 방식으로 비동기 및 병렬코드를 작성하기 위한것을 기본으로 제공합니다. 비동기 함수가 재개될 때, Swift는 해당 함수가 어떤 스레드에서 실행될지에 대해 어떠한 보장도 하지 않습니다. 비동기 함수 정의 및 호출 비동기 메서드는 실행 도중에 일시 중지될 수 있으며, 완료되거나 오류를 던지거나 반환될 때까지 대기합니다. 이는 일반적인 동기적 함수나 메서드와 다릅니다. 동기적 함수나 메서드는 완료되거나, 오류를 던지거나, 또는 결코 반환되지 않을 때까지 계속 실행됩니다. 비동기 메서드는 특정 작업을 수행하는 동안 다른 작업을 기다리면서 중간에 일시 정지될 수 있습니다. 메서드가 비동적인것을 나타내려면 throws를 사용하여 throw하는 함수를 표시하는..
2024.04.16