Package
다른 package 참조 : import
shopping package의 class Cart 와 class Store 을 home package에서 참조하기 위해서는
import shopping.Cart
import shopping.Store
// 해당 패키지의 모든 하위 내용을 import
import shopping.*
class Home {
val stroe = Strore()
val cart = Cart()
}
Module
- 한 번에 compile 되는 묶음
가시성 변경자 visibility modifier
- 클래스, 변수, 함수를 외부에 노출하는 범위를 결정
- top-level : public, private, internal
- 클래스 멤버 : public, private, internal + protected
가시성 변경자 - Packages
- 패키지 내부의 top-level 선언시 가시성 변경자에 따라 참조 가능한 범위가 다름
modifier | scope |
public | 기본값. 어느 위치에서든 참조 가능 |
private | 선언한 file 내부에서만 참조 가능 |
internal | 같은 module 안에서만 참조 가능 |
protected | 사용 불가 |
// 가시성 변경자가 생략된 경우 - public
const val KEY_PRODUCT_ID = "product_id"
fun test(){}
class Store(){}
//파일 위치가 달라지면 외부 참조 불가능 - private
private fun loadProduct(){} //file : Store.kt
fun main(args: Array<String>){ //file : Main.kt
loadProduct() //Error
}
// 같은 모듈 내에서만 참조 가능 - internal
// moduel: library, package shopping
internal const val KEY_PRODUCT_ID = "product-id"
// module: consoleApp
import shopping.KEYPRODUCT_ID // Error
// top-level에서 선언된 모든 내용 접근 불가능 - private
protected const val KEY_PRODUCT_ID = "product-id"
가시성 변경자 - Class members
modifier | scope |
public | 기본 값. 어느 위치에서든 참조 가능 |
private | 선언한 class 내부에서만 참조 가능 |
internal | 같은 module 안에서만 참조 가능 |
protected | private와 동일. + subclass에서도 참조 가능 |
// protected
open class Shape(val vertexCount: Int){
protected open fun draw(){
println("Drawing a shape")
}
}
class Rectangle(vertexCount: Int) : Shape(vertexCount){
override fun draw(){
super.draw() // super를 사용해 class Shape의 draw 함수 접근 가능
println("Drawing a rectangle")
}
}
fun main(Array<String>){
val rectangle = Rectangle(4)
rectangle.draw() // Error - subClass가 아닌 메인 함수에서 draw 호출 불가능
}
728x90
'Android > Kotlin' 카테고리의 다른 글
[Kotlin] object (0) | 2022.09.16 |
---|---|
[Kotlin] List, Set, Map, Collection Operations (0) | 2022.09.16 |
[Kotlin] 클래스 toString/equals/hashCode, data class (0) | 2022.09.10 |
[Kotlin] 함수, Superclass, Subclass (0) | 2022.09.10 |
[Kotlin] 클래스 상속, 추상화, 인터페이스 (0) | 2022.09.09 |