728x90
추상 클래스(Abstract Class)
- 추상 메서드를 가지며, Abstract로 선언된 클래스. 최소 한 개의 추상메소드를 포함하는 경우 반드시 추상 클래스로 선언해야 함
- 추상 메소드가 하나라도 없을 때 Abstract로 선언한 클래스.
- 추상 클래스는 온전한 클래스가 아니기 때문에 인스턴스 생성 불가
- 상속과 구현
- 서브 클래스에서 슈퍼 클래스의 추상 메소드를 구현(오버라이딩)
- 슈퍼 클래스의 추상 메서드를 구현한 서브 클래스는 추상 클래스가 아님
- 추상 클래스를 상속 후 추상 메서드를 구현(오버라이딩)하지 않으면 추상 클래스가 됨(서브 클래스도 Abstract로 선언)
[목적]
- 상속을 위한 슈퍼 클래스로 활용하기 위한 것
- 추상 메소드를 통해 서브 클래스가 구현할 메소드의 원형을 알려주는 인터페이스의 역항르 하고, 서브 클래스의 다형성을 실현함
[소스코드]
//Kotlin
abstract class Animal {
// 추상 메서드는 반드시 override 해야 함
abstract fun bark()
// 이 메서드는 하위 클래스에서 선택적으로 override 할 수 있다. (하거나 안하거나 자유)
open fun running() {
println("animal running!")
}
}
class Dog() : Animal() {
override fun bark() {
println("멍멍")
}
// 이 메서드는 override 하거나 하지 않거나 자유.
override fun running() {
println("dog's running!")
}
}
인터페이스(Interface)
- 인터페이스를 구현할 때 implements 키워드를 사용하며, 인터페이스의 모든 메소드를 구현해야 함
- 인스턴스(객체) 생성 불가
- 구현 후 외부에 보여질 접근 방법인 상수(public static final. 생략 가능)와 추상 메소드(abstract public. 생략 가능)로만 구성하며, interface 키워드를 사용하여 선언함
[필요성]
- 인터페이스 내부 메소드는 추후 원하는 방법(내용)으로 작성
- 그룹 프로젝트로 시스템 개발 시 용이
- 프로그램의 모듈화(각 모듈을 연결시켜주는 역할)
추상클래스와 인터페이스 공통점과 차이점
공통점 : 객체 생성 불가, 추상 메소드 구현을 강제 오버라이딩
차이점
소스코드
'두두의 IT' 카테고리의 다른 글
[Kotlin] in/out (0) | 2022.04.11 |
---|---|
[Kotlin] operator (0) | 2022.04.11 |
[Kotlin] annotation class (0) | 2022.04.11 |
[OOP] 접근지정자(Access Specifier) (0) | 2022.04.11 |
[Kotlin] enum class (0) | 2022.04.11 |