차지

추상클래스와 인터페이스 본문

Computer Science/OOP

추상클래스와 인터페이스

Cha_Ji 2022. 1. 22. 23:47

추상클래스와 인터페이스

자바 기반 언어에는 상속을 시킬 수 있는 클래스가 두 종류가 있습니다.
추상클래스와 인터페이스 두 차이를 중심으로 서술합니다.

추상클래스

자식 클래스가 어떤 클래스인지 포괄적으로 이야기합니다.
자식과 부모간 공통 코드를 부모에만 정의합니다.

  • 추상 클래스의 추상 메서드는 자식에서 구현이 필요하며, 부모 클래스에 구현된 일반 메서드는 구현하지 않습니다.
  • 추상 클래스는 자식 클래스가 상속을 받아 사용하며 독립적으로는 사용할 수 없습니다.
  • 개, 돼지, 소는 모두 동물이라고 포괄적으로 이야기할 수 있습니다.
// Animal 클래스는 바로 사용할 수 없고 상속을 통해 사용됩니다.
abstract class Animal {

    // eat 함수는 자식이 그대로 물려받습니다.
    // 또한, final 지정자로 지정되어 있는 클래스는 자식 클래스가 함부로 수정할 수 없습니다.
    // java와 달리 kotlin에서는 함수가 public이 아닌 final로 지정되어 있기 때문에 캡슐화가 잘 이루어집니다.
    fun eat() {
        print("eat")
    }

    // walk 클래스는 바로 사용할 수 없고 자식 클래스에서 구현이 필요합니다.
    abstract fun walk()
}

class Dog : Animal {
    override fun walk() {
        print("walk walk walk walk")
    }
}

class Pig : Animal {
    override fun walk() {
        print("walk walk walk walk")
    }
}
  • 동물은 모두 똑같이 입으로 먹습니다. 공통 코드이기 때문에 부모에만 구현했습니다.
  • 동물들은 네 발로 걷기도 하고 두 발로 걷기도 합니다. 하지만 모두 걷기 때문에 추상 메서드로 정의했습니다.

인터페이스

구현체가 어떤 기능을 하는지 이야기합니다.

  • 인터페이스는 다중 상속을 위해서 사용합니다.
  • 흔히 드는 예시인 Flyable 인터페이스를 예시로 들어보겠습니다.
interface Flyable {
    fun fly()
}

class Bird : Flyable {
    override fun fly() {
        print("fly")
    }
}

class Airplane : Flyable {
    override fun fly() {
        print("fly")
    }
}
  • Bird와 Airplane 모두 비행하는 기능을 갖고 있습니다.
  • 그렇기에 Flyable 인터페이스의 메서드를 구현해 사용할 수 있습니다.

추상 클래스 vs 인터페이스

이럴 때 추상 클래스를 사용

  • 공통 코드가 많을 때 사용합니다.
  • 자식 클래스에 재차 구현하지 않고 부모에만 구현할 수 있다는 점이 특징입니다.
  • 또한 자식의 수정이 아예 불가능하기 때문에 캡슐화에도 도움됩니다.

이럴 때 인터페이스를 사용

  • 여러 클래스가 유사한 기능을 할 때 사용합니다.
  • 비행기와 새는 엄연히 다른 클래스이지만 유사하게 날기 때문에 인터페이스를 사용할 수 있습니다.
  • Flyable한 객체를 사용하는 코드가 있다면 유용하게 확장할 수 있습니다.

'Computer Science > OOP' 카테고리의 다른 글

[SOLID] 객체지향 5원칙: LSP  (0) 2022.01.21
[SOLID] 객체지향 5원칙: SRP, OCP  (0) 2022.01.13