Kotlin class 1부

자바와 달리 코틀린 선언은 기본적으로 final이며 public이다.

게다가 중첩 클래스는 기본적으로는 내부 클래스가 아니다. 즉 코르린 중첩 클래스에는 외부 클래스에 대한 참조가 없다.

코틀린 인터페이스는 자바 8 인터페이스와 비슷하다. 코틀린 인터페이스 안에서는 추상 메소드뿐 아니라 구현이 있는 메소드도 정의 가 가능(자바8의 디폴트 메소드와 유사)
다만 인터페이스에는 아무런 상태도 들어갈수 없다!.

ex) interface 구현 방법

1
2
3
4
5
6
7
8
interface Calculator{
fun add()
}


class Sample : Calculator{
override fun add() = println("add!!!")
}

코틀린에서 클래스 이름 뒤에 : 을 붙이고 인터페이스와 클래스 이름을 적는 것으로 클래스 확장과 인터페이스 구현을 모두 처리한다.

코틀린 클래스에서 상속과 구현을 쓰려면? 아래의 정보를 알아햐 한다.

자바의 클래스와 메소드는 기본적으로 상속에 대해 열려 있지만 코틀린의 클래스와 메소드는 기본적으로 final이다. 어떤 클래스의 상속을 허용하려면 클래스 앞에 open변경자를 붙여야 한다. 그와 더불러 오버라이드를 허용하고 싶은 메소드나 프로퍼티 앞에도 open 변경자를 붙여야 한다.

열린 클래스 정의하기

1
2
3
4
5
6
7
8
9
10
11
12
open class Sample : Calculator{

fun something() {}
// 이 함수는 final, 하위클래스가 이 메소드를 override할수 없음

open fund doSomethin(){}
// 이 함수는 open변경자를 ㅌ몽해 열려 있다. 하위클래스에서 이메소드를 오버라이드해도 된다.

override fun click() {}
//이 함수는 상위 클래스에서 선언된 열려있는 메소드를 오버라이드 한다. 오버라이드한 메소드는 기본적으로 열려있다.

}

오버라이드 금지하기

1
2
3
4
5
open class Sample : Calculator{

final override fun click() {}

}

상속을 제어하는 변경자

변경자 변경자가 붙으면 설명
final 오버라이드 불가 클래스 멤버의 기본 변경자
open 오버라이드 가능 open 명시에만 오버라이드가 가능
abstract 반드시 오버라이드 추상클래스에서만 이 변경자를 붙일수 있다.
override 상위 클래스나 상위 인스턴스의 멤버를 오버라이드 중 하위클래스의 오버라이드를 금지하려면 final 을 명시하자

참고서적

  • Kotlin In ACTION
  • 에이콘 출판사