본문 바로가기
수업내용

20230731 Kotlin

by titlejjk 2023. 8. 1.

Kotlin에서 모든 Class는 기본적으로 final Class를 가진다.

 

만약 하나의 Class를 상속받거나 하려면 open이라는 예약어를 사용하면 된다.

이렇게 오류가 나지만

 

Phone Class에 open을 붙여주면

오류가 사라진다.

 

package com.example.hellokotlin

/*
    클래스 선언시 기본값을 상속을 받지 못하게 되어 있다.
    마치 java에서 final class Phone{} 처럼
    상속을 받을 수 있게 하려면 open이라는 예약어를 붙여준다.
 */
open class Phone{
    fun call(){
        println("전화를 걸어요!")
    }
}

class HandPhone : Phone(){ //Phone 클래스를 상속 받기
    fun mobileCall(){
        println("이동중에 전화를 걸어요!")
    }
}

 

아래 코드는 Phone 클래스를 상속 받은 클래스로 생성한 객체이기에 2개의 메서드를 모두 사용할 수 있는 코드이다.

 

 

Kotlin에서 인터페이스만들기

 

Class자리에 interface라는 예약어를 넣어주면된다.

//Kotlin에서 인터페이스 만들기

interface Remocon{

    fun up()
    fun down()

}

 

Java에서는 인터페이스를 구현하기 위해 Implement를 사용했지만 Kotlin에서는 " : " 을사용해 인터페이스를 구현한다.

 

package com.example.hellokotlin

//Kotlin에서 인터페이스 만들기

interface Remocon{

    fun up()
    fun down()

}

//인터페이스를 구현한 클래스 만들기

class MyRemocon : Remocon{
    override fun up() {
        TODO("Not yet implemented")
    }

    override fun down() {
        TODO("Not yet implemented")
    }

}

 

클래스를 정의함과 동시에 객체를 생성하는 것이 object키워드 이다.

 val r2:Remocon = object : Remocon{
        override fun up() {
            TODO("Not yet implemented")
        }

        override fun down() {
            TODO("Not yet implemented")
        }
    }

 

추상 클래스 AbstractClass

 

//추상 클래스 => abstract 예약어를 이용해서 만든다.
abstract class Weapon {
    
   fun move(){
       println("이동합니다.")
   }
    //추상 메서드 역시 abstract 예약어를 이용해서 만든다.
    abstract fun attack()
  
}
class MyWeapon : Weapon(){
    override fun attack() {
        println("무언가를 공격해요!")
    }

}

 

Java랑 별로 다를 것이 없다.

 

Kotlin의 다형성

 

 //다형성
    val w3 = MyWeapon() //w3에는 MyWeapon객체의 참조값이 들어 있다.
    
    val a:MyWeapon=w3 //w3는 당연히 MyWeapon type이다.
    val b:Weapon=w3 //w3는 Weapon type이기도하다.
    val c:Any=w3 //Any type은 Java에서 Object type에 해당되는 type이다.

 

여기서 중요한건 Any type인데 어떤타입의 변수라도 담을 수 있다.

 

 var d:Any = 10
    d = true
    d = "kim"
    d = w3

 java에서 
    class Util{
        public static int number = 10
        public String version = "1.0"
        public static void get(){}
        public void send(){}
        
    }
    가 있을 때 send라는 메서드를 호출하기 위해서는
    new Util().send();로 호출해야한다.
    version 객체는
    new Util().version;
    static인 int number객체는
    Util.number
    그리고 get을 호출하려면(static)
    Util.get();이런 식으로 호출한다.
    
    Kotlin은 그럼 어떤 식으로 호출이 가능할까?
    먼저 Kotlin에는 static이라는 예약어는 없다.

이럴때는 Kotlin에 있는 companion object(동반객체)를 사용하면된다.

class Util{
    //Util클래스와 함께하는 동반객체
    companion object{
        //동반객체의 필드와 메서드(함수)를 정의하면 된다.
        val version:String="1.0"
        fun send(){
            println("전송합니다")
        }
    }

 

'수업내용' 카테고리의 다른 글

20230803 Kotlin  (0) 2023.08.03
20230801 Kotlin  (0) 2023.08.01
20230731 Kotlin  (0) 2023.07.31
20230728 Kotlin  (0) 2023.07.28
20230727 Android  (0) 2023.07.28

댓글