Kotlin 문법: "인터페이스"

SHY(code poet)·2024년 2월 23일

✨Kotlin에 관하여✨ 

목록 보기
24/36

인터페이스: 외부 모듈에 제공하기 위해 메서드 이름을 나열한 명세서

interface 인터페이스명 {
var 변수: String
fun 메서드1()
fun 메서드2()
}

  • 인터페이스(Interface)는 추상화와 비교하면 가장 명확하게 이해할 수 있는데 실행 코드 없이 메서드 이름만 가진 추상 클래스라고 생각해도 무방하다.
    즉, 누군가 설계해 놓은 개념 클래스 중에 실행 코드가 한 줄이라도 있으면 추상화, 코드 없이 메서드 이름만 나열되어 있으면 인터페이스.
  • 인터페이스는 상속 관계의 설계보다는 외부 모듈에서 내가 만든 모듈을 사용할 수 있도록 메서드의 이름을 나열해둔 일종의 명세서로 제공된다.
  • 결국, 인터페이스는 외부의 다른 모듈을 위한 의사소통 방식을 정의하는 것이다.
    혼자 개발하거나 소수의 인원이 하나의 모듈 단위를 개발할 때는 인터페이스를 사용하지 않는 것이 좋다.
    인터페이스를 남용하면 코드의 가독성과 구현 효율성이 떨어지기 때문이다.
    안드로이드가 제공하는 인터페이스를 자주 사용하는 이유는 안드로이드가 보았을 때 개발자가 만드는 모듈이 외부 모듈이기 때문이다.

a. 인터페이스 만들기

ⅰ. interface 예약어를 사용해서 정의

interface InterfaceKotlin{
var variable: String // var 앞에 abstract 키워드가 생략되어 있습니다.
fun get()
fun set()
}

  • Kotlin은 인터페이스 내부에 프로퍼티도 정의할 수 있다.
    (그러나, 대부분의 객체지향 언어에서는 지원하지 않는다.)
  • 메서드는 코드 블록 없이 이름만 작성해 놓는다.
  • 인터페이스의 프로퍼티와 메서드 앞에는 abstract 키워드가 생략된 형태이다.
  • 추상 클래스와는 다르게 class 키워드는 사용되지 않는다.

ⅱ. 클래스에서 구현하기
: 인터페이스에 정의된 메서드를 오버라이드해서 구현

  • 클래스에서 인터페이스 상속하여 인터페이스를 클래스에서 구현할 때는 상속과는 다르게 생성자를 호출하지 않고 인터페이스 이름만 지정해주면 된다. (object와 유사)

class KotlinImpl: InterfaceKotlin { // 호출하지 않기에 ()를 적어주지 않았다.
override var variable: String = "init value"
override fun get() {
// code
}
override fun set() {
// code
}
}

  • 인터페이스를 클래스의 상속 형태가 아닌 소스 코드에서 직접 구현할 때도 있는데, object 키워드를 사용해서 구현해야 한다.
    아래는 안드로이드 프로젝트를 시작하면 자주 사용하는 형태이다
    var kotlinImpl = object: InterfaceKotlin {
    override var variable: String = "init value"
    override fun get() {
    // code
    }
    override fun set() {
    // code
    }
    }
profile
진정한 개발자는 코드를 두려워하지 않는다. 오히려 코드가 그를 두려워한다.

0개의 댓글