Kotlin/Effective Kotlin 요약
-
20장 - 일반적인 알고리즘을 반복해서 구현하지 말라Kotlin/Effective Kotlin 요약 2023. 2. 19. 00:01
대부분의 기능은 언어에서 이미 지원한다 예를 들어 숫자를 특정 범위에 맞추는 간단한 알고리즘이 있습니다. val percent = when{ numberFromUser > 100 -> 100 numberFromUser 0 else -> numberFromUser } 하지만 이미 stdlib의 coerceIn 확장 함수로 이미 존재합니다. val percent = numberFromUser.coerceIn(0,100) 이미 있는 것을 활용했을 때 장점 - 코드 작성 속도가 빨라집니다. - 구현을 하지 않아도, 함수의 이름 등만 보고도 무엇을 하는지 확실하게 알 수 있습니다. - 직접 구현할 때 발생할 수 있는 실수를 줄이게 됩니다. - 제작자들이 한 번만 최적화하면, 이 함수를 활용하는 모든 ..
-
19장 - knowlege를 반복하여 사용하지 말라Kotlin/Effective Kotlin 요약 2023. 2. 18. 00:01
Effective Kotlin의 저자가 생각하는 프로그래밍의 가장 큰 규칙 "프로젝트에서 이미 있던 코드를 복사해서 붙여놓고 있다면, 무언가가 잘못된 것이다." 이를 Effective Kotlin에서는 "knowlege를 반복하여 사용하지 말라"라고 표현합니다. 실용주의 프로그래머라는 책에서는 "Don't Repeat Yourself"라는 규칙을 'DRY 규칙'이라 표현합니다. 모든 것은 변화한다. 프로젝트는 매우 빠르게 변화합니다. 기술뿐만 아니라 언어도 빠른 속도로 변화하기 때문입니다. 언제 코드를 반복해도 될까? 우발적 중복인 경우일 수 있습니다. 이미 클린 아키텍처를 읽었으며 책에서도 단일 책임 원칙을 언급하여 쉽게 이해할 수 있었습니다. "두 액터가 같은 클래스를 변경하는 일은 없어야 합니다" ..
-
18장 - 코딩 컨벤션을 지켜라Kotlin/Effective Kotlin 요약 2023. 2. 17. 00:01
코딩 컨벤션이 중요한 이유 - 어떤 프로젝트를 접해도 쉽게 이해할 수 있다. - 다른 외부 개발자도 프로젝트의 코드를 쉽게 이해할 수 있다. - 다른 개발자도 코드의 작동 방식을 쉽게 추측할 수 있다. - 코드를 병합하고, 한 프로젝트의 코드 일부를 다른 코드로 이동하는 것이 쉽다. 코딩 컨벤션을 지키는 두 가지 도구 - IntelliJ 포메터 - ktlint 두 가지를 실제로 사용해보았고 유용한 도구임을 체감하고 있습니다.
-
17장 - 이름 있는 아규먼트를 사용하라Kotlin/Effective Kotlin 요약 2023. 2. 16. 00:01
이름 있는 아규먼트란? val iDontLikeThis: String = (1..10).joinToString("|") val iLikeThis: String = ((1..10).joinToString(separator = "|")) val separator: String = "|" val iLoveThis: String = ((1..10).joinToString(separator = separator)) println(iLikeThis) //결과 : 1|2|3|4|5|6|7|8|9|10 joinToString 메서드를 잘 아는 사람은 |가 separator를 의미함을 잘 알 수 있습니다. 하지만 모른다면, 이를 접두사로 생각할 수도 있습니다. 파라미터의 이름을 명확하게 직접 지정하는 방법을 이름 있는 ..
-
16장 - 프로퍼티는 동작이 아니라 상태를 나타내야 한다Kotlin/Effective Kotlin 요약 2023. 2. 15. 00:01
코틀린의 프로퍼티는 자바의 필드와 비슷해 보입니다. //Kotlin의 프로퍼티 var name: String? = null //Java의 필드 String name = null; 둘은 유사해 보이지만 프로퍼티는 사용자 정의 게터와 세터를 가질 수 있습니다. fun main() { val custom = Custom() println(custom.myClassField) custom.myClassField = "hi" println(custom.myClassField) } class Custom{ var myClassField: String = "hi" get(){ if(field == "hi") { return "안녕" } return field } set(value){ field = "customSet..
-
15장 - 리시버를 명시적으로 참조하라Kotlin/Effective Kotlin 요약 2023. 2. 13. 00:01
This 대표적으로 함수와 프로퍼티를 지역 또는 톱 레벨 변수가 아닌 다른 리시버로부터 가져온다는 것을 나타낼 때가 있습니다. 예를 들어 클래스의 메서드라는 것을 나타내기 위한 this가 있습니다. class User: Person(){ private var beersDrunk: Int = 0 fun drinkBeers(num: Int){ this.beersDrunk += num } } 명시적으로 표현하지 않음 vs 명시적으로 표현 fun List.quickSort(): List{ if(size < 2) return this ... } 명시적이지 않은 구현입니다. fun List.quickSort(): List{ if(this.size < 2) return this ... } 명시적인 구현입니다. 두 함..
-
14장 - 변수 타입이 명확하지 않은 경우 확실하게 지정하라Kotlin/Effective Kotlin 요약 2023. 2. 12. 00:01
타입 추론 시스템 코틀린은 개발자가 타입을 지정하지 않아도 자동으로 타입을 추론하여 넣어줍니다. 이를 통해 코드가 짧아지며 개발시간을 줄여줄 수 있습니다. 하지만 타입이 명확하지 않다면 남용하지 않는것이 좋습니다. val num = 10 val data = getSomeData() num을 타입은 Int입니다. data의 타입은 무엇일까요? 코드를 읽으면서 함수 정의를 보며 타입을 확인하면 되지 않나? 라고 생각할 수 있습니다. 하지만 이는 곧 가독성이 떨어진다는 것을 의미합니다. val data: UserData = getSomeData() 이와 관련되어 아이템3: 최대한 플랫폼 타입을 사용하지 말라, 아이템4: inferred 타입으로 리턴하지 말라가 있습니다. 타입은 개발자와 컴파일러 모두에게 중요..
-
13장 - Unit?을 리턴하지 말라Kotlin/Effective Kotlin 요약 2023. 2. 11. 00:01
일반적으로 Unit?을 사용한다는 것 Unit은 공식문서에서 볼 수 있듯 한 가지 값을 가질 수 있는 타입을 나타내는 객체이다. Java에서 void 와 비슷한 타입으로 볼 수 있다. Unit?을 하면 null을 반환하거나 아무것도 반환하지 않습니다. 지금까지 여러 코드를 보면서 Unit?을 쉽게 읽을 수 있는 경우는 거의 보지 못했습니다. 기본적으로 Unit?을 리턴하거나, 이를 기반으로 연산하지 않는 것이 좋습니다.