티스토리 뷰

본 포스팅의 내용은 [깡샘의 코틀린 프로그래밍]을 공부하고 작성자가 생각을 정리하기 위해서 작성한 글이므로 더욱 자세한 내용을 알고 싶으신 분은 [깡샘의 코틀린 프로그래밍]을 강력 추천합니다!!

1. 추상 클래스

1.1. 추상 클래스 선언(abstract)

  • 추상 함수는 미완성 함수 혹은 실행 영역이 없는 함수를 의미한다.
  • 추상 클래스는 추상 함수를 포함하는 클래스를 의미한다.
  • 추상 프로퍼티란 선언부만 있는 프로퍼티를 말한다.
  • abstract 예약어를 활용하여 추상 함수, 추상 프로퍼티와 추상 클래스를 명시할 수 있다.

1.2. 추상 클래스 이용

  • 추상 클래스는 그 자체로는 객체를 생성할 수 없고 하위 클래스에서 추상 멤버들을 구현하여 생성해야 한다.
  • 추상 클래스는 공통 코드(라이브러리, 프레임워크)를 작성하는 개발자에게 유용한 방법이다.

2. 인터페이스

  • 인터페이스는 동일한 목적 하에 동일한 기능을 수행하게끔 강제하는 것이 인터페이스의 역할이자 개념이다.
  • 인터페이스는 추상 함수를 선언하는 것이 주목적이다.

2.1. 인터페이스 선언 및 구현(interface)

  • 인터페이스의 주목적은 추상 함수를 선언하는 것이지만, 필요하다면 인터페이스 내에 구현 내용이 있는 함수도 얼마든지 포함할 수 있다.
  • 인터페이스 구현을 명시할 때 ( )를 작성할 수 없다. 콜론( : ) 뒤에 구현하고자 하는 인터페이스명만 작성하면 된다.
interface MyInterface {
    var data1: String
    fun myFun1() {
        // 인터페이스에서도 구현 내용이 있는 함수가 구현 가능하다.
    }
    fun myFun2()
}

class MyClass : MyInterface {
    override var data1 : String = "hello weekyear"
    override fun MyFun2() {
        // ...
    }
}
  • 인터페이스를 선언할 때 다른 인터페이스를 상속받을 수도 있으며, 한꺼번에 여러 인터페이스를 상속받을 수도 있다.
  • 클래스에서 여러 인터페이스를 나열하여 한꺼번에 구현할 수도 있다.
  • 코틀린은 다중 상속을 지원하지 않으므로 상속받을 클래스는 하나만 명시할 수 있으며, 인터페이스를 여러 개 구현할 수 있다.
  • 클래스 상속과 인터페이스 구현을 동시에 명시할 때 작성하는 순서는 따로 없지만 보통 클래스를 먼저 작성한다.
  • 인터페이스를 객체의 타입으로 이용할 수 있다. 다만 인터페이스의 타입으로 선언할 경우 본래 클래스 타입의 함수나 프로터리를 활용하지 못 한다.

2.2. 인터페이스와 프로퍼티

  • 인터페이스 내에 원한다면 함수 이외에 프로퍼티도 추가할 수 있다.
  • 인터페이스 내에서 프로퍼티를 정의할 때 규칙은 다음과 같다.
    • 추상형으로 선언하거나 get( ), set( ) 함수를 정의해야 한다.
    • 추상 프로퍼티가 아니라면 val은 get( ) 함수를 꼭 선언해야 한다.
    • 추상 프로퍼티가 아니라면 var은 get( ), set( ) 함수를 꼭 선언해야 한다.
    • 인터페이스의 프로퍼티를 위한 get( ), set( ) 함수에서는 field를 사용할 수 없다.
      (field를 사용할 수 없는 프로퍼티를 만든다는 것은 프로퍼티의 값을 유지하거나 변경하는 용도로는 사용할 수 없다는 의미다.)

2.3. 오버라이드 함수 식별

  • 같은 이름의 추상 함수가 여러 개일 때 하위 클래스에서 한 번만 함수를 재정의해주면 된다.
  • 같은 이름의 추상 함수와 구현된 함수가 있을 때 단순하게 추상 함수를 하위 클래스에서 구현하면 되고 구현된 함수를 다시 사용하고 싶을 때 super 키워드를 이용해 호출하면 된다.
  • 같은 이름으로 구현된 함수가 여러 개일 때는 함수명 충돌 에러가 발생한다.
    • 충돌 에러가 발생하면 같은 이름의 함수로 재정의하여 어느 것을 이용할지 혹은 둘 다 이용할지 타입으로 식별해 명시해줘야 한다.

자바 vs. 코틀린

  • 코틀린에서는 추상 함수 이외에 추상 프로퍼티도 선언할 수 있다.
  • 코틀린의 인터페이스는 Java 8과 거의 같다.

참고 자료

[깡샘의 코틀린 프로그래밍] 강성윤 지음 <루비페이퍼>

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함