-
[Kotlin] 추상 클래스와 인터페이스코틀린 공부/코틀린 기초 2024. 5. 21. 14:29
자바에서도 추상 클래스 (abstract class)와 인터페이스 (interface)의 개념이 있다. 하지만 코틀린 기초 설명 영상을 보니 자바와는 조금 다른 개념이 포함되어 있는 것 같아 공부해보기로 했다.
1. 추상 클래스란?
코틀린에서 추상 클래스는 일반적으로 설계의 청사진을 제공하며, 공통 기능을 구현해 놓은 클래스다.
이 클래스는 구체적인 내용을 모두 포함하지 않으며, 이를 상속받는 하위 클래스에서 더 구체적인 구현을 해야 합니다.
따라서, 하위 클래스는 추상 클래스의 일부 기능을 상속받고, 추가적인 구체적인 기능을 제공하여 추상 클래스의 설계를 완성하게 됩니다.
abstract class가 활용될 상황을 생각해보자면,
- 공통 기능의 구현과 확장을 통해 여러 클래스 간에 공통된 기능을 공유하고, 이를 상속받는 하위 클래스에서 추가적인 기능을 구현하거나 기존 기능을 확장할 때 유용할 것이다.
abstract class AbstractAnimal { abstract fun test1() open fun test2(){ print("AbstractAnimal - open function") } } class AbstractRabbit: AbstractAnimal() { override fun test1(){ print("AbstractRabbit - abstract function") } override fun test2(){ print("AbstractRabbit - open function") } }기본적인 내용이야 알기 때문에 자바와 다른 부분을 보자면 추상메서드가 아닌 일반 메서드를 상속하기 위해서는 class를 상속하는 것과 마찬가지로 open 키워드를 추가해야한다.
2. 인터페이스
인터페이스 역시 대략적인 설계의 청사진을 제공하고, 하위 클래스에서 이를 구체화해서 사용하는 점에서 비슷하다.
하지만 다른 점도 있다.
- 프로퍼티의 상태 정보를 저장할 수 없다.
- 인터페이스는 constructor를 사용 할수 없다.
- 인터페이스는 다중상속 가능, 추상 클래스는 다중상속 불가능
interface InterfaceAnimal { val age: Int // 상태를 초기화 할수 없고 상속 받은 곳에서 초기화 해야 한다. }// 다중 상속이 가능하다. class AbstractTiger(override val age: Int) : InterfaceAnimal, InterfaceAnimalB { override fun one(): String { TODO("Not yet implemented") } }사용 상황이 어떻게 다른지 Chat GPT에 물어봤다.
- 인터페이스는 다중 상속이 필요하거나, 특정 기능을 강제하고, API나 플러그인 시스템을 설계할 때 유용합니다.
- 추상 클래스는 공통 코드와 상태를 재사용하고, 기본 구현을 제공하며, 템플릿 메서드 패턴을 사용할 때 유용합니다.
추가로 인터페이스에서는
- 구현부가 있는 함수는 open 함수로 간주
- 구현부가 없는 함수는 abstract 함수로 간주한다.
interface InterfaceAnimal { val age: Int fun one(): String fun two(): String { return "two" } }class AbstractTiger(override val age: Int) : InterfaceAnimal { override fun one(): String { TODO("Not yet implemented") } }'코틀린 공부 > 코틀린 기초' 카테고리의 다른 글
[Kotlin] object (0) 2024.05.23 [Kotlin] 스코프 함수 (Scope Function) (0) 2024.05.23 [Kotlin] 고차함수와 람다함수 (0) 2024.05.22 [Kotlin] 코틀린 class (open, data , sealed, internal class) (0) 2024.05.17 [Kotlin] 코틀린 생성자(Constructor) (0) 2024.05.17