작성
·
242
1
안녕하세요 코틀린 실습을 하는데 아래의 함수에서
fun printObject(obj: Any): Unit = when (obj) {
is String -> println(obj.lowercase())
is Duration -> println(obj.nano)
is LocalDateTime -> println(obj.month)
else -> println("Unknown type")
}
Duration 과 LocalDateTime을 import 하는게
import kotlin.time.Duration
가 아니라
import java.time.Duration
import java.time.LocalDateTime
왜 자바 패키지를 import하는지 궁금합니다.
답변 2
1
안녕하세요, 인프런 AI 인턴입니다. cu_bot님의 질문에 대한 답변을 찾았습니다.
질문주신 내용과 관련하여 유사한 질문에 대한 답변을 찾았고, 이는 cu_bot님의 궁금증을 해결하는 데 도움이 될 것 같습니다.
이 링크에 있는 답변에 따르면, 코틀린은 자바 플랫폼에서 실행되며, 자바의 표준 라이브러리 클래스와 상호 작용할 수 있습니다. 특히, java.time.Duration
과 java.time.LocalDateTime
은 자바 8 이상의 표준 라이브러리에 포함된 클래스로, 날짜와 시간을 다루는 표준 방법을 제공합니다. 코틀린은 자바의 기능을 활용할 수 있으므로, 특별한 이유가 없다면 날짜와 시간을 다루기 위해 자바의 java.time
패키지를 사용하는 것이 일반적입니다.
kotlin.time.Duration
은 코틀린에 내장된 시간 관련 클래스이지만, 코틀린의 Duration
클래스와 자바의 라이브러리는 같은 개념을 다루고 있지만 구현과 사용 배경이 다를 수 있습니다. 따라서 실무에서 날짜와 시간을 다루기 위해 자바 표준 라이브러리를 사용하는 것이 일반적인 이유 중 하나가 이와 같은 상호운용성 때문입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
0
안녕하세요. cu_bot님 🙂 꼼꼼하게 강의를 보시고 질문주셔서 감사합니다!
위에 AI 인턴이 답변을 잘 남겨놨는데 추가적으로 설명을 드리겠습니다.
일단 코틀린은 자바를 기반으로 하는 언어라고 할 수 있습니다. 그래서 기존에 자바 생태계에서 만들어두었던 수많은 라이브러리를 그대로 가져다 쓸 수 있는 점이 가장 큰 장점입니다. (아무리 좋은 언어라고 해도 이런 라이브러리가 없으면 직접 다 만들어야 해서 어려움이 크지요.)
특히 말씀주신 Duration
의 경우 코틀린과 자바 두군데에서 구현을 해놓았는데요(사실 저도 코를린 Duration
은 이번 기회에 봤습니다^^;), 제가 만들었던 printObject
함수의 경우 Any
타입의 obj
를 타입에 따라 다른 동작을 하게 하는 것이 목적이라 코틀린 Duration
이나 자바 Duration
중에 어떤 것을 사용하셔도 무방합니다.
하지만 둘이 이름은 같지만 다른 클래스이기 때문에 printObject
를 호출하는 쪽에서 해당하는 Duration
을 파라미터로 줘야지만 동작하게 됩니다.
자바 Duration
으로 파라미터가 오면 printObject
가 자바 Duration
으로 구현되었을 때에만 동작
코틀린 Duration
으로 파라미터가 오면 printObject
가 코틀린 Duration
으로 구현되었을 때에만 동작
혹은 아예 두가지 타입을 다 처리하는 함수로 바꿔줄 수도 있습니다.
fun printObject(obj: Any): Unit = when (obj) {
is String -> println(obj.lowercase())
is java.time.Duration -> println(obj.nano)
is kotlin.time.Duration -> println(obj.inWholeSeconds)
is LocalDateTime -> println(obj.month)
else -> println("Unknown type")
}
참고로 위와 같이 이름이 같은 클래스 두개를 넣어줄 때에는 자바와 동일하게 패키지 경로를 모두 적어주어야 합니다.
AI 답변에 추가로 도움이 되는 답변이었으면 좋겠습니다 😄
언제든 추가 질문 있으시면 편하게 남겨주세요.
감사합니다. 행복한 설 연휴 되세요 🥰
궁금증이 해소되었습니다 ~