인프런 커뮤니티 질문&답변

cu_bot님의 프로필 이미지

작성한 질문수

코틀린 문법부터 실무까지 (자바 to 코틀린 실무)

코틀린의 선택과 표현처리(when, enum)-2

import 질문

작성

·

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님의 궁금증을 해결하는 데 도움이 될 것 같습니다.

왜 자바 패키지를 import하는지 궁금합니다.

이 링크에 있는 답변에 따르면, 코틀린은 자바 플랫폼에서 실행되며, 자바의 표준 라이브러리 클래스와 상호 작용할 수 있습니다. 특히, java.time.Durationjava.time.LocalDateTime은 자바 8 이상의 표준 라이브러리에 포함된 클래스로, 날짜와 시간을 다루는 표준 방법을 제공합니다. 코틀린은 자바의 기능을 활용할 수 있으므로, 특별한 이유가 없다면 날짜와 시간을 다루기 위해 자바의 java.time 패키지를 사용하는 것이 일반적입니다.

kotlin.time.Duration은 코틀린에 내장된 시간 관련 클래스이지만, 코틀린의 Duration 클래스와 자바의 라이브러리는 같은 개념을 다루고 있지만 구현과 사용 배경이 다를 수 있습니다. 따라서 실무에서 날짜와 시간을 다루기 위해 자바 표준 라이브러리를 사용하는 것이 일반적인 이유 중 하나가 이와 같은 상호운용성 때문입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

cu_bot님의 프로필 이미지
cu_bot
질문자

궁금증이 해소되었습니다 ~

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 답변에 추가로 도움이 되는 답변이었으면 좋겠습니다 😄

언제든 추가 질문 있으시면 편하게 남겨주세요.

감사합니다. 행복한 설 연휴 되세요 🥰

cu_bot님의 프로필 이미지
cu_bot
질문자

친절한 답변 너무 감사합니다.

cu_bot님의 프로필 이미지

작성한 질문수

질문하기