출처 : Tekhit Android App School / Soft campus 윤재성 강사님
추상 클래스와 인터페이스는 가장 햇갈리기 쉬운 친구들 입니다. 닮아도 너무 닮았죠😮
이 영상의 18분 20초를 보면 설명이 너무 잘 되있어서 한번씩 보시면 너무 좋습니다.
귀찮아서 안보실 분들을 위해 설명드리겠습니다.
- 추상 클래스 : abstract 지시자를 사용하며 하나 이상의 추상 메소드가 존재합니다.
- 인터페이스 : Interface 지시자를 사용하며 모든 클래스가 추상 클래스로 구성되있습니다.
- 차이 : 추상 클래스는 상속을 통해 기능을 재사용하고 확장, 인터페이스는 인터페이스 추상 메소드에 구현한대로 함수의 기능을 강제하기 위해 사용합니다.
🎉 Abstact
- 추상 메소드 : 간단한 기능만 작성하고 실제로 구현되지 않은 메서드
- 추상 클래스 : 추상 메소드를 가지고 있는 클래스
클래스는 객체를 위한 설계도 입니다. 하지만 추상 클래스의 경우 추상 메소드를 가지고 있기 때문에 구현되지 않은 기능이 존재하기 때문에 완벽한 설계도가 아닙니다. 따라서 추상 클래스를 사용하기 위해선 상속 받은 클래스를 만든 다음 추상 클래스가 가지고 있는 추상 메서드를 구현하여 완벽한 설계도가 완성됩니다.
abstract class TestClass1{
fun testMethod1(){
println("TestClass1의 testMethod1")
}
abstract fun testMethod3()
}
// 추상 클래스를 상속받은 클래스
class SubClass1: TestClass1(){
override fun testMethod3() {
println("SubClass1에서 구현한 testMethod3")
}
}
- 추상 메소드와 클래스는 abstract 키워드를 붙혀줘야 합니다.
- 예전 코틀린 버전에선 open 키워드까지 붙혀줘야 하지만 최근 버전에선 생략이 가능합니다.
- 자식 클래스에서 추상 메소드를 사용할 땐 override 키워드를 붙혀줘야 합니다.
🎉 Interface
- 메서드 오버리이딩의 강제성을 주기위해 추상 클래스를 사용합니다.
- 코틀린(자바 포함)은 단일 상속만 지원하기 때문에 사용해야할 추상 클래스가 여러 개라면 추상 클래스 하나당 하나의 자식클래스를 만들어줘야 합니다.
- 만약 추상 메서드를 가지고 있는 것이 인터페이스라면 하나의 클래스에 안에서 여러 인터페이스가 가진 추상 메서드를 오버라이딩 할 수 있습니다.
- 클래스와 인터페이스의 차이는 인터페이스는 객체를 생성하기 위한 설계도가 아니므로 클래스와 인터페이스 관계에서 상속 관계가 성립할 수 없습니다.
- 인터페이스를 가지고 객체를 생성하는 것이 불가능 하기 때문에 객체와 같이 데이터를 관리하는 것도 불가능합니다.
// 인터페이스
interface Inter1{
fun interfaceMethod1()
}
interface Inter2{
fun interfaceMethod2()
}
// 인터페이스를 구현한 클래스
class TestClass10 : Inter1, Inter2{
override fun interfaceMethod1() {
println("TestClass10의 interfaceMethod1")
}
override fun interfaceMethod2() {
println("TestClass10의 interfaceMethod2")
}
}
'TEKHIT ANDROID SCHOOL' 카테고리의 다른 글
[TEKHIT]Companion & Data Class & Generic (1) | 2024.01.10 |
---|---|
[TEKHIT] Any & This Super (0) | 2024.01.10 |
[TEKIT] 지연 초기화와 오버라이딩 (0) | 2024.01.05 |
[TEKHIT] 상속과 프로퍼티 (0) | 2024.01.05 |
[TEKHIT] Constructor (0) | 2024.01.05 |