접근제한자 | 설명 |
---|---|
public | 기본 접근 제한자로써 명시하지 않으면 기본적으로 public , 어디에서나 접근 가능 |
private | 해당 파일이나 클래스에서만 접근 가능 |
protected | 상속받은 인터페이스, 클래스 또는 자식 클래스에서만 접근 가능 |
internal | 같은 모듈 내에서는 접근 가능 |
public
으로 선언됨class
, object
, interface
, constructor
, function
, property
project
최상단 개념, <module, peckage, class>를 포함module
프로젝트 아래의 개념, <package, class>를 포함package
모듈 아래의 개념, <class>를 포함Exception
프로그램 실행 중 예기치 못한 에러가 발생하는 경우try
블록 내에서 예외가 발생하면, catch
블록으로 이동하여 예외를 처리하고 다음 코드를 계속 실행while (true) {
try {
var num = readLine()!!.toInt()
println("Input: $num")
break
}
catch (e: java.lang.NumberFormatException) {
println("Please enter a number.")
}
}
throw
키워드를 사용하여 특정 예외를 생성하고 던짐throw
로 던진 예외는 프로그램 실행 흐름을 중단 시키고, 해당 예외를 처리하는 부모 호출 스택에 위치한 catch 블록으로 이동함while (true) {
try {
var num = readLine()!!.toInt()
println("Input: $num")
break
} catch(e: java.lang.NumberFormatException) {
println("Please enter a number.")
} finally {
println("The connection with keyboaed is normal.")
}
}
fun divide(x: Int, b: Int): Int {
if (y==0) {
throw ArithmeticException("Divisor cannot be zero")
}
return a / b
}
fun main() {
try {
val result = divide(10,0)
println("Result: $result")
} catch(e: ArithmeticException) {
println("Caught an exception: $e.message")
} finally {
println("Finally block executed.")
}
}
// [output]
// Caught and exception: Divisor cannot be zero.
// Finally block executed.
::
(콜론 2개)를 붙이고 .isInitialized
를 사용UninitializedPropertyAccessException
예외가 발생함Exception in thread "main" kotlin.UninitializedPropertyAccessException: lateinit property b has not been initialized
fun main() {
val x = Test()
println(x.getTest())
x.text = "new value" // 변수 초기화
println(x.getTest())
}
class Test() {
lateinit var text: String // Non-Nullable로 선언
fun getTest(): String {
if (::text.isInitialized) {
return text
} else {
return "default"
}
}
}
// [output]
// default
// new value
fun main() {
val num: Int by lazy {
println("Initialized")
7
}
println("Start the code")
println(num)
println(num)
}
// [output]
// Start the code
// Initialized
// 7
// 7
val lazyValue: String by lazy {
println("Ars")
"Hello"
}
fun main() {
println(lazyValue) // 처음 접근 시에만 Ars와 캐싱된 값인 Hello 출력
println(lazyValue) // 캐싱된 값인 Hello 출력
}
// [output]
// Ars
// Hello
// Hello
NullPointerException (NPE)
과 같은 오류를 방지하고 프로그램의 안정성을 향상시킴?
var.name: String? = null
!!
NullPorinterException
이 발생할 수 있음!!
를 사용해도 됨val length: Int = name!!.length
?.
val length: Int? = name?.length
?:
val result: Int = nullableValue ?: defaultValue
[참고 사이트]
'(Kotlin) 접근 제한자에 대해(public, private...)', dev.jaehyeon
'코틀린에서 예외처리하기(try catch, throw)', IT에 취.하.개
'[Kotlin] 코틀린 lateinit, lazy로 늦은 초기화, 초기화 지연', 신입개발자 쩨리
'[Kotlin] 코틀린의 널 안정성(Null Safety', devlog of ShinJe Kim
소중한 정보 감사드립니다!