고차함수)
함수를 마치 클래스에서 만들어 낸 '인스턴스처럼' 취급하는 방법
함수를 패러미터로 남겨줄수도있고 '결과값으로 반환' 받을수도있는 방법
코틀린에서는 모든 함수를 고차함수로 사용 가능

예시)
fun a(str: String){
println("$str 함수 a")
}
// Unit 함수 자료형의 일종(반환값이 null일 경우 Unit)
fun b(function: (String)->Unit) {
function("b가 호출한")

}
fun main() {
b(::a)
}

람다함수)
fun a(str: String){
println("$str 함수 a")
}
// Unit 함수 자료형의 일종(반환값이 null일 경우 Unit)
fun b(function: (String)->Unit) {
function("b가 호출한")

}
fun main() {
b(::a)

val c:(String)->Unit = { str -> println("$str 람다함수")}
b(c)
}

Posted by 모과이IT
,

패키지)
자바는 폴더와 패키지명을 일치 시켜야 하나 코틀린에서는 폴더와 패키지명을 일치시킬 필요없이
코틀린 파일 상단에 패키지명을 기재하면되고 패키지 키워드 기준으로 구분되어지도록 설계되어졌음
그래서 파일과 클래스명을 일치 시키지 않아도 되며 한 파일에 여러 클래스가 있어도 컴파일러서
패키지 키워드 기준으로 알아서 컴파일 해주도록 되어있음

Posted by 모과이IT
,

클래스 상속가능한 키워드인 open과 마찬가지로 함수에서도 오버라이드 가능하도록
open 키워드를 붙여준 함수에 한해서 override 키워드를 붙여서 오버라이드(함수 재정의)를 
할수있다.

사용예시)
open class Aclass(var name:String, var age:Int, var type:String)
{
open fun introduce(){
println("저는 ${type} ${name}이고, ${age}살 입니다.")

}
}
class Dog (name:String, age:Int) : Aclass(name,age,"개")
{
override fun introduce(){
println("Dog 클래스에서 오버라이딩한 함수")
}

}
fun main(){
var a = Aclass("별이",5,"개")
var b = Dog("별이",5)
a.introduce()
b.introduce()
}

추상화)
추상화할 클래스 나 함수에 abstract를 키워드를 붙여준다

사용예시)
abstract class Animal{
abstract fun eat()
fun sniff() {
println("킁킁")
}
}

class Rabbit : Animal(){
override fun eat(){
println("당근을 먹습니다")
}
}
fun main(){
var r = Rabbit()
r.eat()
r.sniff()
}

인터페이스)
구현부가 있는 함수 -> open 함수로 간주
구현부가 없는 함수 -> abstract 함수로 간주

사용예시)

interface Runner {
fun run()
}
interface Eater {
fun eat() {
println("음식을 먹습니다")
}
}
class Dog : Runner, Eater {
override fun run() {
println ("우나나나 뜁니다")
}
}
fun main() {
var d = Dog()
d.run()
d.eat()
}

Posted by 모과이IT
,