//숫자 형태의 문자열을 숫자로 바꿀 때 val intStr = "10" val str = Integer.patseInt(intStr) //일반 클래스간에 형변환 시 as 사용 open class Animal class Dog : Animal() val dog = Dog() val animal = dog as Animal //숫자형 자료끼리 형 변환 val a = 10L val b = 20 val c = a.toInt() val d = b.toDouble() val e = a.toString()
//형 체크, JAVA의 instanceOf 에 해당ㅈ val str = "hello" if(str is String){ println(str.toUpperCase()) }
//let() 함수 //fun <T, R> T.let(block: (T) -> R): R val result = str?.let { Integer.parseInt(it) } //let 함수는 블록에 자기 자신을 인수로 전달하고 수행된 결과를 반환한다. //인수로 전달한 격체는 it으로 참조하며, let을 ?.과 함꼐 사용하면 null값이 아닐 때만 실행하는 코드를 //위와 같이 나타낼 수 있다. //위 코드는 str이 null이 아닐 경우에만 정수로 변경하여 출력한다.
//with() 함수 //fun <T, R> with(receiver: T, block T.() -> R): R with(str){ println(toUpperCase()) } //with함수는 인수로 객체를 받고 블록에 리시버 객체로 전달한다. //수행된 결과를 반환한다. //리시버 객체로 전달된 객체는 this로 접근 가능하다. //this는 생략이 가능하므로 위와 같이 작성이 가능하며, 안전한 호출이 불가하여 str이 null값이 //아닐 경우에만 사용해야 한다.
//apply() 함수 //fun <T> T.apply(block: T.() -> Unit): T val result = car?.apply { car.setColor(Color.RED) car.setPrice(1000) } //apply함수는 블록에 객체 자신이 리시버 객체로 전달되고 이 객체가 반환된다. //객체의 상태를 변화시키고 그 객체를 다시 반환할 때 주로 사용.
//run() 함수 //fun <R> run(block: () -> R): R val avg = run { val korean = 100 val english = 80 val math = 50 (korean + english + math) / 3.0 } //객체에서 호출하는 방법은 객체를 블록의 리시버 객체로 전달하고 블록의 결과를 반환한다. //안전한 호출을 사용할 수 있어서 with 함수보다 유용하다. //fun <T, R> T.run(block: T.() -> R): R str?.run { println(toUpperCase()) }