https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=286907622
우리나라엔 2022년에 발간된 따끈따끈한 책이다. 원서는 2019년에 발간됐다는 게 ... 좀 충격적인 부분인데, 역시 영어를 잘해야 하나보다
이 책은 코틀린을 어떻게하면 잘 쓸 수 있을지에 대해 얘기한다.
아이템 1. 가변성을 제한하라
- 값이 변할 수 있다는 것과, 값을 읽거나 못읽는 건 다른 문제다. 전자는 가변성에 대한 얘기고 후자는 읽기 전용/쓰기에 대한 얘기다. 그리고 코틀린은 val 을 통해 읽기전용 변수를 만들 수 있다. 이를 통해 안전성을 확보한다. 보통 Mutable 객체보다 Immutable 객체가 장점이 많다.
- mutable 컬렉션보다는 mutable 프로퍼티가 낫다. 즉
val list = mutableListOf<Int>() // 이거보다
var list = listOf<Int>() // 이게 낫다.
private set
- 방어적 복제를 잘 활용하자
아이템 4. inferred 타입으로 리턴하지 말라
- 타입을 확실하게 지정해야 하는 경우에는 명시적으로 타입을 지정해야 한다. 타입은 굉장히 중요한 정보이므로 숨기지 않는 것이 좋다.
아이템 7. 결과 부족이 발생할 경우 null과 Failure 를 사용하라
- 예외는 정보를 전달하는 방식으로 사용되어서는 안된다. 심지어 try-catch 내부에 코드를 배치하면, 컴파일러가 할 수 있는 최적화가 제한된다. 따라서 충분히 예측할 수 있는 범위의 오류는 null과 Failure를 사용하고, 예측하기 어려운 예외적 범위의 오류만 throw 로 처리하는게 낫다.
아이템 16. 프로퍼티는 동작이 아니라 상태를 나타내야 한다.
- 원칙적으로 프로퍼티는 상태를 나타내거나 설정하기 위한 목적으로만 사용하는 것이 좋고, 다른 로직은 포함하지 않아야 합니다. '이 프로퍼티를 함수로 만들 때 get 또는 set 을 붙일 것인가?' 라는 질문에 NO 라면 이를 프로퍼티로 만드는 것은 좋지 않습니다.
- 연산 비용이 높거나 복잡도가 O(1)보다 큰 경우, 비지니스 로직을 포함하는 경우, 결정적이지 않은 경우 등에선 프로퍼티가 아니라 함수로 만드는 게 낫습니다.
아이템 30. 요소의 가시성을 최소화하라
- 데이터를 저장하도록 설계된 클래스는 숨길 이유가 없기 때문에 프로퍼티를 사용할 수 있게 눈에 띄게 만드는 것이 좋고, 필요하지 않은 프로퍼티는 제거하는 것이 좋습니다.
아이템 34. 기본 생성자에 이름 있는 옵션 아규먼트를 사용하라
- 깃헙등으로 단순하게 코드를 읽는 사람은 IDE 의 지원을 받을 수 없습니다. 만약 이름 있는 Argument 를 활용해서 명시적으로 이름을 붙여 주면, 의미가 훨씬 명확할 것입니다.
아이템 39. 태그 클래스보다는 클래스 계층을 사용하라.
- sealed 한정자는 외부 파일에서 서브클래스를 만들 수 없습니다.
아이템 40. equals 의 규약을 지켜라.
- equals 는 제공되는 대로 쓰는게 제일 낫지만 직접 구현해야 한다면, 반사적, 대칭적, 연속적, 일관적 동작을 하는 지 꼭 확인해야 합니다. 그리고 이러한 클래스는 final 로 만드는 것이 좋습니다. 만약 상속을 한다면 서브클래스에서 equals 가 작동하는 방식을 변경하면 안됩니다.
아이템 41. hashCode 의 규약을 지켜라
- 객체를 변경하지 않았다면 hashCode의 결과는 항상 같아야 합니다.
- equals 가 같다면 hashCode 도 같아야 합니다.
아이템 43. API 의 필수적이지 않은 부분을 확장 함수로 추출하라
- API 의 필수적인 부분은 멤버로 두는 것이 좋지만, 필수적이지 않은 부분은 확장 함수로 만드는 것이 여러모로 좋습니다.
아이템 45. 불필요한 객체 생성을 피하라
- nullable 타입을 연산하거나 Generic 타입을 사용할 때 기본자료형을 wrap 한 자료형이 사용됩니다.
아이템 47. 인라인 클래스의 사용을 고려하라
- 인라인 클래스는 다른 자료형을 래핑해서 새로운 자료형을 만들 때 많이 사용됩니다.
- 측정 단위를 표현하거나, 타입 오용으로 발생하는 문제를 막을 때 많이 사용됩니다.
'개발 > 책' 카테고리의 다른 글
'러닝 HTTP/2' 를 읽고 (0) | 2022.05.09 |
---|---|
「하둡 완벽 가이드」1 : 하둡 기초 (0) | 2022.03.14 |
'프로그래머의 뇌' 를 읽고 (0) | 2022.02.27 |
「그로스 해킹」: 명확하고 경제적이며 핵심을 다룬다. (0) | 2022.01.03 |
「Trustworthy Online Controlled Experiments」를 읽고 : 모두를 위한 입문 2 (0) | 2021.12.14 |