본문 바로가기

두두의 IT

[OOP] 추상클래스와 인터페이스

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