10장. 추상 클래스와 인터페이스

10.1 추상 클래스
10.1.1 추상 클래스 선언(abstract)
- 추상 함수 : 실행 영역이 없는 함수, 최상위 레벨에 선언된 함수에는 사용할 수 없다. 클래스 내부에 선언된 함수만 가능
- 추상 클래스 : 추상 함수를 포함하고 있는 클래스
- 추상 프로퍼티 : 선언만 있고 초깃값을 대입하지 않은 프로퍼티
10.1.2 추상 클래스 이용
- 추상 클래스는 그 자체로는 객체를 생성할 수 없다. 추상 클래스를 상속받는 하위 클래스를 이용해 객체를 생성한다.
- 추상 클래스를 상속받는 하위 클래스는 추상 함수, 추상 프로퍼티를 모두 재정의 해야하며, 그렇지 않다면 하위
클래스도 abstract 키워드를 이용해 추상형으로 선언해야 한다.
10.2 인터페이스
10.2.1 인터페이스 선언 및 구현
- 인터페이스의 주 목적은 추상 함수를 선언하는데 있다. 만약 인터페이스의 추상 함수를 하위 클래스에서 재정의하지
않는다면 해당 클래스는 abstract 키워드를 이용해 추상형으로 선언해야 한다.
- 인터페이스의 추상 프로퍼티나 추상 함수는 abstract를 추가하지 않아도 된다.
- 인터페이스로 객체를 생성할 순 없지만 인터페이스를 구현한 클래스의 객체를 생성하고 이 객체를 인터페이스
타입으로 선언해서 이용할 수 있다. 하지만 인터페이스에 선언된 함수만 이용할 수 있다.
10.2.2 인터페이스와 프로퍼티
- 프로퍼티를 추상형으로 선언하거나 get(), set() 함수를 정의해야한다.
- 추상 프로퍼티가 아니라면 val은 get() 함수를 꼭 선언해야 한다.
- 추상 프로퍼티가 아니라면 var는 get(), set() 함수를 꼭 선언해야 한다.
- 인터페이스의 프로퍼티를 위한 get(), set() 함수에서는 field를 사용할 수 없다.
10.2.3 오버라이드 함수 식별
- 같은 이름의 추상 함수가 여러 개일 때에는 클래스에서 한 번만 재정의해주면 된다.
- 같은 이름의 추상 함수와 구현된 함수가 있을 때, 추상 함수는 구현하고, 구현된 함수는 super를 통해 이용한다.
- 같은 이름으로 구현된 함수가 여러 개일 때 super<Interface>.fun 으로 이용할 함수를 명시해 준다.
※ 코틀린에서는 추상 함수 이외에 추상 프로퍼티도 선언할 수 있다.
※ 코틀린의 인터페이스는 Java 8과 거의 같다