[Kotlin] lateinit, get(), set()

delvering17·2022년 6월 1일
0

Kotlin

목록 보기
13/18

lateinit (늦은 초기화)

  • 변수를 선언하고 나서 나중에 값을 넣으려 할 때 null로 넣어 놓는 경우가 있다. 하지만 나중엔 꼭 값을 넣어야 되지만 실수로 잊어버리면 error가 날 것이다.
  • lateinit는 그걸 방지해준다. 즉 선언은 하지만 나중에 꼭 초기화를 할 거라고 알려준다. 그러지 않으면 컴파일 에러를 낸다.
  • 또한 값이 나중에 변경됨으로 var를 사용한다.
fun main() {
    var car1 = Car()
    car1.maxSpeed // error
}
class Car () {

    lateinit var maxSpeed : String
    init {
				// this.maxSpeed = "200"
    }
}
// Exception in thread "main" kotlin.UninitializedPropertyAccessException: lateinit property maxSpeed has not been initialized
  • 초기화하지 않아서 컴파일 에러를 낸다.

get(), set()

  • Java의 getter(), setter()와 비슷하다.
  • 형식은 이렇다
var maxSpeed : Int = 200     
	get() = field 
	set(value) {  
		field = value
	}
  • 변수 밑에 기본적으로 만들어져 있다.
  • get()은 변수의 값을 return하고
  • set()은 변수의 값을 재정의한다.
fun main() {
    var car1 = Car()
    car1.maxSpeed = 220
    //car1.name = "SuperUltraMintChoco"
    // Exception in thread "main" java.lang.Exception: 너무길어요
    //car1.model = "SAMSUNG"
    println("${car1.name}")
    println("${car1.maxSpeed}")
    println("${car1.model}")
}
class Car ( ){
    var maxSpeed : Int = 200
        // 기본으로 만들어져 있다. 없어도 무관
        get() = field // 변수 호출 메서드 car1.maxSpeed
        set(value) {  // 변수 설정 메서드 car1.maxSpeed =220
           field = value
        }
    var name : String = "CHOCO"
        // 사용자가 설정할 수 있다.
        get() {
            return field.toLowerCase()
        }
        set(value) {
	        field = if(value.length < 10) value 
									else throw Exception("너무길어요")
        }
    var model : String = "KIA"
        private set

}
  • get(), set()는 사용자가 설정할 수 있는다.
  • name 변수 처럼 get()에서 호출 시 리턴 값을 수정할 수 있고, set()에서 재정의 시 상황을 만들어 수정할 수 있다.
  • model 변수 처럼 set 자체를 private를 해서 이외의 클래스에서 수정이 불가하게 만들 수도 있다. 이때는 get()은 private가 아니므로 호출할 수는 있다.

0개의 댓글