728x90
    
    
  반응형
    
    
    
  
안녕하세요, 이번 포스팅은 코틀린 상속에 대해 다뤄보고자 합니다.
[java] 상속
안녕하세요. 이번 포스팅은 상속에 대해 다뤄보겠습니다. 객체 지향 프로그래밍에서 상속이란? 유지보수하기 편하고 프로그램을 수정하거나 새로운 내용을 추가하는 것을 유연하게 해주는 것.
drcode-devblog.tistory.com
자바에서 상속을 다룬 적이 있는데요,
개념 관련해서는 유지보수하기 편하고 프로그램을 수정하거나 새로운 내용을 추가하는 것을 유연하게 해주는 것.
이라고 정의할 수 있겠네요.
어쨌든 상속을 사용하는 이유는 중복되는 코드를 줄이고자 하는 것이지요
open class Car100() {
    open fun drive() : String {
        return "달린다"
    }
    open fun stop() {
    }
}
class SuperCar100() : Car100() {
    override fun drive() : String {
        val run = super.drive()
        return "빨리 $run"
    }
}
class Bus100() : Car100() {
}여기서 class 앞에 open이 있는 Car100 클래스는 클래스의 기본적인 디폴트 타입이 private입니다.
open으로 명시해주지 않으면 private형으로 되는 것이지요.
자바에서는 public인데, 코틀린에서는 open인것 같습니다.
fun main(args : Array<String>) {
    val superCar100 : SuperCar100 = SuperCar100()
    println(superCar100.drive())
    superCar100.stop()
    val bus100 : Bus100 = Bus100()
    println(bus100.drive())
}이것의 실행 결과를 보면
빨리 달린다 
달린다 
가 출력되게 됩니다.
Car100 클래스를 상속받은 버스와 슈퍼카는 상속받음으로 인해 코드의 길이가 확 줄었습니다.
상속을 응용해보도록 하겠습니다.
fun main(args: Array<String>) {
    val monster = SuperMonster(100, 10)
    val night = SuperNight(130, 8)
    monster.attack(night)
    monster.bite(night)
}
// 상속이 만들어낸 특징
// - 자식 클래스는 부모 클래스의 타입이다.
// - 부모 클래스는 자식 클래스의 타입이 아니다!
open class Charactor(var hp : Int, var power : Int) {
    fun attack(charactor: Charactor , power : Int = this.power) {
        charactor.defense(power)
    }
    open fun defense(damage : Int) {
        hp -= damage
        if(hp > 0) println("${javaClass.simpleName}의 남은 체력 $hp 입니다")
        else println("사망 했습니다.")
    }
}
// 자식 클래스가 인스턴스화 되기 이ㅟ해서 부모 클래스 선행되서 인스턴스화 되어야 한다.
class SuperMonster(hp : Int, power : Int) : Charactor(hp, power) {
    fun bite(charactor: Charactor) {
        super.attack(charactor, power + 2)
    }
}
class SuperNight(hp : Int, power : Int) : Charactor(hp, power) {
    val defensePower = 2
    override fun defense(damage: Int) {
        super.defense(damage - defensePower)
    }
}
함수 앞에도 기본적으로 private이 디폴트로 붙습니다. 
open을 사용하여 사용할수 있습니다. 
상속받은 클래스는 override를 사용하여 함수를 재정의할 수 있습니다. 
super는 상속을 해주는 클래스를 의미합니다. 
super를 사용하여 좀 더 간단한 코드를 구현할 수 있습니다.
728x90
    
    
  반응형
    
    
    
  '모바일 > Kotlin' 카테고리의 다른 글
| [Kotlin] 코틀린 제너릭(Generic) (0) | 2021.04.11 | 
|---|---|
| [Kotlin] 코틀린 인터페이스, 상속과 인터페이스의 차이 (0) | 2021.04.11 | 
| [Kotlin] 코틀린 변수 범위, 접근 제어자, 접근 제어자 예제 (0) | 2021.04.11 | 
| [Kotlin] 클래스(Class) 실습 TV 만들기 (0) | 2021.04.09 | 
| [Kotlin] 클래스(Class) 실습 은행 계좌 만들기 (0) | 2021.04.09 | 
 
										
									 
										
									 
										
									 
										
									
댓글