책/Effective Kotlin

[이펙티브 코틀린] 아이템9: use를 사용하여 리소스를 닫아라

본문은 Effective Kotlin을 읽고 간단하게 정리한 글입니다. 필요에 따라 생략/수정된 부분이 있을 수 있으며, 내용이 추후 변경될 수 있습니다. 1. use를 사용하여 Closeable 리소스 닫기 close 메서드를 사용해서 명시적으로 닫아야 하는 리소스들이 있다. InputStream / OutputStream java.sql.Connection java.io.Reader(FileReader, BufferedReader, CSSParser) java.new.Socket과 java.util.Scanner 위 친구들은 AutoCloseable을 상속받는 Closeable 인터페이스를 구현하고 있다. Closeable의 구현체들은 반드시 close()를 호출해서 리소스를 반납해줘야 하는데, 이는..

책/Effective Kotlin

[이펙티브 코틀린] 아이템8: 적절하게 null을 처리하라

본문은 Effective Kotlin을 읽고 간단하게 정리한 글입니다. 필요에 따라 생략/수정된 부분이 있을 수 있으며, 내용이 추후 변경될 수 있습니다. 1. nullable 타입 처리하기 nullable 타입은 크게 다음과 세 가지 방법으로 처리할 수 있다. 1) Safe Call 연산자(?.), 스마트 캐스팅, Elvis 연산자 등을 활용한 처리 val printer: Printer? = getPrinter() printer?.print() // safe call operator if (printer != null) printer.print() // 스마트 캐스팅 printer ?: return // Elvis operator 2) 리팩토링을 통해 nullable 타입이 나오지 않도록 하기 // B..

책/Effective Kotlin

[이펙티브 코틀린] 아이템7: 결과 부족이 발생할 경우 null과 Failure를 사용하라

본문은 Effective Kotlin을 읽고 간단하게 정리한 글입니다. 필요에 따라 생략/수정된 부분이 있을 수 있으며, 내용이 추후 변경될 수 있습니다. 1. 예외는 반드시 예외적인 상황에서만 사용하라 함수가 원하는 결과를 만들어 내지 않는 상황이 있다. 이럴 때는 보통 다음 두 가지 중 하나를 선택하게 된다. 책에서는 첫 번째 방법을 권고한다. null 또는 실패를 나타내는 sealed class(=Failure)를 반환한다 → 이것을 사용하라! 예외를 throw한다 예외를 throw 하는 것은 다음과 같은 단점이 있다. 디버깅이 까다롭다 사용자가 예상치 못한 동작이 발생할 수 있으며, 이것이 문서로 드러나지 않을 수 있다 try-catch(또는 runCatching)를 사용하면 가독성이 떨어지고 유..

책/Effective Kotlin

[이펙티브 코틀린] 아이템5: 예외를 활용해 코드에 제한을 걸어라

본문은 Effective Kotlin을 읽고 간단하게 정리한 글입니다. 필요에 따라 생략/수정된 부분이 있을 수 있으며, 내용이 추후 변경될 수 있습니다. 1. 제한의 의미와 장점 반드시 특정 흐름으로 코드가 동작해야 한다면 예외를 활용해 제한을 걸어줄 수 있다. 제한을 걸면 다음과 같은 장점이 있다. 제약사항을 쉽게 확인할 수 있다 예상치 못한 동작을 하기에 앞서 예외를 throw한다 (= 안전한 애플리케이션이 된다) 코드를 잘못 쓰는 상황을 막을 수 있다 스마트 캐스트 기능을 활용할 수 있다 2. 아규먼트 require 블록을 사용하면 아규먼트를 제한할 수 있다. fun factorial(n: Int): Long { require(n >= 0) return if (n = 0) { "Cannot ca..

책/Effective Kotlin

[이펙티브 코틀린] 아이템4: inferred 타입으로 리턴하지 말자

본문은 Effective Kotlin을 읽고 간단하게 정리한 글입니다. 필요에 따라 생략/수정된 부분이 있을 수 있으며, 내용이 추후 변경될 수 있습니다. 1. 코틀린의 타입추론 코틀린의 타입추론은 매우 간편하지만, 이를 제대로 사용하기 위해서는 먼저 타입추론의 특성을 충분히 인지해야 한다. inferred 타입은 정확하게 오른쪽에 있는 피연산자에 맞게 설정된다. 즉, 슈퍼클래스나 인터페이스로는 설정되지 않는다. open class Animal class Zebra: Animal() fun main() { var animal = Zebra() // animal은 Zebra 타입으로 추론된다. animal = Animal() // 오류: Type mismatch } 타입을 명시적으로 지정하면 이 문제를 해..

코택
'책' 카테고리의 글 목록 (3 Page)