일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- react
- MVVM
- 코루틴
- 안드로이드 컴포즈
- Dev6
- 안드로이드 개발자
- 코틀린
- Go언어
- Firebase
- 코딩테스트
- RxJava
- 이펙티브 코틀린
- RxKotiln
- 안드로이드 클린아키텍쳐
- Kotlin
- 안드로이드
- 프로그래머스
- Kotiln
- Flutter
- android compose
- 개발자
- 반응형 프로그래밍
- 알고리즘
- 잡담
- 안드로이드 다이얼로그
- Swift 문법
- 이펙티브코틀린
- Java
- android
- Rxjava 안드로이드
- Today
- Total
목록이펙티브 코틀린 (4)
최데브는 오늘도 프로그래밍을 한다.
확실히 어떻게 동작해야하는 코드가 있으면 예외를 활용해서 제약을 걸어주는게 좋을때가 있다. 코틀린에는 대표적으로 1. require : 아규먼트와 관련된 예측을 정의할때 상용하는 방법 숫자를 아규먼트로 받아서 팩토리얼을 계산하면 양의 정수만 받아야할때 좌표를 아규먼트로 받아서 클러스터를 찾을 때 비엉 있지 않은 좌표 목록을 사용할때 사용자로부터 이메일 주소를 입력받을 때 값이 입력됐는지, 이메일 형식이 바른지 확인할때 2. check : 상태와 관련된 예측을 정의할때 사용하는 방법 어떤 객체가 미리 초기화되어 있으어만 처리가 되게 하고 싶은 함수에 사용 사용자가 로그인 했을 때만 처리를 하게 하고 싶은 함수에 사용 객체를 사용할 수 있는 시점에 사용하고 싶은 함수인지 체크할때 사용 일반적으로 requir..
코틀린은 타입추론(type inference) 를 제공한다. 자바 10부터는 코틀린처럼 타입추론을 제공하지만 코틀린에 비해서는 제약이 많다. 아무튼 타입 추론을 사용할때 주의할 점들이 있는데 할당 할때 inferred 타입은 정확하게 오른쪽에 있는 피연산자에 맞게 설정된다는 것을 기억해야 한다. 일반적으로는 아래와 같이 open class Drink class Water: Drink() fun main() { var drink = Water() drink = Drink() // 타입에러 } 하지만 이건 open class Drink class Water: Drink() fun main() { var drink : Drink = Water() // 타입 명시 drink = Drink() } 타입 명시를 해..
플랫폼 타입? 다른 프로그래밍 언어에서 와서 null 가능 여부를 알 수 없는 타입을 플랫폼 타입이라고 한다. 플랫폼 타입을 사용하면 해당 부분도 null 에러가 발생할 위험이 있으며 해당 코드를 사용하는 곳까지 영향을 줄 수 있다. 예를 들면 아래와 같은 상황이 있다. 안드로이드 개발자가 자바 코드로 코드를 작성하다가 코틀린으로 변경해서 코드를 이어서 작성한다고 가정해보자. // 자바 public String getValue() { return null; } // 코틀린 fun statedType() { val value: String = JavaClass().value // NPE // ... println(value.length) } fun platformType() { val value = Jav..
상태를 정의할 때는 변수와 프로퍼티 스코프를 최소화 하는것이 좋음 최소화하지 않으면 아래와 같은 단점이 있다. - 프로그램을 추적하고 관리하기 쉬워짐. - 스코프 범위가 너무 넓으면 다른 개발자에 의해서 변수가 잘못 사용될 수 있음. - 프로그램을 읽고 이해하기에 어려워짐 변수는 읽기 전용 또는 읽고 쓰기 전용 여부와 상관없이 변수를 정의할때 초기화되는 것이 좋다. 여러 프로퍼티를 한번에 설정할 경우에는 구조분해 선언을 활용하자 프로퍼티보다는 지역 변수를 사용하는 것이 좋다 캡처링에 유의하자. val primes : Sequence = sequence { var numbers = generateSequence(2) { it + 1 } while(true){ val prime = numbers.first(..