자바에서 코틀린으로: 코틀린으로 리팩터링하기
- data 변경자를 사용하면 컴파일러가 사용자가 정의하지 않은 equals, hashcode, toString 메서드를 자동으로 대신 생성한다.
- 데이터 클래스에 있는 copy 메서드는 public이기 때문에 불변 객체 생성을 copy 메소드로 우회할 수 있다. (불변 조건이 필요하면 데이터 클래스가 적합하지 않다.)
- [Java]
Optional.orElseThrow()(NoSuchElementException) == [Kotlin]!!(NullPointerException)- 예외를 발생하지 않고 안전한 호출을 하기 위해선
?.을 사용한다.
- 예외를 발생하지 않고 안전한 호출을 하기 위해선
- elvis(?:) : 좌변이 null이 아니면 좌변 값 반환, 그렇지 않음 우변 값을 반환한다.
- let(?.let) : ?. 수식 객체가 null이면 null, 그렇지 않으면 let 블록으로 전달한다.
- takeIf : 술어가 true면 수신객체 반환, 그렇지 않음 null을 반환한다.
- 코틀린 사용 경험이 부족하면, takeIf보다는 when을 사용해서 명시성 측면을 중시하는 것이 괜찮을지도.
- 책에서의 값은 불변 데이터 조각, 값 타입은 값의 동작을 의미한다.
- 값 : 7, Integer, "banana", URI (불변)
- 값 X : java.util.Date(
setYear()와 같은 수정자 존재)
-
공유된 컬렉션을 변경하지 말자. (파라미터, 공유 변수 등)
-
코틀린 컬렉션은 불변(immutable)이 아닌 읽기 전용(read-only)이다.
-
확장 함수와 리시버를 이용해서 코드의 가독성을 더 높일 수 있다.
fun sufferScoreFor(route: List<Journey>): Int {
return sufferScore(
route.longestJourneys(3),
Routes.getDepartsFrom(route)
)
}
fun List<Journey>.longestJourneys(limit: Int): List<Journey> = sortedByDescending { it.duration }.take(limit)- 계산 : 같은 인자로 호출하면 항상 같은 결과를 돌려주는 함수
- 동작 : 파라미터의 상태를 변경하거나 전역 변수나 데이터베이스 등을 변경하는 함수