본문 바로가기
WebDev

코틀린에서의 인터페이스와 추상 클래스

by dev-woo 2023. 3. 26.
반응형

1. 인터페이스

인터페이스는 코틀린에서 가장 중요한 개념 중 하나이다. 인터페이스는 클래스나 다른 인터페이스에서 구현할 수 있는 일련의 동작을 정의한다. 즉, 인터페이스는 클래스가 구현해야 하는 메소드들의 목록을 정의하며, 이를 통해 객체 지향 프로그래밍의 추상화 개념을 적용할 수 있다.

인터페이스는 다른 클래스나 인터페이스를 상속할 수 있다. 인터페이스는 클래스와는 달리, 아직 구현되지 않은 메소드들만 정의하고 있기 때문에, 구현한 클래스나 인터페이스가 종속된다.

interface Printable {
   fun print()
}

위의 코드는 Printable 인터페이스를 정의하는 예제이다.

2. 추상 클래스

추상 클래스는 인터페이스와 비슷하지만, 일부 메소드가 이미 구현되어 있다는 점에서 다르다. 추상 클래스는 인터페이스가 정의한 메소드들을 부분적으로 구현한 것으로, 하나 이상의 추상 메소드를 가지고 있으며, 일부 또는 전체적으로 추상 클래스 내에 있는 메소드를 overriding하여 적용할 수 있다.

abstract class Shape {
   abstract fun area(): Double
}

class Circle(var radius: Double): Shape() {
   override fun area(): Double {
      return Math.PI * radius * radius
   }
}

class Rectangle(var width: Double, var height: Double): Shape() {
   override fun area(): Double {
      return width * height
   }
}

위의 코드는 Shape 클래스를 추상 클래스로 정의하고, Circle과 Rectangle 클래스가 이를 상속하여 구현하는 예제이다.

3. 인터페이스와 추상 클래스를 함께 사용하기

인터페이스와 추상 클래스는 각각의 장점을 결합하여 사용할 수 있기 때문에, 함께 사용하는 것이 일반적이다. 인터페이스를 정의하여 다른 객체와의 상호작용을 추상화하고, 이 인터페이스를 구현한 추상 클래스를 정의하여 일부 동작을 미리 구현해 놓을 수 있다.

interface Printable {
   fun print()
}

abstract class Printer: Printable {
   fun warmup() {
      println("printer is warming up.")
   }
}

class HP: Printer() {
   override fun print() {
      println("HP printer is now printing.")
   }
}

class Samsung: Printer() {
   override fun print() {
      println("Samsung printer is now printing.")
   }
}

위의 코드는 Printable 인터페이스를 정의하고, Printer 추상 클래스를 정의하여 print() 메소드를 미리 구현해 놓았으며, 이를 상속한 HP와 Samsung 클래스를 구현하는 예제이다.

4. 결론

인터페이스와 추상 클래스는 객체 지향 프로그래밍에서 매우 중요한 개념이다. 이들을 사용하여 코드를 보다 추상적으로 만들 수 있고, 추상화를 통해 관리의 용이성과 유연성을 높일 수 있다. 이 글에서는 코틀린에서의 인터페이스와 추상 클래스를 예제를 통해 설명하였다. 이를 바탕으로, 적절하게 사용한다면 보다 간결하고 유지보수성이 높은 코드를 작성할 수 있을 것이다.

반응형

댓글