본문 바로가기

코딩

[Kotlin] 상속과 접근 제한자

반응형

[Kotlin] 상속과 접근 제한자

 

 

상속

코틀린에서의 상속 형식은 아래와 같다.

open class Fruit {
}

class Apple: Fruit(){
}

 

다른 클래스에서 상속이 가능하게 하려면 open 키워드를 사용해야 한다.

 

상속 관계에서는 상속 대상이 되는 클래스를 상위 클래스라 하고, 상속받는 클래스를 하위 클래스라고 한다.

 

위와 같은 경우에서 상위 클래스는 Fruit 이며, 하위클래스는 Apple 이 된다.

 

 

상위 클래스가 매개변수를 가지고 있다면 생성자를 호출할 때 다음과 같이 입력한다.

 

open class Fruit(name: String) {
}

class Apple(name:String) : Fruit(name){
}

 


오버라이딩 

 

상속의 가장 큰 장점은 상위 클래스에서 정의한 변수와 함수를 하위 클래스에서 자신의 것처럼 사용할 수 있다는 것이다.

 

open class Fruit{
    open var price = 100
    open fun buyFruit(){
        println("$price")
    }
}

class Apple : Fruit(){
    override var price = 20
    override fun buyFruit(){
        println("apple : $price")
    }
}

fun main(){
    val obj = Apple()
    obj.buyFruit()
}

// 실행 결과  : apple : 20

 

상위 클래스에서 오버라이딩을 허용할 변수, 함수의 앞부분에 open 키워드를 추가한다.

 

open 키워드가 없다면 오버라이딩을 할 수 없다.

 

그리고 하위 클래스에서 override 키워드를 사용하여 재정의 해준다.

 


접근 제한자

 

접근 제한자란, 클래스의 변수, 함수를 어느 범위까지 이용 가능하게 할지 결정하는 키워드이다.

접근 제한자는 4가지가 있다.

 

접근 제한자 범위
public 모든 클래스
internal 같은 모듈
protected 상속 관계의 하위 클래스
private 클래스 내부

 

internal 의 범위인 같은 모듈에서 모듈이란, 그래들, 메이븐과 같은 빌드 도구에서의 프로젝트 단위를 의미한다.

 

open class Fruit{
    var publicPrice = 20
    protected var protectedPrice = 30
    private var privatePrice = 50
}

class Apple : Fruit(){
    fun Fun(){
        publicPrice++
        protectedPrice++
        privatePrice++  // 오류
    }
}

fun main(){
    val obj = Fruit()
    obj.publicPrice++
    obj.protectedPrice++ // 오류
    obj.privatePrice++ // 오류
반응형