마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

MutableMap 관련 질문드립니다.

0 추천

다른 곳에서 사용한 Java 코드를 옮겨서 사용해야 하는 상황이라서

코드이식중에 아래와 같은 문제가 생겨서 약간 수정을 해서 해결을 한거는 같은데,

정확한 차이와 원인을 알고 싶어서 질문 드립니다.

위에서 map1이 받은 코드내용이었습니다.

일단 map2처럼 선언부에서 * 대신에 Any? 로 수정하니까 에러는 사라지고 데이터도

실제로 잘 추가되는 거 같습니다.

그럼 위에서 <*, *>로 되어 있는 부분은 어떤 의미인가요?

알고 싶습니다...

 

예체능딸기아빠 (430 포인트) 님이 2023년 6월 14일 질문
자문자답해봅니다.
https://zion830.tistory.com/71
그런데 이내용을 봤을 때도 아무래도 map1이 잘못 선언되어 있는 거 같은데...

1개의 답변

+1 추천

약간만 더 수정하시면 더 좋으실 것 같아요.

val map1 = hashMapOf<Any?, Any?>()

map1자체가 mutable 타입이므로 변수타입 자체까지 var로 만드실 필요가 없습니다. 변수 자체는 reaonly에 해당하는 val을 사용하세요. 그리고 Kotlin은 type inference가 지원되므로 변수 오른쪽에 타입이 명확하면 굳이 타입선언을 할 필요는 없지만, 님의 경우는 자바에서 바로 변환하다보니 매끄럽게 변환이 되지 않은 걸로 보입니다.

그리고 MutableMap<*, *> 에서 *는 모두를 가리키는 wild card 이고 자바에서 온 것으로 보입니다. Any는 Kotlin의 최상위 타입으로 Object와 같습니다. 코틀린에서는 reified와  inline 함수가 지원되기 때문에 자바와 같이 *를 사용할 일이 거의 없습니다.

추가로 가능하면 Generic에는 Any 타입을 사용하지 마시고, 대신에 interface, seale classs 등을 활용해서 사용하세요.

spark (227,530 포인트) 님이 2023년 6월 14일 답변
Java와 Kotlin간의 차이라고 이해하면 될 거 같군요.
말씀하신 대로 수정하겠습니다.
친절한 답변에정말 감사드립니다~~~
...