0Pricing
Swift Academy · 강의

사용자 위치 가져오기

CLLocationManager로 위치 업데이트를 받습니다.

사용자 위치 가져오기은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

위치 업데이트 시작

권한이 부여되면 startUpdatingLocation()을 호출하여 위치 측정값을 연속적으로 받기 시작하세요. 관리자는 대리자를 통해 측정값을 전달합니다. 더 이상 필요하지 않을 때는 항상 stopUpdatingLocation()을 호출하여 배터리를 절약하세요.

manager.startUpdatingLocation()
// ... later
manager.stopUpdatingLocation()

대리자에서 위치 수신

새로운 위치 측정값은 locationManager(_:didUpdateLocations:)에 전달됩니다. 배열은 오래된 값부터 최신 값 순서로 정렬되므로 마지막 요소가 가장 최근 위치입니다.

func locationManager(_ m: CLLocationManager,
                     didUpdateLocations locations: [CLLocation]) {
    guard let latest = locations.last else { return }
    print(latest.coordinate.latitude, latest.coordinate.longitude)
}

CLLocation 객체

각 측정값은 좌표보다 훨씬 많은 정보를 포함하는 CLLocation 객체입니다. 여기에는 coordinate, altitude, speed, course, timestamp 및 정확도 값이 포함됩니다. 이러한 값을 확인하여 측정값을 사용할 만큼 충분히 정확한지 판단하세요.

func describe(_ loc: CLLocation) {
    print("lat:", loc.coordinate.latitude)
    print("lon:", loc.coordinate.longitude)
    print("alt:", loc.altitude)
    print("when:", loc.timestamp)
}

원하는 정확도

desiredAccuracy를 설정하여 Core Location에 필요한 측정 정확도를 알려주세요. 정확도가 높을수록 더 많은 전력을 사용합니다. 상수로는 kCLLocationAccuracyBest, kCLLocationAccuracyNearestTenMeters, kCLLocationAccuracyHundredMeters, kCLLocationAccuracyKilometer가 있습니다.

manager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters

거리 필터

distanceFilter를 사용하면 기기가 최소 몇 미터를 이동할 때까지 업데이트를 억제할 수 있습니다. 아주 작은 움직임까지 모두 알 필요가 없는 경우 이 기능으로 잡음을 줄이고 전력을 절약할 수 있습니다.

manager.distanceFilter = 50 // meters

측정값 품질 판단

horizontalAccuracy 속성은 신뢰할 수 있는 범위의 반경을 미터 단위로 나타냅니다. 음수 값은 측정값이 유효하지 않다는 뜻입니다. 또한 timestamp가 얼마나 오래되었는지 확인하여 오래된 측정값도 거부하세요.

func isUsable(_ loc: CLLocation) -> Bool {
    guard loc.horizontalAccuracy >= 0 else { return false }
    let age = -loc.timestamp.timeIntervalSinceNow
    return age < 15 && loc.horizontalAccuracy < 100
}

단일 위치 요청

연속적인 위치 정보가 아니라 측정값 하나만 필요하다면 requestLocation()을 호출하세요. 관리자는 대리자에게 위치 하나를 전달한 다음 자동으로 중지합니다. 연속 업데이트를 시작하는 것보다 배터리 효율이 높습니다.

manager.requestLocation()

위치 오류 처리

오류는 locationManager(_:didFailWithError:)에 전달됩니다. 흔히 발생하는 오류 중 하나는 CLError.locationUnknown이며, 대개 일시적이므로 계속 기다리면 됩니다. CLError.denied는 권한이 철회되었다는 뜻이므로 중지해야 합니다.

func locationManager(_ m: CLLocationManager,
                     didFailWithError error: Error) {
    if let clErr = error as? CLError, clErr.code == .denied {
        m.stopUpdatingLocation()
    }
}

주요 변화 모니터링

앱을 백그라운드에서 깨울 수 있는 저전력의 대략적인 추적이 필요하다면 startMonitoringSignificantLocationChanges()을 사용하세요. 기기가 약 500미터를 이동한 후에만 실행되므로 지역 기반 기능에 적합합니다.

manager.startMonitoringSignificantLocationChanges()

방위와 진행 방향

나침반 기능을 위해 startUpdatingHeading()은 locationManager(_:didUpdateHeading:)을 통해 자기 방위 또는 진방위를 전달합니다. CLLocation.course(이동 방향)는 방위(기기의 방향)와 다르다는 점에 유의하세요.

func locationManager(_ m: CLLocationManager,
                     didUpdateHeading newHeading: CLHeading) {
    print("Heading:", newHeading.trueHeading)
}

두 지점 간 거리 계산

CLLocation은 distance(from:)을 사용하여 다른 위치까지의 직선거리를 측정하고 미터 단위로 반환할 수 있습니다. 지도 UI 없이 근접성 로직을 구현할 때 유용합니다.

let a = CLLocation(latitude: 41.0, longitude: 28.9)
let b = CLLocation(latitude: 41.1, longitude: 29.0)
let meters = a.distance(from: b)
print("Distance:", meters)

빠른 확인: 위치 가져오기

위치 측정값을 받는 방법을 얼마나 이해했는지 확인해 보세요.

복습: 사용자 위치 가져오기

이제 좌표를 가져오는 방법을 알고 있습니다.

  • 연속적인 위치 정보에는 startUpdatingLocation()을, 측정값 하나에는 requestLocation()을 사용합니다.
  • 대리자에서 locations.last를 읽어 가장 최신 측정값을 가져옵니다.
  • 전력 소비와 정확도 사이의 균형을 위해 desiredAccuracy와 distanceFilter를 조정합니다.
  • 측정값을 사용하기 전에 horizontalAccuracy와 timestamp를 검증합니다.

자주 묻는 질문

“사용자 위치 가져오기” 강의는 무료인가요?

네 — “사용자 위치 가져오기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“사용자 위치 가져오기”에서 뭘 배우나요?

CLLocationManager로 위치 업데이트를 받습니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Swift Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“사용자 위치 가져오기” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 위치 권한 요청하기
  2. 사용자 위치 가져오기
  3. SwiftUI에서 지도 표시하기
  4. 지오코딩과 지역
← Swift Academy(으)로 돌아가기