목록Dev/Kotlin (4)
에르노트
자바와 비교했을 때 코틀린의 가장 특징적인 부분을 하나만 고르라면 이 범위 지정 함수(Scope Function)가 아닐까 싶다. 이들은 코틀린의 표준 라이브러리에 포함되어 있는 표준 함수 중에서도 형제처럼 비슷한 형태를 띄고 있으면서 묘하게 다르게 동작한다. 공식 문서에도 대놓고 'Basically, these functions do the same..' 이라고 나와 있으며 람다식의 접근 방법과 반환형의 차이가 있을뿐이라고 한다. 하지만 이 미묘한 차이로 인해 관습적으로 제각각 다른 용도로 쓰이고 있으며, 그러한 일반적인 사용법들에 대해서 정리해보고자 한다. let() public inline fun T.let(block: (T) -> R): R { contract { callsInPlace(block..
자바에서는 연산자 오버로딩을 문법적으로 지원하지 않는다. 하지만 코를린에서는 연산자의 역할을 함수로 정의함으로써(Convention) 일반적인 함수를 정의하는 느낌 그대로 연산자를 이용할 수 있다. 따라서 플러스(+)와 같은 연산자에 여러 가지 다른 의미를 심어줄 수 있는데 이를 연산자 오버로딩(Operator Overloading)이라고 한다. val a = 1 val b = 2 println(a + b) //1번 println(a.plus(b)) //2번 //1번과 2번은 100%은 같은 의미이다! 이처럼 연산자를 사용하는 것은 관련된 멤버 메서드를 호출하는 것과 같다. fun main(){ println(Point(1, 3) + Point(2, 2)) } class Point(var x: Int, ..
fun Array.reverse() fun ByteArray.reverse() fun ShortArray.reverse() fun IntArray.reverse() fun LongArray.reverse() fun FloatArray.reverse() fun DoubleArray.reverse() fun BooleanArray.reverse() fun CharArray.reverse() fun MutableList.reverse()자바에서 Collections 클래스의 reverse(list) 형태로 제공되었던 reverse() 함수가 코틀린에서는 확장 함수 형태로 제공된다. 따라서 Collections를 import 할 필요없이 사용하려는 Array 혹은 MutableList에서 바로 reverse()..
코딩을 하다보면 모종의 이유로 문자열을 바이트 단위로 바꿀 일이 생긴다. 그래서 자바에서 String은 자체적으로 getBytes() 메소드를 제공했고, 간단하게 String의 내용을 바이트 배열로 변환할 수 있었다.public class forjava { public static void main(String[] args) { String str = ""; byte[] arr = str.getBytes(Charset.defaultCharset()); } } 그러면 코틀린에서는? getBytes() 메소드가 없다!!fun main(){ val str = "" val arr = str.getBytes() } 기본적으로 자바와 100% 호환되게 만들어둔 코틀린이기에 해당 기능이 빠졌다고 생각할 수는 없다. ..