Skip to content

[Feat] placeMap/model 패키지 마이그레이션#31

Open
oungsi2000 wants to merge 6 commits intodevelopfrom
feat/30
Open

[Feat] placeMap/model 패키지 마이그레이션#31
oungsi2000 wants to merge 6 commits intodevelopfrom
feat/30

Conversation

@oungsi2000
Copy link

#️⃣ 이슈 번호

#30


🛠️ 작업 내용

  • placeMap의 model 패키지를 마이그레이션 하였습니다

🙇🏻 중점 리뷰 요청

  • NaverMap의 OverlayImage(android), NMFOverlayImage(iOS)을 연결지을 브릿지를 expect, actual class로 작성하였습니다
    이유는 다음과 같습니다.
  1. expect class가 beta긴 하지만 jetbrain 팀에서 삭제할 생각은 없다고 명시함, 거의 stable
  2. interface 로 추상화할 경우 각 네이티브 단에서 불필요한 형변환 발생
    특히 NaverMap은 expect fun으로 만들 경우, 입 출력 타입이 모두 플랫폼별로 다르기 때문에, expect class를 사용하는 것이 가장 깔끔하다고 생각합니다.

📸 이미지 첨부 (Optional)

* **build: CocoaPods 플러그인 및 의존성 추가**
    * `gradle/libs.versions.toml`에 `kotlinCocoapods` 플러그인을 정의했습니다.
    * 루트 `build.gradle.kts` 및 `composeApp/build.gradle.kts`에 CocoaPods 플러그인을 적용했습니다.

* **build: iOS 네이버 지도 SDK(NMapsMap) 포드 추가**
    * `composeApp/build.gradle.kts` 내 `cocoapods` 블록을 설정했습니다. (버전 `2.0.1`, iOS 타겟 `16.0`)
    * iOS 네이티브 지도 기능을 사용하기 위해 `NMapsMap` (v3.23.1) 포드 의존성을 추가했습니다.

* **chore: .gitignore 업데이트**
    * CocoaPods 관련 파일(`*.podspec`)이 버전 관리 시스템에 포함되지 않도록 `.gitignore`에 추가했습니다.
* **build: Naver Map SDK 관련 의존성 및 저장소 추가**
    * `settings.gradle.kts`에 네이버 지도 SDK를 위한 메이븐 저장소(repository.map.naver.com)를 추가했습니다.
    * `gradle/libs.versions.toml`에 네이버 지도 SDK(`com.naver.maps:map-sdk`) 라이브러리와 버전(`3.22.1`)을 정의했습니다.
    * `composeApp/build.gradle.kts`의 `androidMain` 소스 세트에 `map-sdk` 의존성을 추가했습니다.

* **build: Kotlin 컴파일러 옵션 수정**
    * `composeApp/build.gradle.kts`에 `-Xexpect-actual-classes` 컴파일러 인자를 추가하여 `expect`/`actual` 클래스 사용 관련 경고를 처리할 수 있도록 설정했습니다.
* **feat: 공통 LatLng 클래스 추가**
    * Kotlin Multiplatform의 `expect/actual` 메커니즘을 사용하여 위도/경도 좌표를 표현하는 `LatLng` 클래스를 추가했습니다.
    * **Android**: 네이버 지도 SDK의 `LatLng`과 연동되도록 구현했습니다.
    * **iOS**: 네이버 지도 SDK(NMapsMap)의 `NMGLatLng`과 연동되도록 구현했습니다.

* **feat: 공통 OverlayImage 클래스 추가**
    * 지도 오버레이에 사용될 이미지를 처리하는 `OverlayImage` 클래스를 추가했습니다.
    * `DrawableResource`를 입력받아 각 플랫폼의 이미지 객체로 변환하는 비동기 `create` 함수를 구현했습니다.
    * **Android**: `BitmapFactory`를 사용하여 리소스를 `Bitmap`으로 변환 후 네이버 지도 `OverlayImage`를 생성합니다.
    * **iOS**: 리소스 바이트 데이터를 `NSData` 및 `UIImage`로 변환 후 `NMFOverlayImage`를 생성합니다.
*   **feat: 지도 및 장소 관련 UI 모델 추가**
    *   `CoordinateUiModel`: 위도/경도 정보를 담는 모델과 `LatLng` 변환 함수를 추가했습니다.
    *   `PlaceCategoryUiModel`: 음식점, 부스, 화장실 등 장소 카테고리 정의 및 카테고리별 아이콘, 색상, 문자열 리소스 매핑 로직을 구현했습니다.
    *   `PlaceCoordinateUiModel`, `PlaceUiModel`: 장소의 지리적 정보 및 세부 정보를 관리하는 UI 모델을 추가했습니다.
    *   `InitialMapSettingUiModel`: 초기 중심점, 줌 레벨, 경계선 등 지도의 초기 설정값 모델을 추가했습니다.

*   **feat: OverlayImageManager 추가**
    *   Flyweight 패턴을 적용하여 지도 마커 등에 사용되는 `OverlayImage` 리소스를 효율적으로 캐싱하고 관리하는 매니저 클래스를 추가했습니다.

*   **feat: 도메인 모델 확장을 통한 UI 모델 변환 로직 구현**
    *   `Coordinate`, `PlaceCategory`, `PlaceGeography`, `OrganizationGeography`, `Place` 등 도메인 모델을 UI 레이어 모델로 변환하는 확장 함수(`toUiModel`)를 추가했습니다.
@oungsi2000 oungsi2000 self-assigned this Mar 6, 2026
@oungsi2000 oungsi2000 added the ✨ Feat 새로운 기능이나 기능 개선 추가 label Mar 6, 2026
* **style: 테스트 코드 스타일 및 포맷 수정**
    * `LineupDataSourceTest.kt` 및 `FestivalRemoteDataSourceTest.kt` 파일에 ktlint 포맷팅을 적용했습니다.
    * 불필요한 공백을 제거하고, 리스트 및 객체 생성 시 후행 쉼표(trailing comma)를 추가했습니다.
    * 코드 가독성 향상을 위해 줄바꿈 및 들여쓰기를 조정했습니다.
* **refactor: Android 플랫폼 지도 객체 별칭 및 프로퍼티 네이밍 수정**
    * `LatLng.android.kt`: `NaverLatLng` 별칭을 `PlatformLatLng`로 변경했습니다.
    * `OverlayImage.android.kt`: `NaverOverlayImage` 별칭을 `PlatformOverlayImage`로 변경했습니다.
    * 각 클래스 내부에서 사용되는 `platform` 프로퍼티의 타입을 변경된 별칭에 맞게 수정하여 플랫폼 간 추상화 구조를 명확히 했습니다.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ Feat 새로운 기능이나 기능 개선 추가

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant