[코틀린] 인터페이스, 제네릭

나고수·2021년 9월 24일
0

kotlin

목록 보기
1/10

인터페이스

//인터페이스
//인터페이스는 약속! > 너가 이것을 구현하면 너도 이 타입이다.
//인터페이스의 특징 : 생성자가 없다. >> 인스턴스화 할 수 없다. 설명서가 아니다.
//인터페이스는 지침서이다. >> 니가 이것을 구현하고 싶다면 반드시 아래 기능을 구현해라.
//협업할 때 유용
//상속은 조상을 찾아가는 느낌
//인터페이스는 종의 특징


fun main(array: Array<String>){
    val student_ : Student_ = Student_()
    student_.eat()
}

interface Person_{
    fun eat()
    fun sleep()
}


class Student_() :Person_{
    override fun eat() {

    }

    override fun sleep() {

    }
}

class SoccerPlayer_:Person_{
    override fun eat() {

    }

    override fun sleep() {

    }
}

open class Person(){
    open fun eat(){

    }
    fun sleep(){

    }
}

class Student() : Person(){
    override fun eat() {
        super.eat()
    }
}

class Teacher() : Person(){

}
//인터페이스도 구현이 있는 함수를 만들 수 있다.
//인터페이스에 구현이 있는 함수는 인터페이스를 구현하는 class에서 그 함수를 구현할 필요가 없다.
//인터페이스에서 구현을 안해준 함수는 인터페이스를 구현하는 class에서 그 함수를 반드시 구현해줘야한다.


fun main(array: Array<String>){
    val student__ : Student__ = Student__()
    student__.eat()
    student__.sleep()
}

interface Person__{
    fun eat(){
    println("먹는다")
    }
    //abstract키워드를 함수앞에 붙이면, 이 함수는 이 인터페이스를 구현하는 class에서 반드시 이 함수를 구현해줘야한다.
    fun sleep(){
        println("잔다")
    }
    abstract fun study()
}


class Student__() :Person__{


    override fun study() {
    }
}

class SoccerPlayer__:Person__{


    override fun study() {
    }
}

제네릭

//제네릭
//목적: 다양한 타입의 객체들을 다루는 메소드나 컬렉션 클래스에서 컴파일 시에 타입을 체크해주는 기능
//목적 : 타입을 체크하는 기능
//제너릭은 만들기 어렵고 실제로 만들일이 거의 없기 때문에 사용하는 방법만 숙지한다.

fun main(array: Array<String>){

    //제너릭을 쓰지 않은 경우
    //형 변환을 해줘야한다.
    val list1 = listOf(1,2,3,"바")
    val b : String = list1[2].toString()//형변환

    //제너릭을 사용하는 경우 -> 타입이 안전한다.
    var list2 = listOf<String>("1", "2","3")
    var c : String = list2[2] // String이라는 것을 보장받는다.

    //강한 타입을 체크 할 수 있다.
    val list3 = listOf(1,2,3,"바",3.0)
    //val list4 = listOf<Int>("가") //강한타입체크

    //제너릭을 사용 하지 않은 경우
    val list5 = listOf<Any>(1,2,3,"가") // 타입 : Any
    //부모 : Any
    //자식 : String ,Int, Float


}
profile
되고싶다

0개의 댓글