4 min to read
Study Effective Kotlin - 0
이펙티브 코틀린 책 스터디를 시작해 봅시다.
Hustle real hard => Burnt out
오랜만에 작성해봅니다.
소다의 개발블로그 운영자 소다입니다. 굉장히 오랜만에 찾아오게 되었습니다. 그 사이에 회사 업무가 바빠 정신없이 진행했던 것, 그리고 제 개인적으로 슬럼프가 찾아와 개발과 관련된 모든 일에 대해 흥미를 느끼지 못했던 것이 존재해 블로그에서 손을 놓게 되었습니다.
실무로 3년동안 발빠르게 성장에만 집중하다보니 놓쳤던 것을 최근에 느낄 수 있어서, 다시 다잡기 위해 글을 적으면서 개발자라는 직무에 대해 다시 한번 가슴 뛰는 기분을 느끼고 싶어 가볍게 쉬어가는 차원의 주제인 Kotlin 관련 책 공부 및 리뷰글을 작성해보려고합니다.
Effective Kotlin Study
그 시작은 얼마전에 한글로 번역된 책인 Effective Kotlin -Best Practice 입니다. 이펙티브 자바와 같은 이펙티브 시리즈에서 새로 출간된 책입니다.
이 책은 과거에 출간된 이펙티브 자바, 클린 코드, 컴퓨터 프로그램의 구조와 해석, 코드 컴플리트와 같은 책에서 영감을 받고 작성되었으며, 코틀린 관련 포럼에서 발표된 좋은 사례들을 기반으로 작성되었습니다.
실무를 하면서 간과하고 있던 부분인 안정성, 가독성, 코드 설계, 효율성을 향상시키기 좋은 여러 노하우를 소개하는 책이고, 최근에 안드로이드 개발을 접해보았다면 충분히 경험해 보았을 법한 코틀린이라는 언어를 잘 활용한 Best Practice를 소개합니다.
그렇기 때문에 이 책은 초심자, 비기너를 위한 책이 아닌 실무에서 어느정도 코틀린을 기반으로 코드설계를 해보고, 충분한 지식이 있는 개발자 분들을 위한 책입니다.
저 또한 완전히 코틀린이라는 언어에 구조 및 제공하는 도구를 모두 이해하는 것은 아니지만, 실무에서 코틀린으로 개발을 한지 약 3년이 되어, 책을 읽고 습득하기 적합한 독자라고 판단되어 읽어보기로 결정하였습니다.
책의 구성
이 책의 파트는 크게 세 가지로 구성됩니다.
- 좋은 코드
- 코드 설계
- 효율성
좋은 코드란?
모두가 생각하는 좋은 코드는 제각기 다를 것이지만, 책에서 설명하는 좋은 코드는 안정성과 가독성을 챙긴 코드라고 이야기합니다. 대부분의 서비스 개발은 혼자서 이룰 수 없는 경우가 다반사이며, 설령 혼자서 개발을 한다 하더라도, 해당 소프트웨어에 대한 유지보수는 온전히 본인만 가져갈 수 있지 않습니다.
이러한 이유로 우리는 협업이라는 사회적 활동을 통해 소프트웨어 개발을 하게되며, 이 과정에서 서로의 사고 방식이 다르기 떄문에 발생하는 코드 컨벤션, 로직에 대한 구성이 제 각기 다릅니다.
그럼에도 불구하고 모든 협업자들이 보기에 읽어도 문제 없는 코드를 구성하기 위해 우리는 가독성이라는 것을 챙기며, 더 나아가 유저들이 사용하면서 발생하는 문제들을 최소화 하기 위해 안정성 있는 코드를 작성하는 데 노력을 해야합니다.
이런 부분에서 안정성, 가독성을 챙기는 코드는 좋은 코드라고 주장할 수 있다고 봅니다.
코드 설계란?
협업, 더 나아가 라이브러리 구현을 통해 오픈소스로 내가 구성한 소스코드를 공유하는 경우 코드 설계를 잘 하는 것은 매우 중요합니다. 이를 위해서 우리는 컨벤션이라는 것을 맞추는 노력을 하는데, 결국 좋은 코드를 작성을 한다는 것은 코드 설계를 잘 하는 데 도움을 준다고 생각합니다.
이 책에서는 좋은 코드 설계 사례를 소개하여 대규모 프로젝트를 만들 때 유용한 노하우들을 소개합니다.
효율성
코드의 효율적인 작성법, 퍼포먼스에 관한 이야기를 합니다. 일반적으로 코드의 효율성이 임팩트를 크게 미치는 것은 고성능 애플리케이션, 라이브러리, 많은 유저 수의 애플리케이션이기 때문에, 이에 해당하는 개발자분들이 읽기 좋은 내용이라고 생각합니다.
앞으로 글을 작성하면서 아래 목차에 링크를 달아 둘 예정이니 참고하시면 좋을 것 같습니다.
스터디 목차
- Part 1. 좋은 코드
- Chapter 01. 안정성
- Item 01. 가변성을 제한하라
- Item 02. 변수의 스코프를 최소화하라
- Item 03. 최대한 플랫폼 타입을 사용하지 말라
- Item 04. inferred 타입으로 리던하지 말라
- Item 05. 예외를 활용해 코드에 제한을 걸어라
- Item 06. 사용자 정의 오류보다는 표준 오류를 사용하라
- Item 07. 결과 부족이 발생할 경우 null과 Failure을 사용하라
- Item 08. 적절하게 bull을 처리하라
- Item 09. use를 사용하여 리소스를 닫아라
- Item 10. 단위 테스트를 만들어라
- Chapter 02. 가독성
- Item 11. 가독성을 목표로 설계하라
- Item 12. 연산자 오버로드를 할 때는 의미에 맞게 사용하라
- Item 13. Unit?을 리턴하지 말라
- Item 14. 변수 타입이 명확하지 않은 경우 확실하게 지정하라
- Item 15. 리시버를 명시적으로 참조하라
- Item 16. 프로퍼티는 동작이 아니라 상태를 나타내야 한다
- Item 17. 이름있는 아규먼트를 사용하라
- Item 18. 코딩 컨벤션을 지켜라
- Chapter 01. 안정성
- Part 2. 코드 설계
- Chapter 03. 재사용성
- Item 19. Knowledge를 반복하여 사용하지 말라
- Item 20. 일반적인 알고리즘을 반복해서 구현하지 말라
- Item 21. 일반적인 프로퍼티 패턴은 프로퍼티 위임으로 만들어라
- Item 22. 일반적인 알고리즘을 구현할 때 제네릭을 사용하라
- Item 23. 타입 파라미터의 섀도잉을 피하라
- Item 24. 제네릭 타입과 variance 한정자를 활용하라
- Item 25. 공통 모듈을 추출해서 여러 플랫폼에서 재사용하라
- Chapter 04. 추상화 설계
- Item 26. 함수 내부의 추상화 레벨을 통일하라
- Item 27. 변화로부터 코드를 보호하려면 추상화를 사용하라
- Item 28. API 안정성을 확인하라
- Item 29. 외부 API를 랩(wrap)해서 사용하라
- Item 30. 요소의 가시성을 최소화하라
- Item 31. 문서로 규약을 정의하라
- Item 32. 추상화 규약을 지켜라
- Chapter 05. 객체 생성
- Item 33. 생성자 대신 팩토리 삼수를 사용하라
- Item 34. 기본 생성자에 이름 있는 옵션 아규먼트를 사용하라
- Item 35. 복잡한 객체를 생성하기 위한 DSL을 정의하라
- Chapter 06. 클래스 설계
- Item 36. 상속보다는 컴포지션을 사용하라
- Item 37. 데이터 집합 표현에 data 한정자를 사용하라
- Item 38. 연산 또는 액션을 전달할 때는 인터페이스 대신 함수 타입을 사용하라
- Item 39. 태그 클래스보다는 클래스 계층을 사용하라
- Item 40. equals의 규약을 지켜라
- Item 41. hashCode의 규약을 지켜라
- Item 42. compareTo의 규약을 지켜라
- Item 43. API의 필수적이지 않는 부분을 확장함수로 추출하라
- Item 44. 멤버 확장 함수의 사용을 피하라
- Chapter 03. 재사용성
- Part 3. 효율성
- Chapter 07. 비용줄이기
- Item 45. 불필요한 객체 생성을 피하라
- Item 46. 함수 타입 파라미터를 갖는 함수에 inline 한정자를 붙여라
- Item 47. 인라인 클래스의 사용을 고려하라
- Item 48. 더 이상 사용하지 않는 객체의 레퍼런스를 제거하라
- Chapter 08. 효율적인 컬렉션 처리
- Item 49. 하나 이상의 처리 단계를 가진 경우에는 시퀀스를 사용하라
- Item 50. 컬렉션 처리 단계 수를 제한하라
- Item 51. 성능이 중요한 부분에는 기본 자료형 배열을 사용하라
- Item 52. mutable 컬렉션 사용을 고려하라
- Chapter 07. 비용줄이기
Comments