2. 추상클래스 & 인터페이스
페이지 정보
작성자 관리자 댓글 0건 조회 2,892회 작성일 20-03-22 21:43본문
2. 추상클래스 & 인터페이스
추상클래스 (Abstract Class)
추상클래스는 아직 구현되지 않고 선언만 된 추상메서드를 가지고 있는 클래스이다.
이 추상클래스는 메서드가 구현되지 않아서 이 클래스를 직접 객체로 만들 수는 없다!
반드시!! 상속을 받는 자식클래스 (SubClass) 가 있어야한다.
추상클래스는 상속을 통해 생성될 자식클래스에서 메서드 오버라이딩에 강제성을 부여하기 위해 사용된다.
실습.
파일명 : AbstractClass.kt
open abstract class AbstractClass {
//자식 클래스에서 그냥 사용할 수 있는 일반 메서드
fun generalMethod () {
println("일반 메서드")
}
//자식 클래스에서 오버라이딩 해야 사용할수 있는 추상 메서드
open abstract fun abstractMethod()
}
파일명 : SubClass .kt
class SubClass : AbstractClass() {
override fun abstractMethod() {
println("추상 메서드 구현")
}
}
파일명 : Abstract_main.kt
fun main(args : Array<String>) {
var tempClass : AbstractClass = SubClass()
tempClass.generalMethod()
tempClass.abstractMethod()
}
예제 소스 처럼 추상클래스에서는 바디가 구현된 일반 메서드도 구현이 가능하다.
그리고 추상 메서드는 서브클래스에서 Overriding 해서 사용하면 된다.
결과.
일반 메서드
추상 메서드 구현
Process finished with exit code 0
인터페이스 (Interface)
인터페이스는 다소 추상적인 개념이다.
보통 프로젝트를 개발할 때 설계를 한다.
이때 여러 인터페이스를 구현하면 각 인터페이스 타입을 가진 객체를 생성할 수 있고 이를 통해 인터페이스에 정의된 메서드 호출이 가능하다.
인터페이스 역시 추상클래스처럼 추상메서드 뿐만 아니라 바디가 구현된 일반 메서드도 넣을 수 있다.
그리고 인터페이스를 사용하면 협업이 가능해진다. 이런 역할을 하는 메서드를 만들어줘 하면서 인터페이스를 제공해주면 개발자는 어떤 방식이든 구현 (Override) 해 주기만 하면된다.
실습.
fun main (args :Array<String>) {
// 정의한 인터페이스 (InterfaceExample) 타입의 객체 생성
// 인터페이스는 직접 생성이 불가능하다. 해당 인터페이스를 구현한 클래스로 생성
var tempClass : InterfaceExample = GeneralClass()
useInterfaceExample(tempClass)
}
interface InterfaceExample {
fun generalMethod() {
println("InterfaceExample 에서 구현된 일반 메서드 입니다")
}
fun abstractMethod()
}
class GeneralClass : InterfaceExample {
override fun abstractMethod() {
println("GeneralClass 에서 구현된 추상 메서드 입니다")
}
}
fun useInterfaceExample(ife : InterfaceExample) {
ife.generalMethod()
ife.abstractMethod()
}
Abstract 메서드와 굉장히 비슷하다고 생각할 수 있다.
결과.
InterfaceExample 에서 구현된 일반 메서드 입니다
GeneralClass 에서 구현된 추상 메서드 입니다
Process finished with exit code 0
추상클래스는 abstract 메서드가 하나 이상있는 클래스이다. 추상클래스의 경우 상속받는 자식클래스는 반드시 추상클래스의 추상메서드를 구현해야한다고 했다. 그러니깐 추상클래스는 필수적으로 구현해야할 메서드가 딱 있을때 쓰면 된다.
인터페이스는 구현하기전에 메서드에 대해 명세서를 작성해 놓은 느낌이다. 인터페이스를 상속받는 클래스에서는 반드시 인터페이스에 있는 추상메서드를 다 구현해야한다.
그리고 추상클래스는 단일 상속만 가능한데 인터페이스는 여러개의 인터페이스를 구현할수 있다. 즉 다중 상속이 가능하다.
댓글목록
등록된 댓글이 없습니다.