728x90

코틀린 클래스 선언

class 클래스명(변수) { }

코틀린은 자바, C++과는 달리 클래스 선언 부분에서 이름에 괄호를 붙여 생성자를 만들 수 있다.

자바는 멤버변수를 field라고 하지만 코틀린 프로퍼티라는 용어를 사용한다.
자바는 생성자를 꼭 정의해야 하지만 코틀린은 생략이 가능하다.

코틀린에는 주 생성자와(primary constructor)와 부생성자가(secondary constructor)가 존재한다.
주 생성자는 class 선언과 함께 선언하고, 부 생성자는 추가적인 생성자가 필요할 때 사용한다.
생성자를 정의하지 않으면 기본으로 인자가 없는 생성자를 만들어 준다.

부모의 생성자는 super(), 클래스 내 생성자중 다른 생성자는 this()로 호출이 가능하다.


fun main() {
    var a = Person("박보영", 1990)  // 코틀린은 new 키워드 없이 인스턴스를 생성한다.
    var b = Person("전영경",1997)
    var c = Person("차은우")
    var d = Person("홍길동")

    //println("안녕하세요, ${a.birthYear}년생 ${a.name} 입니다.")
}

class Person (var name:String, val birthYear:Int) {

    // var name:String, val birthYear:Int

    // 프로퍼티 선언 및 초기화는 기본 생성자에서 간결한 구분으로 사용 가능


    // 초기화
    init {

        // init 안에서는 자바처럼 [this.클래스변수= 매개변수]를 얼마든지 할 수 있다.

        println("안녕하세요, ${this.birthYear}년생 ${this.name}입니다.")
    }

    // 보조 생성자 : constructor 키워드로 선언하고 클래스 body에 구현한다.

    // 클래스 별로 여러 개를 가질 수 있다.
    constructor(name: String) : this(name,1997)
}
 

기본 생성자

- 기본 생성자에 어노테이션 접근지정자 등이 있을 경우 constructor 키워드가 필요하다.

  class Person public @Inject constructor(name: String) { .... }



클래스 상속
- 코틀린의 최상위 클래스는 Any 이다.
  Any는 java.lang.Object 와는 다른 클래스이며, equals(), hasCode(), toString()만 있다.
- 상속 키워드는 콜론(:)이다. Java 의 상속 키워드는 extends
- 코틀린의 클래스와 메소드는 기본적으로 final이다. 즉 기본적으로 상속을 못하게끔 되어 있다.
  Java에서는 클래스나 메서드에 final 키워드를 붙여 클래스를 더 이상 상속받지 못하게 하거나,
  메서드를 재정의하지 못하게 할 수 있다.
- 클래스의 상속을 허용하려면 클래스 앞에 open 변경자를 붙여야 한다.
  open 변경자가 없으면 final 로 자식 클래스에서 override가 불가능하다. 
  오버라이드를 허용하고 싶은 메소드나 프로퍼티 앞에도 open 변경자를 붙여야 한다.
- 부모 클래스의 메소드를 자식 클래스에서 오버라이드 한 경우, 해당 메소드는 기본적으로 열려있다.

fun main() {
    var a = Animal("불독", 3,"개")
    var b = Dog("불독", 5)

    a.introduce()
    b.introduce()
    b.bark()

    var c = Cat("나갈래", 4)
    c.introduce()
    c.meow()
}

open class Animal(var name:String, var age:Int, var type:String){
        open fun introduce(){ // open 이므로 override 가능하다.
        println("저는 ${type} : ${name}, ${age} 살 입니다.")
    }
}

class Dog(name:String, age:Int) : Animal (name,age,"개"){
    // 상위 클래스 함수에 open 키워드를 명시하고, 서브 클래스 함수에 override 를 붙인다.
    override fun introduce(){
        println("타입 : 개, ${name}, ${age} 살 입니다.")
    }

    fun bark(){
        println("멍멍멍")
    }
}

class Cat(name: String, age: Int) : Animal(name, age, "고양이"){
    fun meow() {
        println("야옹야옹")
    }
}
 


728x90

'안드로이드 > Kotlin 문법' 카테고리의 다른 글

코틀린 접근 제한자  (0) 2020.01.14
코틀린 패키지  (0) 2020.01.13
코틀린 인터페이스  (0) 2020.01.13
코틀린 추상클래스  (0) 2020.01.12
코틀린 기본 이해  (0) 2020.01.07
블로그 이미지

Link2Me

,