인터페이스

2023. 12. 25. 03:24·Kotlin

인터페이스 (Interface) 란

인터페이스에는 abstract로 정의된 추상메서드나 일반메서드가 포함된다.

추상클래스처럼 프로퍼티를 통해 상태를 저장할 수 없고 선언만 가능하다.

인터페이스도 마찬가지로 객체를 생성할 수 없고 하위 클래스를 통해 구현 및 생성해야한다.

인터페이스를 사용하는 이유?

추상클래스를 사용할 때의 제한을 생각해보자. 하위클래스는 상속을 하나만 허용한다는 단점이 있다.
또한 상위클래스와 하위클래스의 강한 연관이 생기면서 상위클래스의 영향을 그대로 받게된다.
그래서 상위클래스가 수정되었을 때 하위 클래스를 일일이 확인하기 어려운 경우 부작용이 발생할 수 있는것이다.

인터페이스는 클래스가 아니다. 그래서 상속의 개념이 아닌 구현의 개념이라 구현클래스 (하위클래스)와
강한 연관을 가지지 않는다. 인터페이스는 원하는 만큼 구현클래스에 붙여서 필요한 메서드를 구현해 나가면 된다.
설령 인터페이스가 수정된다고 해도 구현클래스는 큰 영향이 없다.

interface 사용 예시

package com.example.demo.`interface`

interface Pet {
    var category: String  // abstract 키워드가 없어도 기본은 추상 프로퍼티
    val msgTags: String
        // val 선언시 게터의 구현이 가능하다.
        get() = "I'm your lovely pet!"

    var species: String
    fun feeding() // 마찬가지로 추상 메서드
    fun patting() { // 일반메서드: 구현부를 포함하면 일반적인 메서드로 기본이 됨
        println("Keep patting!") // 구현부
    }

}

class Cat(name: String, override var category: String) : Pet, Animal(name) {
    override var species: String = "cat"
    override fun feeding() {
        println("Feed the cat a tuna can!")
    }
}

open class Animal(val name: String)

// feeding의 구현을 위해 인터페이스 Pet지정
class Dog(name: String, override var category: String) : Animal(name), Pet {
    override var species: String = "dog"
    override fun feeding() {
        println("Feed the dog a bone")
    }
}

class Master {
    fun playWithPet(pet: Pet) {  // 애완동물 타입에 따라 오버로딩되어서 같은 함수명 사용가능
        println("Enjoy with my ${pet.species}")
    }
}

fun main() {
    val master = Master()
    val cat = Cat("coco", "small")
    val dog = Dog("sarang", "small")
    master.playWithPet(dog)
    master.playWithPet(cat)

}

 

 


do.it 코틀린 프로그래밍 308쪽까지 인터페이스 내용.

'Kotlin' 카테고리의 다른 글

제네릭  (2) 2023.12.25
추상클래스  (1) 2023.12.25
지연초기화  (1) 2023.12.25
프로퍼티 (Getter / Setter)  (0) 2023.12.24
캡슐화  (0) 2023.12.24
'Kotlin' 카테고리의 다른 글
  • 제네릭
  • 추상클래스
  • 지연초기화
  • 프로퍼티 (Getter / Setter)
공부처음하는사람
공부처음하는사람
  • 공부처음하는사람
    lazzzykim
    공부처음하는사람
  • 전체
    오늘
    어제
    • 분류 전체보기 (128)
      • Kotlin (31)
      • Java (55)
      • Spring (19)
      • Algorithm (3)
      • TroubleShooting (1)
      • 내일배움캠프 프로젝트 (14)
      • Setting (2)
      • ... (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
  • 링크

  • 인기 글

  • 태그

    java
    제네릭
    Di
    언체크예외
    spring
    김영한의 실전자바
    내일배움캠프
    OCP
    싱글톤
    @Component
    김영한의 실전 자바
    다형성
    김영한
    kotlin
    배열
    생성자 주입
    캡슐화
    빈 생명주기
    중첩클래스
    래퍼클래스
  • hELLO· Designed By정상우.v4.10.3
공부처음하는사람
인터페이스
상단으로

티스토리툴바