본문 바로가기
[Effective Kotlin] Item 9 : Close resource with use 이 글은 Effective Java 를 완독하고, Kotlin 을 상용으로 사용하는 개발자 입장에서 Effective Kotlin 글 중 새로운 내용, remind 할 필요 있는 부분, 핵심 내용 등만 추려 정리한 내용입니다. # InputStream, OutputStream, java.sql.Connection, java.io.Reader(FileReader, BufferedReader ...), java.new.Socket, java.util.Scanner 등이 close 해줘야 하는 resource 의 예이다. 이들은 Closeable interface 를 구현하였고, 이는 AutoCloseable 을 상속하였다. # 이 Closable 들을 명시적으로 close 해주지 않아도 GC 에 의해 결국 .. 2022. 3. 6.
[Effective Kotlin] Item 8 : Handle nulls properly 이 글은 Effective Java 를 완독하고, Kotlin 을 상용으로 사용하는 개발자 입장에서 Effective Kotlin 글 중 새로운 내용, remind 할 필요 있는 부분, 핵심 내용 등만 추려 정리한 내용입니다. # null 은 해석의 여지가 다분하기 때문에, 가능한한 의미가 명확해야 한다. # null 은 3가지 형태로 다뤄질 수 있다. ?., smart casting, elvis operator 등을 사용하여 안전하게 다루기 error 던지기 nonnull 로 refactor 하기 Handling nulls safely Throw an error # null 이 아니어야만 하는 상황에서, null 일 경우 error 를 던짐으로써 programmer 가 예상하지 못한 상황을 발견할 수 .. 2022. 3. 5.
[Effective Kotlin] Item 7 : Prefer null or Failure result when the lack of result is possible 이 글은 Effective Java 를 완독하고, Kotlin 을 상용으로 사용하는 개발자 입장에서 Effective Kotlin 글 중 새로운 내용, remind 할 필요 있는 부분, 핵심 내용 등만 추려 정리한 내용입니다. # 원하는 결과를 제공할 수 없을 때 다음과 같은 방법을 사용한다. null 또는 실패에 관련된 sealed class 를 return exception 던지기 exception 이 정보를 제공하는 용도로 사용해서는 안 된다. # 모든 exception 은 진짜 예외적인 상황에서만 사용되어야 한다. # exception 전파는 가독성을 떨어뜨리며 이상한 상황에 빠지게 만들 수 있다. Kotlin 에서 모든 exception 은 unchecked 이다. exception 은 정말 예.. 2022. 3. 4.
[Effective Kotlin] Item 6 : Prefer standard errors to custom ones 이 글은 Effective Java 를 완독하고, Kotlin 을 상용으로 사용하는 개발자 입장에서 Effective Kotlin 글 중 새로운 내용, remind 할 필요 있는 부분, 핵심 내용 등만 추려 정리한 내용입니다. # 가급적 직접 정의한 Exception 이나 Error 보다 standard lib 에서 제공하는 녀석을 사용하자. 끝 2022. 3. 3.
[Effective Kotlin] Item 5 : Specify your expectations on arguments and state 이 글은 Effective Java 를 완독하고, Kotlin 을 상용으로 사용하는 개발자 입장에서 Effective Kotlin 글 중 새로운 내용, remind 할 필요 있는 부분, 핵심 내용 등만 추려 정리한 내용입니다. # 기대하는 바가 있다면 선언하라. Kotlin 에서는 다음과 같은 기능을 지원한다. require block : argument 에 대한 기대 check block : state 에 대한 기대 assert block : true 에 대한 기대 elvis operator with return or throw # fun pop(num: Int = 1): List { require(num = 0) return if (n = 0) { "Cannot calculate factorial o.. 2022. 2. 19.
[Effective Kotlin] Item 4 : Do not expose inferred types 이 글은 Effective Java 를 완독하고, Kotlin 을 상용으로 사용하는 개발자 입장에서 Effective Kotlin 글 중 새로운 내용, remind 할 필요 있는 부분, 핵심 내용 등만 추려 정리한 내용입니다. # Kotlin 의 type inference 는 아주 강력한 기능이다. Kotlin 보다는 약하지만 Java 10 에서도 이 기능이 도입되었다. # Inferred type 은 기본적으로 conncrete class 이다. Summary # Type 에 대해 확실하지 않으면 type 을 명시하자. 특히 외부로 전달되는 녀석의 경우 더더욱 type 을 명시하자. 끝 2022. 2. 18.
[Effective Kotlin] Item 3 : Eliminate platform types as soon as possible 이 글은 Effective Java 를 완독하고, Kotlin 을 상용으로 사용하는 개발자 입장에서 Effective Kotlin 글 중 새로운 내용, remind 할 필요 있는 부분, 핵심 내용 등만 추려 정리한 내용입니다. # Platformtype 은 정보가 부족할 경우 nullable 로 치부하는 것이 안전하다. # 문제는 Java 의 generic type 값을 받을 때 생긴다. public class UserRepo{ public List getUsers(){ // ... } } List 자체의 nullability 는 물론 list 안의 내용물인 User 의 nullability 도 알 수 없다. # Platform type 은 String! 과 같이 ! 가 붙어 표시된다. 이는 코드에 쓸 .. 2022. 2. 17.
[Effective Kotlin] Item2 : Minimize the scope of variables 이 글은 Effective Java 를 완독하고, Kotlin 을 상용으로 사용하는 개발자 입장에서 Effective Kotlin 글 중 새로운 내용, remind 할 필요 있는 부분, 핵심 내용 등만 추려 정리한 내용입니다. # member 변수 대신 local 변수로 정의하거나, 최대한 사용 블록 안으로 변수를 제한하는 등으로 scope 제한을 할 수 있다. # scope 를 제한할수록 프로그램을 이해하고 관리하기 쉽다. # val, var 상관없이, 변수는 정의될 때 init 되는 것이 좋다. # 복수개의 property 를 정의할 때는 destructuring declaration 이 유용하다. fun updateWeather(degrees: Int){ val desc: String val col.. 2022. 2. 16.
[Effective Kotlin] Item1 : Limit mutability 이 글은 Effective Java 를 완독하고, Kotlin 을 상용으로 사용하는 개발자 입장에서 Effective Kotlin 글 중 새로운 내용, remind 할 필요 있는 부분, 핵심 내용 등만 추려 정리한 내용입니다. # State 관리는 다음의 이유들로 힘들다. State 수가 많을수록 코드의 이해와 디버그가 힘들다. State 들이 상호 연관된 경우는 더더욱 어렵다. Mutable state 는 멀티스레드 환경에서 적절한 동기화를 필요로 한다. Mutable 은 테스트하기도 어렵다. (가능한 state 수가 더 많다고 볼 수 있다.) # Mutability 는 단점이 많아서, state mutation 을 아예 허용하지 않는 언어들도 있다. 순수한 functional programming 인.. 2022. 2. 15.
반응형