아이템 11. 가독성을 목표로 설계하라

아이템 11. 가독성을 목표로 설계하라

코틀린은 간결성을 목표로 설계된 프로그래밍 언어가 아니라, 가독성을 좋게 하는 데 목표를 두고 설계된 프로그래밍 언어입니다.

간결성과 가독성을 혼동하지 말자. (책에서 말하는)간결성은 ‘짧음’과 조금 더 관계가 있다. 가독성은 ‘읽기 좋음’과 관계가 있다.

가독성을 목표로 설계하라 #

프로그래밍은 쓰기보다 읽기가 중요하다. (e.g. " 개발자가 코드를 작성하는 데는 1분 걸리지만, 이를 읽는 데는 10분이 걸린다. “)


인식 부하 감소 #

사용 빈도가 적은 관용구는 코드를 복잡하게 만든다. 이런 관용구들을 한 문장 내부에 조합해서 사용하면 복잡성은 훨씬 빠르게 증가한다.

// A
if(person != null && person.isAdult) {
    view.showPerson(person)
} else {
    view.showError()
}

// B
person?.takeIf { it.isAdult }
    ?.let(view::showPerson)
    ?: view.showError()

기본적으로 ‘인지 부하’를 줄이는 방향으로 코드를 작성하자.

뇌는 짧은 코드를 빠르게 읽을 수 있지만, 익숙한 코드는 더 빠르게 읽을 수 있다. 👍


극단적이 되지 않기 #

students.filter { it.result >= 50 }
        .joinToString(separator = "\n") {
            "${it.name} ${it.surname}, ${it.result}"
        }
        .let(::print)

var obj = FileInputStream("/file.gz")
            .let(::BufferedInputStream)
            .let(::ZipInputStream)
            .let(::ObjectInputStream)
            .readObject() as SomeObject

위 코드는 디버그하기 어렵고, 경험이 적은 코틀린 개발자는 이해하기 어렵다. 따라서 비용이 발생한다.

하지만 이 비용은 지불할만한 가치가 있으므로 사용해도 괜찮다.

문제가 되는 경우는 지불할 만한 가치가 없는 코드에 비용을 지불하는 경우(= 정당한 이유 없이 복잡성을 추가할 때)이다.