[TIL] Effective Kotlin을 읽어보자 - 1 장
이 글은 이펙티브 코틀린 1장을 보면서 배운 것에 대해서 요약합니다. 코드 예제, 자세한 설명은 생략되어 있기 때문에 이펙티브 코틀린을 구입해서 보시는 것을 적극적으로 추천합니다.
코틀린을 써야하는 주된 이유는 하나는 안정성이다. 코틀린이 제공해주는 기능들이 오류가 덜 발생하는 코드를 만드는데 많은 도움을 준다.
item 1 - 가변성을 제한하라.
변수를 var
로 선언해서 가변적으로 사용하면 다음과 같은 어려움이 생긴다.
- 상태 변경에 따라 디버그가 힘들어진다.
- 코드의 실행 추론이 어렵다.
- 멀티스레드일 때 적절한 동기화가 필요하다.
- 변경이 많으면 모든 상태에 대해서 테스트 해야한다.
- 상태 변경에 따라 다른 곳에 알려줘야하는 경우가 있다.
- 코틀린에서 가변성 제한하기
- 읽기 전용 프로퍼티 사용 (val)
- 가변 컬렉션과 읽기 전용 컬렉션 구분하기
- 데이터 클래스의 copy
- 정리
var
보다val
를 사용하는 것이 좋다.
mutable
보다immutable
을 사용하는 것이 좋다.
- 변경이 필요하면
immutable
을 사용해서copy
를 하는 것이 좋다.
mutable
객체는 외부에 노출하지 않는게 좋다.
item 2 - 변수의 스코프를 최소하하라
상태를 정의할 때, 변수와 프로퍼티의 스코프를 최소화하는 것이 좋다. 가장 큰 이유는 로직을 추적하기가 쉽기 때문이다. 변수에 대한 변경점이 넓으면 기본적으로 오래 걸릴 수 밖에 없다.
item 3 - 최대한 플랫폼 타입을 사용하지마라
플랫폼 타입
이란 자바등 다른 프로그래밍 언에서 넘어온 타입을 의미한다. 예를 들어, 라이브러리를 import 해서 가져왔을 때의 타입을 생각하면 된다. 플랫폼 타입
은 기본적으로 !
로 Not Null을 전제하기 때문에 NPE가 발생할 수 있다.
item 4 - inferred 타입으로 리턴하지 마라
inffered 타입이란 타입 추론에 의한 리턴 타입을 의미한다. 상속 구조에 의해서 중간에 타입이 변경될 수 있는 경우에는 타입 추론을 이용하지말고 직접 타입을 명시하는 것이 좋다.
item 5 - 예외를 활용해 코드에 제한을 걸어라
코틀린에는 다음과 같은 함수를 제공해준다.
require()
: 아규먼트를 제한 할 수 있다.
check()
: 상태와 관련된 동작을 제한할 수 있다.
assert()
: 어떤 것이 true인지 확인할 수 있다. (단, 테스트 모드에서만 작동한다.)
단순하게 예외를 발생하는 것보다 문서로서 동작할 수 있다.
item 6 - 사용자 정의 오류보다는 표준 오류를 사용하라.
표준 라이브러리는 많은 개발자들이 알고 있으므로 재사용하기 좋다.
IllegalArgumentException
IndexOutOfBoundsException
ConcurrentModificationException
UnsupportedOperationException
NoSuchElementException
item 7 - 결과 부족이 발생할 경우 null과 Failure를 사용하라
함수 자체적으로 원하는 결과를 내기 어려운 상황들이 있다. 이런 경우에는 예외적인 상황에 대해서 명시적으로 선언을 해놓고 처리를 해야 애플리케이션의 안정성을 올릴 수 있다.
item 8 - 적절하게 null을 처리하라.
null은 값이 부족한 것이 때문에 명확하게 처리해야한다. 이를 처리하는 대표적인 방법은 3가지가 있다.
- ?., 스마트 캐스팅, Elvis 연산자등을 활용한다.
- 오류를 throw 한다.
- 함수 또는 프로퍼티를 활용해서 수정해서 nullable 타입이 나오지 않게 한다.
item 9 - use를 사용하여 리소스를 닫아라.
명시적으로 리소를 닫아야하는 객체들이 있다. 예를 들어 다음과 같은 것들이다.
- InputStream, OutputStream
- java.sql.Connection
- java.io.Reader
- java.new.Socket, java.util.Scanner
전통적으로 try-finally을 사용해서 처리했다. 근데 이 때, 그 안에서 발생하는 예외를 처리하다보면 복잡해지기 때문에 use를 활용해서 간단하게 작성할 수 있다.
item 10 - 단위 테스트를 만들어라.
코드를 안전하게 만드는 가장 궁극적인 방법은 다양한 종류의 테스트를 만드는 것이다.
Uploaded by Notion2Tistory v1.1.0