Java to Kotlin (10) - 상속을 다루는 방법

이동명·2024년 6월 18일
0

kotlin

목록 보기
10/19
post-thumbnail

추상 클래스

다음과 같은 자바코드가 있다. 코틀린으로 다시 작성해보자.

접근제어자, getter, 추상메소드 전부 다 구현한 모습. 아직까지 크게 다르진 않다.

상속 부분도 보도록 하겠다. 자바코드 이다.

아래처럼 코틀린으로 작성할 수 있다. 주생성자 다음에 콜론을 이용해 생성자를 넣어주는 모습을 볼 수 있다.

조금 더 응용해보자. 자바코드 이다.

코틀린에서는 override와 custom getter를 이용해 아래처럼 작성할 수 있다.

하지만 왜 에러가 뜰까 ?
추상 프로퍼티가 아니라면 open을 꼭 붙여줘야 한다.

인터페이스

아래의 인터페이스 도면을 작성 해보자.

아래는 자바 인터페이스 이다. 코틀린으로 작성 해볼것이다.

코틀린으로 작성한것이다.

  • 접근지시어 생략 가능 (public)
  • default 생략 가능
  • unit(void) 생략 가능


아래는 인터페이스를 구현하는 자바코드이다.

코틀린으로 작성해보자. 생성자 뒤에 구현할 인터페이스를 작성한다.

클래스를 상속할 때 주의할 점

아래의 코드에서 Derived를 인스턴스화 해서 Derived(300)을 실행해본다면 ?

결과는 다음과 같다.

  • Base Class
  • 0
  • Derived Class

이유는 상위클래스의 생성자가 호출되는 시점에서 하위 클래스의 number라는 값이 초기화가 이루어지지 않아서이다.

따라서 상위 클래스의 생성자와 init블럭에서는 하위클래스의 field에 접근하면 안 된다.

정확히는 final이 아닌 프로퍼티에 접근하면 안 된다.(하위 클래스에서 override 하고 있는 프로퍼티에 접근하면 안됨 )

요약하자면

상위 클래스를 설계할 때 생성자 또는 초기화 블록에 사용되는 프로퍼티에는
open을 피해야 한다

상속 관련 지시어 정리

  1. final : override를 할 수 없게 한다. default로 보이지 않게 존재한다.
  2. open : override를 열어 준다.
  3. abstract : 반드시 override 해야 한다.
  4. override : 상위 타입을 오버라이드 하고 있다.

다음 포스팅에선 접근제어자 를 공부해보도록 하겠습니다.

profile
Web Developer

0개의 댓글