Developing Myself Everyday
[이펙티브 코틀린] 8장 - 효율적인 컬렉션 처리

현대 프로그래밍 언어는 대부분 컬렉션 처리를 잘 지원합니다. 컬렉션 처리를 최적화하는 것은 생각보다 어렵지만 굉장히 중요합니다. 그러니 몇 가지 규칙을 기억하고, 상황에 맞게 생각해야합니다. 아이템 49 - 하나 이상의 처리 단계를 가진 경우에는 시퀀스를 사용하라아래의 Iterable과 Sequence는 완전히 다른 목적으로 설계되어서, 다른 형태로 동작합니다.interface Iterable { operator fun iterator(): Iterator}interface Sequence { operator fun iterator(): Iterator} 무엇보다 Sequence는 지연 처리됩니다. 따라서 시퀀스의 최종적인 계산은 최종 연산이 이루어질 때 수행됩니다. 반면에 Iterable..

article thumbnail
[이펙티브 코틀린] 7장 - 비용 줄이기

가독성과 성능 사이에 트레이드 오프가 발생할 때, 개발자는 무엇이 더 중요한지 스스로 답할 수 있어야 합니다. 이를 결정할 수 있는 몇 가지 방법이 있지만, 최종적인 결정은 스스로 상황을 보고 해야 합니다. 아이템 45 - 불필요한 객체 생성을 피하라 객체 생성에는 비용이 들어갑니다. 그러니 불필요한 객체 생성은 피해야 합니다. 이런 이유에서 JVM에는 동일한 문자열을 처리한다면, 기존의 문자열을 재사용합니다.val str1 = "effective kotlin"val str2 = "effective kotlin"println(str1 === str2) // true -128 ~ 127 범위에 해당하는 숫자도 마찬가지로 재사용합니다. 객체 생성 비용은 항상 클까?객체를 생성하면, 크게 세 가지 비용이 ..

[이펙티브 코틀린] 6장 - 클래스 설계

클래스는 객체 지향 프로그래밍(OOP) 패러다임에서 가장 중요한 추상화입니다. 아이템 36 - 상속보다는 컴포지션을 사용하라상속은 'is-a' 관계의 객체 계층 구조를 만들기 위해 설계되었습니다. 상속은 관계가 명확하지 않을 때 사용하면, 여러 가지 문제가 발생할 수 있습니다. 그렇기 때문에 일반적으로는 상속보다 컴포지션을 사용하는 것이 좋습니다. 간단한 행위 재사용공통되는 행위는 슈퍼클래스를 만들어서 많이 추출합니다.abstract class LoaderWithProgress { fun load() { innerLoad() } abstract fun innerLoad()}class ProfileLoader: LoaderWithProgress() { override f..

[이펙티브 코틀린] 5장 - 객체 생성

data class DialogConfig( val icon: Int = -1, val title: Int = -1, val onCancelListener: (() -> Unit)? =null)fun makeDefaultDialogConfig() = DialogConfig( icon = R.drawble.ic_dialog, title = R.string.dialog_title, onCancelListener = { it.cancel() })코틀린은 함수형 스타일과 객체 지향 스타일로도 작성할 수 있습니다. OOP는 객체를 생성해서 사용하므로, 객체를 생성하는 방법을 정의하여야 합니다. 객체 생성 방식에 따라서 다른 특징이 생기기에 여러 방법을 알아야 합니..

article thumbnail
[이펙티브 코틀린] 4장 - 추상화 설계

추상화(abstraction)은 복잡한 자료, 모듈, 시스템 등으로부터 핵심적인 개념 또는 기능을 간추려 내는 것을 말합니다. 간단하게 말하자면, 추상화는 복잡성을 숨기기 위해 사용되는 형식을 의미합니다. 대표적인 예로는 인터페이스가 있습니다. 어떤 객체애 대한 추상화는 여러 가지가 나올 수 있고, 객체는 여러 형태로 추상화해서 표현할 수 있습니다. 추상화를 하려면 객체에서 무엇을 감추고 무엇을 노출해야 하는지를 결정해야 합니다. 프로그래밍에서의 추상화프로그래밍에서 하는 일은 기본적으로 추상화입니다. 예를 들어 숫자를 입력하면, 이는 내부적으로 0과1이라는 형식으로 표현됩니다. 추상화를 설계한다는 것은 단순하게 모듈 또는 라이브러리로 분리한다는 의미가 아닙니다.  강력한 프로그래밍 언어들이 갖고 있는 기..

[이펙티브 코틀린] 3장 - 재사용성

아이템 19 - knowledge를 반복해서 사용하지 말라프로그래밍의 가장 큰 규칙은 아래와 같습니다 "프로젝트에서 이미 있던 코드를 복사해서 붙여놓고 있다면, 무언가가 잘못된 것이다."  Knowledge프로그래밍에서 knowledge는 넓은 의미로 '의도적인 정보'를 뜻합니다. 알고리즘의 작동 방식, UI의 형태, 우리가 원하는 결과등이 모두 '의도적인 정보'입니다. 그 중 2가지를 뽑자면 아래와 같습니다.비즈니스 Logic: 프로그램이 어떠한 식으로 동작하는지와 프로그램이 어떻게 보이는지공통된 알고리즘: 원하는 동작을 하기 위한 알고리즘둘의 가장 큰 차이점은 시간에 따른 변화입니다. 로직은 시간이 지나면서 변하지만, 알고리즘은 크게 변하지 않습니다. knowledge가 반복되면 확장성을 막고, 쉽게..

[이펙티브 코틀린] 2장 - 가독성

2장을 시작하며 코틀린은 간결성을 목표로 설계된 프로그래밍 언어가 아니라 가독성(readablitiy)을 좋게 하는 데 목표를 두고 설계된 프로그래밍 언어입니다. 코틀린을 사용하면 깨끗하고 의미 있는 코드와 API를 쉽게 작성할 수 있으며, 우리가 원하는 것을 숨기거나 강조할 수 있게 하는 기능을 제공합니다. 이번 장에서는 이러한 기능을 사용하는 방법을 다룹니다. 아이템 11 - "가독성을 목표로 설계하라" 프로그래밍은 쓰기보다 읽기가 더 중요합니다. 그렇기 때문에 항상 가독성을 생각하면서 코드를 작성해야 합니다. 인식 부하 감소 코드를 작성할 때에는 기본적으로 `인지 부하`를 줄이는 방식으로 작성해야 합니다. 우리의 뇌는 기본적으로 짧은 코드를 빠르게 읽을 수 있지만, 익숙한 코드는 더 빠르게 읽을 수..

[이펙티브 코틀린] 1장 - 안정성

1장을 시작하며 사람들이 코틀린을 사용하는 가장 큰 이유는 바로 코틀린의 안정성(Safey)입니다. 코틀린은 다양한 설계지원을 통해서 애플리케이션의 잠재적인 오류를 줄여줍니다. 다만, 코틀린을 안전하게 사용하려면 개발자가 뒷받침을 해야 합니다. 그렇기 때문에 이번장에서는 코틀린이 안전을 위해 사용하는 기능들을 알아보고, 이를 올바르게 사용하는 방법을 알아볼 것입니다. 이번장의 목표는 `오류가 덜 발생하는 코드를 만드는 것`입니다. 아이템 1 - "가변성을 제한하라" 상태(state) var을 사용하거나 mutable 객체를 사용하면 값이 변동될 여지가 생기게 됩니다. 이를 상태(state)라고 합니다. 상태를 가지게 되는 경우, 이제는 객체의 사용 방법뿐만이 아니라 객체의 상태에 대한 이력(history..