본문 바로가기
프로그래밍/Kotlin

Kotlin - 패키지와 임포트(packages and imports)

by pentode 2019. 7. 5.

패키지는 클래스들을 분류해서 모아둔것을 말한다고 생각하면 되겠습니다. 또한 패키지는 동일한 클래스 이름을 사용하는 클래스가 있을때 이름 충돌을 피하는데도 사용될 수 있습니다. 패키지는 인터넷 도메인 처럼 마침표(.)로 구분되는 문자열로 정의됩니다. 코틀린과 자바를 같이 사용하는 프로젝트라면 Kotlin 소스 파일은 Java 소스 파일과 동일한 소스 루트에 있어야하며 동일한 디렉토리 구조를 따라야합니다(자바에서는 패키지명의 마침표 부분으로 구분되는 디렉토리 구조에 파일이 저장됩니다).


순수 Kotlin 프로젝트에서 권장되는 디렉토리 구조는 공통 루트 패키지가 생략된 패키지 구조를 따르는 것입니다 (예 : 프로젝트의 모든 코드가 "org.example.kotlin" 패키지 및 하위 패키지에 있는 경우 "org.example.kotlin" 패키지는 소스 루트 바로 아래에 있어야 하고 "org.example.kotlin.foo.bar"의 파일은 소스 루트의 "foo/bar" 서브 디렉토리에 있어야 합니다.



소스 파일은 package 선언으로 시작합니다(없을수도 있음).


package foo.bar


fun baz() { ... }

class Goo { ... }


// ...


클래스, 함수와 같은 소스파일의 모든 내용들은 선언된 패키지에 포함됩니다. 그러므로 위 예제에서 baz()의 전체 이름은 foo.bar.baz이고, Goo의 전체 이름은 foot.bar.Goo입니다.


만약 package가 정의 되지 않으면 파일내의 컨텐츠는 이름이 없는 "default" 패키지에 속합니다.



1. 기본 임포트(Default Imports)


모든 코틀린 파일에는 여러개의 패키지가 기본적으로 임포트 되어집니다.


※ 참고 : Default 임포트는 명시적으로 import문을 사용하지 않아도 자동적으로 import되는 패키지들 입니다.


kotlin.*

kotlin.annotation.*

kotlin.collections.*

kotlin.comparisons.* (since 1.1)

kotlin.io.*

kotlin.ranges.*

kotlin.sequences.*

kotlin.text.*


대상 플랫폼에 따라 추가적으로 패키지가 import 됩니다.


JVM:

java.lang.*

kotlin.jvm.*


JS:

kotlin.js.*



2. 임포트(Imports)


기본 import 외에도 각 파일은 자체적인 import 지시자를 포함할수 있습니다. import 구문은 문법에 설명되어 있습니다.


※ 참고 : 기본 임포트외에 다른 패키지의 클래스나 함수를 사용하기 위해서는 import를 하거나 전체이름을 입력하여야 합니다.


하나의 이름을 import 할수 있습니다(필요한 클래스나 함수들의 전체 이름을 직접 명시하여 import합니다).


import foo.Bar // Bar에 전체 이름 없이 접근할 수 있습니다.


또는 범위를 지정하여 범위내의 모든 컨텐츠(package, class, object 등)에 접근할 수 있게 import합니다.


import foo.* // foo 패키지내에의 모든 내용에 접근 가능합니다.


이름 충돌이 발생하면 as 키워드를 사용해서 로컬에서 충돌한 엔티티의 이름을 변경하여 이름 충돌을 없앨 수 있습니다.


import foo.Bar // Bar 에 접근할 수 있습니다.

import bar.Bar as bBar // bBar는 'bar.Bar'의 약어 입니다.


import 키워드는 클래스만 임포트하는 것이 아니라 다른 선언도 import할 수 있습니다.


- 최상위 레벨(top-level) 함수와 속성

- 객체(object) 선언 내에 선언된 함수와 속성

- enum 상수


자바와 다르게 코틀린은 별도의 정적 임포트("import static") 구문을 가지고 있지 않습니다. 이러한 모든 선언들은 정규 import 키워드를 사용하여 임포트 됩니다.


※ 참고 : 자바에서의 정적 임포트는 글 "자바(Java) - static import 사용하기"를 참조하세요.



3. 최상위 레벨 선언의 가시성(Visibility of Top-level Declarations)


만약 최상위 레벨 선언이 private으로 표시되어 있다면, 그것이 선언된 파일에 대해서 private입니다(다음를 참조하세요: Visibility Modifiers).


반응형