(Kotlin) stream API / 시퀀스(Sequence)
기본 filter, map 등은 인라인 함수로 정의되어 있어 알아서 인라이닝되므로 성능 신경쓰지말고 그냥 사용하면 된다. 연쇄해서 사용하는 경우 연산의 순서가 성능에 영향을 줄 수 있기 때문에 고려해야 한다. 보통 filter()를 먼저 적용해 추리는게 도움이 되고, 메서드 체이닝 시 앞쪽에서 부터 적용되기 때문에 filter()를 ...
기본 filter, map 등은 인라인 함수로 정의되어 있어 알아서 인라이닝되므로 성능 신경쓰지말고 그냥 사용하면 된다. 연쇄해서 사용하는 경우 연산의 순서가 성능에 영향을 줄 수 있기 때문에 고려해야 한다. 보통 filter()를 먼저 적용해 추리는게 도움이 되고, 메서드 체이닝 시 앞쪽에서 부터 적용되기 때문에 filter()를 ...
lambda { x: Int, y: Int -> x + y } 코틀린 람다는 자바 람다와 달리 항상 중괄호 사이에 위치한다. 반면 메서드 참조는 중괄호 없이 써야 한다. 코틀린 람다 호출은 실행 시점에 아무런 부가 비용이 들지 않으며 기본 구성 요소와 비슷한 성능을 내기 때문에 적절하게 사용하는 것이 권장된다. 코틀린은 파이썬...
클래스를 정의하면서 동시에 인스턴스를 생성한다. 코틀린에는 static이 없고, 대신 이를 최상위 함수로 처리한다. 그러나 최상위 함수는 말 그대로 최상위에 존재하는 함수이기 때문에 어떤 클래스의 private에는 당연히 접근할 수 없어 클래스 내부에 선언된 static이 클래스의 다른 멤버와 상호 작용하는 경우를 커버할 수 없다. 이렇게, stat...
클래스 delegation (컴포지션, composition) 상속을 허용하지 않는 클래스에 새로운 동작을 추가해야 할 때(Wrapping) 또는 메소드의 동작을 변경하고 싶을 때 위임을 사용하게 되는데 단점이 준비 코드가 너무 많이 필요하다는 점 이다. 아래와 같이 innerList를 Wrapping하게 되면 위와 같이 굳이 재정의하고 싶...
Data Class data class User( val name: String, val age: Int ) 코틀린에서는 data 키워드를 붙여주면 equals() / hashCode() 같은 메소드를 자동으로 오버라이드해준다! equals()/hashCode() pair 코틀린에...
프로퍼티 = 필드 + 접근자 클래스 내부의 변수 선언은 자바에서는 필드 선언을 의미하지만 코틀린에서는 프로퍼티 선언을 의미한다. 즉, 필드 뿐만 아니라 접근자 메서드도 알아서 생성해준다. class Person( val name: String, // val은 읽기 전용 프로퍼티. private 필드와 getter. ...
extends / implements구분 없이 그냥 kt :붙이고 적는데, 클래스 상속인 경우 super class의 생성자를 호출해야 하므로 ()를 붙여주어야 하고 인터페이스 구현인 경우 생성자가 없기 때문에 붙이지 않아야 하므로 이를 보면 둘을 구분할 수 있다. 주 생성자(primary constructor) 주 생성자는 클래스 이름 뒤에 오는 ...
enum 자바처럼 enum 클래스 안에 프로퍼티나 메소드를 정의할 수 있다. enum class Color(val r: Int, val g: Int, val b: Int) { RED(255, 0, 0), ORANGE(255, 165, 0), YELLOW(255, 255, 0), GREEN(0, 255, 0), BLUE(0, 0, 255...
Kotlin 중첩 클래스 / 내부 클래스 아무 변경자를 붙이지 않고 클래스의 내부에 다시 정의된 클래스는 자바의 static 중첩 클래스와 동일하다. 내부 클래스로 변경해 바깥쪽 클래스에 대한 참조를 포함하도록 하려면 inner 변경자를 붙여준다. 내부 클래스에서 바깥쪽 클래스의 인스턴스에 접근하기 위해서는 this@를 붙여주어야 한다. class ...
어떤 언어를 사용하든 변수에 담기는 데이터는 크게 Value와 Address 두 가지로 구분할 수 있다. 포인터, 객체 변수 등등은 변수 자체에 담기는 데이터가 Address다. 문제는 객체를 저장/전송하려고 할 때 발생하는데, 객체 변수에 들어있는 Address를 저장/전송한다면 받는 측에서 그 Address를 참조해봐도 아무런 데이터가 없기 때문에...