Kotlin은 객체지향 프로그래밍 언어이다. 객체지향 프로그래밍에서 반드시 언급되는 키워드 중 추상화라는 것이 있다. 단어 자체는 많이 들어 봤지만, 추상화를 학습할 때 overriding, interface와 같은 개념들이 함께 언급되면서 머리 속을 복잡하게 한다. 이들은 비슷한 듯하지만 각자 다른 역할을 하기에 명확하게 구분하여 이해할 필요가 있는 것 같다.
본 포스팅에서는 추상화의 개념에 대해 살펴보고 kotlin 언어로 사례를 살펴보자.
class Car(val brand: String, val model: String) { fun start() { println("Engine started") } fun stop() { println("Engine stopped") } } val myCar = Car("Toyota", "Camry") myCar.start()
abstract class Animal { // 추상 클래스 abstract fun makeSound() // 추상 함수. 선언만 해둔다. fun sleep() { println("Zzzzz") } } class Dog : Animal() { override fun makeSound() { // override하여 상세 동작을 명세한다. println("Woof! Woof!") } }
interface Shape { //인터페이스 fun calculateArea(): Double } class Circle(val radius: Double) : Shape { override fun calculateArea(): Double { return 3.14 * radius * radius } }
fun main() { var m = Mango() m.taste() m.color() } interface Tasty { fun taste() } interface Color { fun color() { println("색이 밝다.") } } class Mango: Tasty, Color { // 두 개의 인터페이스를 상속 받아 사용함 override fun taste() { println("달콤하다.") } override fun color() { println("노랗다.") } }
[TIL-240306]