Yebali

Kotlin의 클래스 본문

Kotlin

Kotlin의 클래스

예발이 2021. 9. 22. 21:05

코틀린에서 클래스를 다루는 방법을 알아보자

속성 값만 있는 클래스

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

fun main() {
    var a = Person("예바리", 2004)
}

내부에 매서드 없이 속성 값만 가지는 클래스는 위에서 처럼 선언될 수 있다.
하지만 대부분의 클래스는 매서드를 함께 가지고 있다.

멤버 함수를 갖는 클래스

class Person (var name: String, val birthYear: Int) {
    fun introduce() {
        println("안녕하세요. ${birthYear}년생 ${name}입니다")
    }
}

fun main() {
    var a = Person("예바리", 2004)
    a.introduce()
}

멤버 함수는 클래스의 {} 내부에 위치하고, 함수를 선언해주는 형식과 동일하다.

클래스의 생성자

기본 생성자

위의 예시 class Person (var name: String, val birthYear: Int) 부분에서

(var name: String, val birthYear: Int) 부분이 기본 생성자를 정의하는 부분이다.
클래스의 속성을 선언함과 동시에 기본 생성자를 선언하는 방법이다.

보조 생성자

기본 생성자외의 보조 생성자는 아래와 같이 만들 수 있다.
중요한 점은 보조 생성자를 만들 때에는 반드시 기본 생성자를 호출하여 속성들을 초기화해주어야 한다.
방법은 보조 생성자 뒤에 ': this(속성 1, 속성 2,...)'을 사용하면 된다.

class Person (var name: String, val birthYear: Int) {
    // 보조 생성자
    constructor(name:String) : this(name, 1997) {
     	println("보조 생성자가 사용되었습니다.")   
    }
    
    fun introduce() {
        println("안녕 날 소개하지.")
    }
}

fun main() {
    var a = Person("예바리") // 보조 생성자를 사용해서 인스턴스 생성
    a.introduce()
}

Init 매서드

Kotlin에서는 'init'이라는 특수한 함수를 클래스 내부에 정의하여 생성자를 통해 인스턴스가 만들어질 때 특정 동작을 할 수 있도록 지원한다.

class Person (var name: String, val birthYear: Int) {
    init {
        println("안녕하세요. ${this.birthYear}년생 ${this.name}입니다")
    }
    
    fun introduce() {
        println("안녕 날 소개하지.")
    }
}

fun main() {
    var a = Person("예바리", 2004)
    a.introduce()
}

클래스의 상속

Kotlin은 기본적으로 클래스의 상속이 막혀있다.
클래스를 상속하기 위해서는 'open' 키워드를 사용해야한다

// 상속을 위해 'open' 키워드 사용
open class Animal(var type:String, var name:String, var age:Int) {
    fun introduce() {
        println("타입:${type}, 이름:${name}, 나이:${age}")
    }
}

class Dog (name:String, age:Int) : Animal ("dog", name, age) {
    fun bark() {
        println("멍멍")
    }
}

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

fun main() {
    var a = Dog("별이", 5)
    var b = Cat("냥이", 7)
    
    a.introduce()	
    a.bark()
    
    b.introduce()
    b.meow()
}

슈퍼 클래스의 속성을 서브 클래스에서 다시 선언할 수 없기 때문에 Cat에는 'name'과 'age' 앞에 'var/val' 키워드를 사용하지 못한다.

 

서브 클래스로 인스턴스를 생성할 때에는 아래와 같이 반드시 슈퍼 클래스의 생성자를 호출해주어야 한다.

class Cat (name:String, age:Int) : Animal ("cat", name, age)

'Kotlin' 카테고리의 다른 글

Kotlin의 제너릭  (0) 2021.09.22
Kotlin의 Static Method와 Function  (0) 2021.09.22
Kotlin의 스코프 함수  (0) 2021.09.22
Kotlin의 고차함수와 람다함수  (0) 2021.09.22
Kotlin의 추상화와 인터페이스  (0) 2021.09.22