-
[Kotlin 코틀린] 추상클래스와 인터페이스 (Abstract Class & Interface)Kotlin 2021. 1. 8. 23:05728x90
'디모의 Kotlin 강좌' 유튜브 강의 및 추가 학습하여 정리한 내용입니다.
상속과 오버라이딩
open 키워드를 이용하여 클래스가 상속될 수 있도록 할 수 있다.
(코틀린은 상속 금지가 기본값으로 java의 final 클래스와 같다)
또한 오버라이딩을 위해 함수에 open 키워드를 붙이고 서브클래스에서 override 키워드를 붙여 재구현이 가능하다.
open class Animal (var name:String, var age:Int, var type:String) { open fun eat() { println ("음식을 먹습니다") } fun introduce() { println ("저는 ${type} ${name} 이고, ${age} 살 입니다.") } } class Dog (name String, age:Int) : Animal (name, age, "개") { override fun eat() { println ("사료를 먹습니다") } fun bark() { println ("멍멍") } }
※ 생성자에 var, val 등을 붙이면 클래스의 property(속성)으로 선언되며, 붙이지 않으면 일반 parameter 로 받게 된다.
추상클래스 (Abstract class)
추상메소드 (Abstract method)를 가지고 있는 클래스
abstract 키워드 사용시에는 클래스나 함수에 open 키워드를 따로 명시하지 않아도 된다.
abstract class Animal { abstract fun eat() ... } class Rabbit : Animal() { override fun eat() { println ("당근을 먹습니다") } }
인터페이스 (Interface)
※ 일반적으로 인터페이스는 모든 메소드가 abstract 인 클래스를 의미하지만, Java8 부터는 defulat 키워드로 method 구현도 가능하다.
public interface Animal { void eat(); default void introduce() { Systemp.out.println("안녕하세요"); } }
코틀린에서 인터페이스는 property, abstract 메소드, 일반 메소드 모두를 가질 수 있다.
interface Runner { fun run() } interface Eater { fun eat() { println ("음식을 먹습니다") } } class Dog : Runner, Eater { override fun run() { println ("뜁니다") } override fun eat() { println ("사료를 먹습니다") } }
다만 추상클래스는 생성자를 가질 수 있는 반면 인터페이스는 생성자를 가질 수 없다.
또한 추상클래스와 다르게 인터페이스는 다중상속이 가능하다.
인터페이스에서 구현부가 있는 함수 → open 함수로 간주 / 구현부가 없는 함수 → abstract 함수로 간주하므로 별도의 키워드는 필요가 없다. 서브클래스에서 모두 구현 및 재정의 가능하다.
정리
- 오버라이딩 : 이미 구현이 끝난 메소드의 기능을 서브클래스에서 변경해야 할 때
- 추상화 : 형식만 선언하고 실제 구현은 서브클래스에 일임할 때
- 인터페이스 : 서로 다른 기능들을 여러개 물려주어야 할 때
참고사이트
www.youtube.com/watch?v=P3Dp7YRwD_E&list=PLQdnHjXZyYadiw5aV3p6DwUdXV2bZuhlN&index=11
[Kotlin 코틀린 기초] 시리즈 게시글 더보기
2021/01/06 - [Kotlin] - [Kotlin 코틀린 기초] 변수 및 자료형 (Nullable & Non-Nul
2021/01/06 - [Kotlin] - [Kotlin 코틀린 기초] 타입추론(Type inference)과 함수
2021/01/09 - [Kotlin] - [Kotlin 코틀린 기초] 고차함수와 람다(High Order Function & Lambda)
728x90'Kotlin' 카테고리의 다른 글
[Kotlin 코틀린] Scope function - apply, with, let, also ,run (0) 2021.08.28 [Kotlin 코틀린] 고차함수와 람다(High Order Function & Lambda) (0) 2021.01.09 [Kotlin 코틀린] 타입추론(Type inference)과 함수 (0) 2021.01.06 [Kotlin 코틀린 기초] 변수 및 자료형 (Nullable & Non-Nul (0) 2021.01.06