Kotlin 문법과 예제 8 - 클래스의 상속

강유리 (Rein)·2023년 4월 11일
0

Kotlin

목록 보기
8/10

상속이 필요한 경우

  • 이미 존재하는 클래스를 확장하여 새로운 속성, 함수를 추가한 클래스를 만들 때
  • 여러 개 클래스를 만들었는데, 클래스들의 공통점을 뽑아 코드 관리를 편하게 할 때

super class와 sub class

super class : 속성과 함수를 물려주는 쪽

sub class : 속성과 함수를 물려받는 쪽

상속 사용 예제 코드

fun main(){

}


open class Animal (var name:String, var age:Int, var type:String){ //*open
	fun introduce(){
        println("저는 ${type} ${name}이고, ${age}살 입니다.")
    }
}

*open : 클래스가 상속될 수 있도록 클래스 선언 시 붙여줄 수 있는 키워드

상속에 대한 규칙

  • 서브 클래스는 수퍼 클래스에 존재하는 속성과 같은 이름의 속성을 가질 수 없음
  • 서브 클래스 생성 시 반드시 수퍼클래스의 생성자까지 호출되어야 함
fun main(){
		
    var a = Animal("별이", 5, "개")
    var b = Dog("별이", 5)
    a.introduce()
    b.introduce() //모두 같은 내용을 출력한다. 
}


open class Animal (var name:String, var age:Int, var type:String){ //*open
	fun introduce(){
        println("저는 ${type} ${name}이고, ${age}살 입니다.")
    }
}

class Dog (name:String, age:Int ) : Animal(name, age, "개"){//var, val 등을 사용하지 않는다.

}

dog 클래스는 생성자에서 이름과 나이를 받기는 하지만 클래스의 자체 속성으로 만들어주는 var, val을 붙이지 않고, 일반 파라미터로 받아 Animal 클래스의 생성자에 직접 넘겨준다.
*var, val 등을 붙이면 속성으로 선언된다.

서브 클래스의 자체 함수 만들기

서브 클래스인 Dog만의 자체 함수를 만들어 보자

fun main(){
		
    var a = Animal("별이", 5, "개")
    var b = Dog("별이", 5)
    a.introduce()
    b.introduce()
    b.Bark() //멍멍
}


open class Animal (var name:String, var age:Int, var type:String){ //*open
	fun introduce(){
        println("저는 ${type} ${name}이고, ${age}살 입니다.")
    }
}

class Dog (name:String, age:Int ) : Animal(name, age, "개"){//var, val 등을 사용하지 않는다.

    		fun Bark(){
                println("멍멍")
            }
}
fun main(){
		
    var a = Animal("별이", 5, "개")
    var b = Dog("별이", 5)
    a.introduce()
    b.introduce()
    b.Bark()
    
    var c = Cat("루이", 1)
    c.introduce()
    c.meow()
}


open class Animal (var name:String, var age:Int, var type:String){ //*open
	fun introduce(){
        println("저는 ${type} ${name}이고, ${age}살 입니다.")
    }
}

class Dog (name:String, age:Int ) : Animal(name, age, "개"){//var, val 등을 사용하지 않는다.

    		fun Bark(){
                println("멍멍")
            }
}

class Cat(name:String, age:Int) : Animal (name, age, "고양이") {
    fun meow(){
        println("야용")
    }
}

상속의 장점과 단점

장점 : 클래스를 더 구조적으로 다룰 수 있게 해준다.
단점 : 지나친 상속 구조는 코드를 더 어렵게 만들 수 있다

참고자료
디모의 코틀린 강좌

profile
(멋쨍이) Android Developer (하고싶다)

0개의 댓글