전체 글(103)
-
Equatable와 Hashable 프로토콜
SwiftUI와 같은 선언형 UI 프레임워크에서는 데이터의 변화에 따라 뷰를 자동으로 업데이트하는 기능이 핵심입니다. EquatableEquatable 프로토콜은 두 인스턴가 동일한지 여부를 판단할 수 있도록 해줍니다.프로토콜을 채택하면, == 연산자를 통해 객체 또는 값의 동일성을 비교할 수 있습니다.Swift 컴파일러는 모든 맴버가 이미 Equatable을 채택한 구조체의 경우, 자동으로 == 연산자를 합성해줍니다.상태변화 감지 -> SwiftUI는 뷰의 변경 사항을 감지할 때, 이전 값과 새로운 값을 비교하는데, 만약 해당 값이 Equatable을 채택하고 있다면, 두 값을 비교하여 실제로 변경되었을 때만 뷰를 업데이트하도록 최적화할 수 있습니다.불필요한 렌더링 방지: onChanged같은 핸들러나..
2025.02.01 -
SwiftUI Property Wrapper
@State@Bingding@StateObject@ObservedObject@EnvironmentObject@Environment@StateSwiftUI View 내부에서 사용되는 간단한 값 타입(Bool, String, Int 등)을 저장하고, 그 값이 변경될 때마다 뷰가 재렌더링되도록 하는 속성 래퍼.뷰 전체의 “상태(state)”라고 생각할 수 있으며, 해당 뷰에서만 유효합니다.@State는 구조체 기반의 View에서 내부적으로 값을 감싸고 있습니다.값이 변경되면 자동으로 View가 새롭게 그려집니다.다른뷰에서는 관찰할 필요가 없는 경우에 사용합니다.struct MyView: View { @State private var isSheetPresented: Bool = false var bo..
2025.01.30 -
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