새소식

반응형
250x250
My Study/Kotlin

Study About Kotlin 5

  • -
728x90
반응형

Kotlin의 Class

 

1. Class와 Property

 

class Person1 constructor(name: String, age: Int) {
	
    val name: String = name
    var age: Int = age
}

// 위의 Class는 아래 Class로 변경할 수 있다.

class Person2(
	val name: String, 
	var age: Int
) {
	
}

 

2. 생성자와 init

init 블록은 클래스가 초기화되는 시점에 한 번 호출되기에

클래스가 생성되는 시점에 무언갈 검증하고 싶을 때 init을 활용하면 된다.

또한 생성자를 추가하고 싶으면 constructor를 아래 추가한 뒤에 사용하면 된다.

하지만 부 생성자보다는 default parameter를 추천한다.

class Person(
	val name: String,
    var age: Int			// 주 생성자
) {
	init {
    	if(age <= 0) {
        	throw IllegalArgumentException("나이는 ${age}일 수 없습니다.")
        }
    }
    
    constructor(name: String) : this(name, 1)		// 부 생성자
}

 

3.  커스텀 getter, setter

getter와 setter를 커스텀 할 수 있다.

아래의 두 프로퍼티는 getter인데 같은 코드이다.

val isAdult: Boolean
	get() = this.age >= 20
    
    
val isAdult: Boolean
	get() {
    	return this.age >= 20
    }

 

Kotlin에서 상속을 다루는 법

 

1. 추상클래스

 

추상 클래스를 만들 때에는 Java와 동일하게 Class 앞에 abstract를 붙여야한다.

또한 상속을 받을 때에는 한 칸 띄고 : 뒤 부모 클래스를 상속 받으면 된다.

Animal 클래스가 추상 클래스이다.

여기서 추상 프로퍼티가 아니라면 상속을 받을 때 무조건 open을 붙여줘야 한다.

abstract class Animal(
    protected val species: String,
    protected open val legCount: Int
) {

    abstract fun move();
}


class Cat(
    species: String
) : Animal(species, 4) {
    override fun move() {
        println("고양이가 사뿐 사뿐 걸어가~")
    }

}

 

2. 인터페이스

인터페이스 구현도 똑같이 :을 사용한다.

인터페이스는 default 메소드를 구현할 때 default 없이 메소드 구현을 할 수 있다.

또한 중복되는 인터페이스를 특정할 때에는 super<타입> 으로 한다.

class Penguin(
    species: String
) : Animal(species, 2), Swimable, Flyable {

    private val wingCount: Int = 2
    override fun move() {
        println("펭귄이 움직입니다~ 뒤뚱 뒤뚱~")
    }

    override val legCount: Int
        get() = super.legCount + wingCount

    override fun act() {
        super<Swimable>.act()
        super<Flyable>.act()
    }

    override val swimAbility: Int
        get() = 3
}

 

3. 상속 받을 시 주의할 점

상속 시 주의할 점은 상위 클래스의 constructor와 init 블록에서는

하위 클래스의 field에 접근하면 안된다. (final 제외)

하위 클래스 호출 시 상위 클래스가 먼저 호출되어 하위 클래스의 프로퍼티가 초기화 되지 않아 오류가 발생한다.

728x90
반응형

'My Study > Kotlin' 카테고리의 다른 글

Study About Kotlin 7  (0) 2024.03.26
Study About Kotlin 6  (0) 2024.03.09
Study About Kotlin 4  (1) 2024.02.28
Study About Kotlin 3  (0) 2024.02.28
Study About Kotlin 2  (0) 2024.02.28
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.