피드로 돌아가기
Swift Protocol Magic II: Designing a Reusable Location Tracking System
Dev.toDev.to
Frontend

Protocol-Oriented 설계 기반 Location Tracking 보일러플레이트 제거

Swift Protocol Magic II: Designing a Reusable Location Tracking System

Salah Nahed2026년 5월 15일14intermediate

Context

다수의 ViewController에서 CLLocationManager를 중복 구현함에 따라 발생하는 코드 파편화와 유지보수 비용 증가 문제 발생. 권한 요청, 델리게이트 설정, UI 처리 로직이 개별 화면에 산재하여 확장성이 결여된 구조적 한계 노출.

Technical Solution

  • LocationManager 프로토콜을 통해 CLLocationManagerDelegate를 추상화하여 구체적인 구현체와 호출부를 분리한 설계
  • TrackableLocationViewController 프로토콜 도입으로 상속 없이 특정 화면에 Location-aware 기능 부여
  • Protocol Extension을 활용한 기본 구현체 제공으로 ViewController 내 중복 호출 로직 제거
  • handleLocationUpdate 메서드에 async 키워드를 적용하여 위치 정보 수신 후 발생하는 네트워크 요청 등 비동기 작업의 효율적 처리
  • 추상화 레이어 구축을 통한 CLLocationManager의 Mock 객체 대체 및 Unit Test 가능 환경 확보

1. 반복되는 셋업 코드가 3개 이상의 클래스에서 발견되는지 확인

2. 상속(Inheritance) 대신 프로토콜(Protocol)과 익스텐션(Extension)을 통한 기능 조합 가능성 검토

3. 외부 라이브러리나 시스템 프레임워크 의존성을 직접 참조하지 않고 추상화 인터페이스를 경유하는지 확인

4. 비동기 흐름이 예상되는 콜백 메서드에 async/await 적용 여부 검토

원문 읽기