Developing Myself Everyday
아이템 41 - hashCode의 규약을 지켜라

hashCode 함수는 수많은 컬렉션과 알고리즘에 사용되는 해시 테이블을 구축할 때 사용됩니다. 해시 테이블해시 테이블은 컬렉션에 요소를 빠르게 추가하고, 빠르게 추출할 때 사용하기 좋습니다.  해시 함수는 데이터를 추가할 때 특정한 숫자(해시 값)를 만들어서 특정한 버킷에 넣습니다. 이때 같은 데이터는 항상 같은 버킷에 들어갑니다. 데이터를 찾을 때는 해시 값을 게산해서 해당 버킷을 찾은 뒤, 버킷 내부에서 원하는 요소를 찾습니다. 해시 함수는 같은 요소라면 같은 값을 리턴하므로, 다른 버킷을 확인할 필요 없이 바로 원하는 것이 들어 있는 버킷을 찾을 수 있습니다.   가변성과 관련된 문제해시 테이블을 사용하는 경우에는 요소가 변경되어도 해시 코드는 다시 계산되지 않으며, 버킷 재배치도 이루어지지 않습..

아이템 48 - 더 이상 사용하지 않는 객체의 레퍼런스를 제거하라

메모리 관리를 자동으로 해준다고 해서 메모리 관리를 완전히 무시해 버리면, 메모리 누수가 발생하여 `OutOfMemoryError`가 발생할 수 있습니다. 따라서 '더 이상 사용하지 않는 객체의 레퍼런스를 유지하면 안 된다'라는 규칙을 지키는 것이 좋습니다. 안드로이드에서는 Activity를 여러 곳에서 자유롭게 접근하기 위해서 companion 프로퍼티에 이를 할당해 두는 경우가 있습니다.class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) activity = this } co..

아이템 37 - 데이터 집합 표현에 data 한정자를 사용하라

데이터를 한꺼번에 전달해야 할 때, data 한정자를 붙은 클래스를 사용합니다. data class Player( val id: Int, val name: String, val points: Int,)val player = Player(0, "Gecko", 9999)  data 한정자를 붙이면 다음 함수가 자동으로 생성됩니다.  toStringtoString은 클래스의 이름과 기본 생성자 형태로 모든 프로퍼티의 값을 출력해줍니다. 이는 로그를 출력할 때나 디버그할 때 유용하게 활용할 수 있습니다.print(player) // Player(id=0, name=Gecko, points=9999) equalsequals는 기본 생성자의 프로퍼티가 같은지 확인해줍니다. 그리고 hashCode는 ..

아이템 34 - 기본 생성자에 이름 있는 옵션 아규먼트를 사용하라

객체를 정의하고 생성하는 방법을 지정할 때 사용하는 가장 기본적인 방법은 기본 생성자를 사용하는 것입니다.class User(var name: Stirng, var surname: String)val user = User("Marcin", "Moskala")  기본 생성자로 객체를 만들 때는 객체의 초기 상태를 나타내는 아규먼트를 전달합니다. 데이터 모델 객체부터 살펴봅니다.data class Student( val name: String, val surname: String, val age: Int,) 프로퍼티는 기본 생성자로 초기화되어도, 디폴트 값을 기반으로 초기화되어도, 어떻게든 초기화만 되면 큰 문제가 없습니다. 일반적으로 기본 생성자가 좋은 방식인 이유를 이해하려면, 일단 생성..

아이템 25 - 공통 모듈을 추출해서 여러 플랫폼에서 재사용하라

다른 플랫폼에 동일한 제품을 구현한다면, 재사용할 수 있는 부분이 많을 것입니다. 특히 비즈니스 로직 부분읜 거의 동일합니다. 따라서 소스 코드를 공유할 수 있다면 큰 이득이 발생합니다.  풀스택 개발많은 회사가 웹 개발을 기반으로 하고, 웹사이트를 사용하며 백엔드 애플리케이션이 필요합니다.  다만, 프론트와 백엔드는 서로 사용하는 언어가 다르기에 분리해서 개발합니다.  백엔드에서 코틀린은 스프링 등의 다른 프레임워크를 사용할 수 있고, 코틀린 백엔드 프레임워크인 Ktor도 많이 사용되고 있습니다. 더 나아가서 코틀린은 자바스크립트로도 컴파일될 수 있습니다. 이미 많은 코틀린/JS 라이브러리가 있으며, 코틀린을 활용해 다양한 웹 애플리케이션을 만들 수 있습니다. 즉, 백엔드와 프런트엔드를 모두 코틀린으로..

아이템 21 - 일반적인 프로퍼티 패턴은 프로퍼티 위임으로 만들어라

프로퍼티 위임프로퍼티 위임은 프로퍼티의 접근자(getter, setter) 구현을 다른 객체에게 위임하는 방식입니다. 이를 통해 반복적으로 사용되는 프로퍼티의 행위를 추출해서 재사용할 수 있습니다.예를 들어 프로퍼티를 get할 때마다 반복적으로 특정 행위를 수행해야 한다면, getter에 해당하는 동작을 다른 객체에게 위임하여 대신 구현하는 방식으로 여러 프로퍼티에 공통적으로 적용할 수 있습니다. 대표적인 예로는 지연 프로퍼티가 있습니다.val value by lazy { createValue() } lazy 함수는 해당 프로퍼티를 처음 접근하려는 요청이 들어올 때 초기화를 수행하며, 이후에는 초기화된 값을 반환하는 동작을 제공합니다. 이 동작은 lazy 함수에 의해 생성된 객체가 프로퍼티의 getter..

아이템 18 - "코딩 컨벤션을 지켜라"

코틀린에는 대표적으로 아래와 같은 컨벤션 도구가 있습니다. Kotlin 코드 스타일 플러그인 (Kotlin Plugin)IntelliJ IDEA나 Android Studio와 같은 IDE에서 Kotlin 코드 스타일을 자동으로 적용할 수 있는 플러그인이 제공됩니다. 이 플러그인은 Kotlin 코드 스타일 가이드를 준수하도록 도와줍니다.ktlintktlint는 Kotlin 코드의 스타일을 검사하고 자동으로 수정해주는 도구입니다. Kotlin 스타일 가이드에 맞게 코드의 포맷을 자동으로 수정할 수 있습니다. 설정을 통해 팀의 코딩 스타일에 맞게 커스터마이즈 할 수도 있습니다.DetektDetekt는 Kotlin 코드의 품질을 분석하는 도구로, 코드 스타일뿐만 아니라 성능, 코드 복잡도, 잠재적인 버그 등을 ..

아이템 10- "단위 테스트를 만들어라"

사용자의 관점에서 애플리케이션 외부적으로 제대로 작동하는지 확인하는 것이 목표인 테스트는 개발자에게 유용하지만 충분하지는 않습니다. 이것만으로는 해당 요소가 올바르게 작동한다는 것을 완전하게 보증할 수는 없습니다. 그렇기 때문에 단위 테스트(Unit Test)가 필요합니다.  확인할 내용단위 테스트는 일반적으로 다음과 같은 내용을 확인합니다. 1. 일반적인 유스케이스이는 사용될 것이라고 예상되는 정상적인 입력 값에 대해 프로그램이 의도한 대로 작동하는지 확인하는 경우입니다.fun get(list: List, index: Int): Int { return list[index]}@Testfun `인덱스의 해당하는 값을 가져올 수 있어야 한다`() { val numbers = listOf(1, 2,..