반응형

Basic class 문법

Java와 관계

Java는 처음 등장시 하나의 언어로 모든 플랫폼에서 동작한다는 철학으로 처음 큰 관심을 받았고, 현재는 가장 많은 개발자들이 현업에서 사용하고 있는 언어이다. 이러한 특징때문에 구글의 안드로이드는 Java를 개발지원 언어로 채택하여서 단기간에 ios 개발 생태계를 따라잡게 된다(인해전술로).

문제는 Java는 본래 임베디드(세탁기, 전자렌지 같은 것들)를 위해 설계된 언어였고, 썬마이크로즈를 오라클에서 인수하면서 오라클사의 소유이다. 때문에 Java 오라클과 구글간 분쟁이 있었고 오라클이 재판에서 승소를 하게 되었다. 하지만, 젯브레인즈(JetBrains)사에서 구글과 협력하여 kotlin(러시아 샹트페테부르크의 앞의 섬 이름)이 등장하게 된다.

안드로이드에서 Java를 대체하고자 하는 영향도 컸으며, 안드로이드에 특화된 언어라서 Java 코드를 kotlin으로 변환하는 것도 가능하다. 즉, 안드로이드 한정으로 Java로 된 것은 kotlin으로도 가능하다(아직 필자가 low수준까지 해보지 않아 확신 못하나 그렇게들 설명하고 있다).

class

코틀린(kotlin)은 안드로이드 한정으로 자바(Java) 대체 가능한 언어기 때문에 같은 개념인 클래스가 존재한다.

클래스의 상속

자바와 반대로 코틀린은 기본적으로 상속이 금지이다. 상속을 가능하게 하기 위해서는 open 키워드를 사용한다. 프로그래밍 언어에서 특정 키워드를 추가하여 허용을 한다는 것은 해당 동작에 대해서 보수적인 것을 뜻하기도 한다.

open class Animal {
    // contents
}

class Dog : Animal {
    // contents
}

인자를 받는 생성자가 있는 클래스를 상속하는 경우 초기화 상속도 가능하다.

open class Animal(val name : String) {
}

class Dog(name: String) : Animal(name) {
}

내부 클래스

클래스 내에서 클래스를 사용하는 경우 inner 라는 키워드를 앞에 붙여 줘야 한다. 이는 기존의 가독성 문제를 보완하기 위한 것으로 생각된다.

class OuterClass {
    var a = 10

    inner class OuterClass2 {
        fun someThing() {
            a = 20
        }
    }
}

추상 클래스

자바와 비슷하게. abstract 키워드를 사용한다.

abstract class A {
    abstract fun func()

    fun func2() {

    }
}

class B : A() {
    overide fun func() {
        println("hello")
    }
}

val b = B()

참고 자료

서적: 오준석의 안드로이드 생존코딩(코틀린편)

반응형

+ Recent posts