본문 바로가기
Kotlin

[깡샘의 코틀린 프로그래밍] 정리 10 - 추상 클래스 선언

by 들풀민들레 2018. 3. 2.

본 글은 [깡샘의 코틀린 프로그래밍 - 루비페이퍼] 의 내용을 발췌한 것입니다.

좀더 자세한 내용은 책을 통해 확인해 주세요.

 

 

 

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

 

10.1.1. 추상 클래스 선언 abstract

 

추상 함수

 

추상 함수(abstract method)는 미완성 함수 혹은 실행 영역이 없는 함수를 의미합니다. 함수는 선언 부분과 실행 영역이 있는데 추상 함수는 선언 부분만 있는 함수입니다. 추상 클래스(abstract class)는 추상 함수를 포함하는 클래스를 의미합니다. 클래스에 포함된 함수 중에 추상 함수가 있으면 이 클래스는 추상 클래스입니다.

 

01 abstract class AbstractTest1 {

02   fun myFun1() {

03     //…

04   }

05   abstract fun myFun2()

06 }

 

 

위의 소스를 보면 AbstractTest1이라는 클래스를 선언했고 클래스 내부에 함수를 두 개 선언했습니다. 그런데 myFun1( )이라는 함수는 선언 부분 'fun myFun( )'과 실행 영역 '{ }'이 있는데 myFun2( )라는 함수는 선언 부분만 있습니다. 실행 영역이 없습니다. 이처럼 실행 영역이 없는 함수를 추상 함수라고 합니다. 그런데 추상 함수는 반드시 함수 선언 부분에 abstract 예약어가 있어야 합니다. 그리고 abstract로 선언한 추상 함수를 포함하는 클래스는 꼭 클래스 선언 부분에 abstract 예약어가 있어야 합니다.

 

또한, abstract 예약어는 클래스 내부에 선언된 함수에만 사용할 수 있으며, 최상위 레벨에 선언된 함수에는 사용할 수 없습니다. 추상형 함수는 객체지향에서 상속과 관련이 있어서 클래스 내부에서만 사용할수 있는 것입니다.

 

추상 프로퍼티

 

객체지향 프로그래밍 언어라면 추상 함수와 추상 클래스를 모두 제공합니다. 그런데 코틀린에서는 함수뿐 아니라 프로퍼티도 추상형으로 만들 수 있습니다. 추상 프로퍼티란 선언부만 있는 프로퍼티를 말합니다.

 

01 abstract class AbstractTest2 {

02   val data1: String = "kkang"

03   abstract val data2: String

04 }

 

프로퍼티를 선언할 때 값을 초기화하지 않으면 컴파일 에러가 발생합니다. 초깃값을 주거나 아니면 추상형으로 선언하라는 에러 메시지가 출력됩니다. 위의 소스를 보면 02번 줄의 data1은 초깃값이 있지만, 03번 줄의 data2는 선언만 있고 초깃값을 대입하지 않았습니다. 이렇게 선언만 있는 프로퍼티를 추상 프로퍼티라 부르며, 선언부에 abstract 키워드를 추가해야 합니다. 또한, 클래스 내부에 abstract로 선언한 프로퍼티를 포함하는 클래스는 반드시 클래스 선언부에 abstract를 추가해 추상 클래스로 선언해야 합니다.