[Kotlin] 오버라이딩과 추상화

Jiyoon Chae·2021년 11월 22일
0

Kotlin

목록 보기
3/5

오버라이딩

수퍼 클래스에서 허용한다면 서브 클래스에서 같은 이름과 형태로 된 함수의 내용을 다시 구현할 수 있음

fun main() {
  var t= Tiger()  //tiger 인스턴스 생성
	  t.eat()//eat함수 실행 ->음식을 먹습니다 실행됨 -> 고기를먹습니다 (override후)
}

open class Animal {  //수퍼클래스에서 
    open fun eat(){   //open이 붙은 함수는 서브클래스에서 override를 붙여 재구현
        println("음식을 먹습니다")
    }
}

class Tiger: Animal(){ //tiger클래스가 animal클래스를 상속받음.
    override fun eat(){ //서브클래스에서 eat함수 재구현
        println("고기를 먹습니다")

    }
}

추상화 abstraction

-수퍼클래스에서는 함수의 구체적인 구현은 없고, 단지 Animal의 모든 서브클래스는 eat이라는 함수가 반드시 있어야 한다는 점만 명시

각 서브 클래스가 비어있는 함수의 내용을 필요에 따라 구현함.

⇒선언부만 있고 기능이 구현되지 않은 추상 함수

⇒ 추상함수를 포함하는 추상 클래스

fun main() {
  var r = Rabbit()
  r.eat()
  r.sniff()
}

abstract class Animal {
    abstract fun eat()
        fun sniff(){
            println("킁킁")
        }
    
}

class Rabbit: Animal(){
    override fun eat(){
        println("당근을 먹습니다")

    }
}

인터페이스

  • 속성, 추상 함수, 일반 함수를 가짐.

→ 인터페이스는 생성자를 가질 수 없음.

인터페이스에서

구현부가 있는 함수 -> OPEN 함수로 간주
구현부가 없는 함수 -> abstract 함수로 간주

→서브 클래스에서 구현 및 재정의가 가능.

→한번에 여러 인터페이스를 상속 받을 수 있음, 유연한 설계 가능!!

fun main() {
  var d = Dog()
  d.run()
  d.eat()
}

interface Runner{ //인터페이스 생성
    fun run()    //run이라는 함수 생성
}

interface Eater{ //인터페이스 생성
    fun eat(){
        println("음식을  먹습니다")
    }
}

//인터페이스 2개를 한번에 상속받는 클래스 생성   
class Dog **: Runner, Eater** { //Dog클래스로 두 인터페이스 상속 : 인터페이스1, 인터페이스2
       override fun run(){
           println("우다다다 뜁니다")
       }
       override fun eat() {
           println("허겁지겁 먹습니다")
       }
   } 
  • 오버라이딩은 이미 구현이 끝난 함수의 기능을 서브클래스에서 변경해야 할 때 사용
  • 추상화는 형식만 선언하고 실제 구현은 서브클래스에 일임할 때.
  • 인터페이스는 서로 다른 기능들을 여러개 물려주어야 할 때.
profile
바닐라라떼 좋아☕

0개의 댓글

관련 채용 정보