[이펙티브 코틀린] Item2. 변수의 스코프를 최소화하라
·
Kotlin/이펙티브 코틀린
스코프라는 것은 요소를 볼 수 있는 컴퓨터 프로그램 영역으로, 가시성(visible)을 의미합니다. 상태를 정의할 때는 변수와 프로퍼티의 스코프를 최소화하는 것이 좋습니다. 프로퍼티보다는 지역 변수를 사용하는 것이 좋다. 최대한 좁은 스코프를 갖게 변수를 사용한다. 예를 들어 반복문 내부에서만 변수가 사용된다면, 변수를 반복문 내부에 작성하는 것이 좋다. // 나쁜 예 var user: User for (i in users.indices) { user = users[i] print("User at $i is $user") } // 조금 더 좋은 예 for (i in users.indices) { val user = users[i] print("User at $i is $user") } // 제일 좋은 예..
[Conference] Google Extensions I/O Extended 2023 Seoul 참석 리뷰
·
Conference
안녕하세요.오늘은 Google Extensions I/O Extended 2023 Seoul 에 참석하게되어 리뷰해보도록 하겠습니다.  이번 컨퍼런스는 2023년 7월 29일 토요일에 강남 삼성역 코엑스에서 개최하였습니다. 티켓 가격은 10,000원이었으며 굿즈도 주는데 이 정도면 굉장히 혜자스러운 것 같습니다.  위치는 2호선에 강남 삼성역이라 접근성이 아주 좋다고 할 수 있겠네요. 코엑스가 워낙 넓어서 등에 Security 씌여져있는 분에게 물어보고 찾아갔었습니다.     이번 행사의 타임테이블입니다. 트랙이 3개로 나눠져있네요. 트랙1 섹션들 보면 발표자분들이 어디서 많이 본 네임드 분들이 눈에 띕니다.    제가 도착했을때는 이미 키노트 진행 중이었습니다. 인도 사람인거 같은데 영어로 스피치 하셔..
[이펙티브 코틀린] Item1. 가변성을 제한하라
·
Kotlin/이펙티브 코틀린
읽기, 쓰기가 가능한 프로퍼티나 mutable 객체는 상태를 가집니다. 상태를 갖게 한다는 것은 변한다는 것이고, 변하는 요소를 관리하는 것은 어렵습니다. 프로그램을 이해하고 디버그하기 힘들어진다. 코드의 실행을 추론하기 어려워진다. 멀티스레드 프로그램일 경우 충돌이 발생할 수 있다. 테스트하기 어렵다. 정렬되어 있는 리스트의 경우 가변 요소를 추가한다면, 요소의 변경이 일어날 때마다 리스트 전체를 다시 정렬해야한다. 가변성을 제한할 수 있는 방법은 immutable 객체를 만들거나, 프로퍼티를 변경할 수 없게(read only) 막는 것이 가장 쉽습니다. 이 중에서 많이 사용되고 중요한 것들을 정리해 보면 다음과 같습니다. 읽기 전용 프로퍼티(val) 가변 컬렉션과 읽기 전용 컬렉션 구분하기(immut..
[Conference] KotlinConf'23 Global in Songdo(with GDG) 참석 리뷰
·
Conference
안녕하세요. 오늘은 KotlinConf'23 Global in Songdo에 대해 리뷰해보도록 하겠습니다. KotlinConf'23은 4월 12일 - 14일간 Jetbrains이 네덜란드에서 개최하는 코틀린 컨퍼런스로, Google Korea, Jetbrains, Mondrian AI, MoBeran의 지원을 받아 이번 송도에서 5월 13일. 오프라인으로 행사를 진행하게 되었다고 합니다. 컨퍼런스 비용은 일반티켓 20,000원이고, 학생티켓은 10,000원이었습니다. 위치는 인천 송도의 인천 스타트업 파크였으며, 인천대입구역 4번출구 도보 3분거리라 접근성이 좋습니다. Agenda 및 Time Table은 다음과 같이 이루어져 있었습니다. 특이하게 뒷풀이가 있습니다. 사전에 참석여부를 조사하며, 음주가 ..
[Android] Android KTX 잘 알아보기
·
Android
안녕하세요. 이번 포스팅에서는 Android KTX에 대해서 알아보도록 하겠습니다. Android KTX는 Android Jetpack과 기타 Android 라이브러리에 포함된 Kotlin 확장 프로그램 세트입니다. KTX 확장 프로그램은 간결하고 직관적인 Kotlin을 Jetpack, Android 플랫폼, 기타 API에 제공합니다. 예를 들어 SharedPreferences로 작업할 때는, sharedPreferences .edit() .putBoolean("key", value) .apply() 위의 코드를 다음과 같이 간결하게 사용할 수 있게 해줍니다. sharedPreferences.edit(commit = true) { putBoolean("key", value) } Android KTX는 다..
[Android] MVVM AAC ViewModel 잘 알아보기
·
Android
안녕하세요. 이번 포스팅에서는 ViewModel에 대해서 알아보도록 하겠습니다.      ViewModel 개념 ViewModel 은 비즈니스 로직 또는 화면 수준 상태(State) 홀더 클래스입니다. UI에 상태를 노출하고 관련 비즈니스 로직을 캡슐화합니다. 주요 이점은 상태를 캐시하여 구성 변경에도 이를 유지한다는 것입니다.즉, 액티비티 간에 이동하거나 구성 변경(화면 회전 등)을 따를 때 UI가 데이터를 다시 가져올 필요가 없습니다.     ViewModel의 이점UI에 표시되는 데이터를 저장하는 일반 클래스를 사용하면 액티비티 또는 프래그먼트 사이를 이동할 때 문제가 될 수 있습니다. 예를 들어, 화면 회전이 이루어지게 될 때, Activity가 파괴(onDestroy)된 다음 다시 화면이 만들어..
[Android] MVVM AAC LiveData 잘 알아보기
·
Android
안녕하세요. 이번 포스팅에서는 LiveData에 대해서 알아보도록 하겠습니다. LiveData의 개념 1. LiveData는 기본적으로 Observer Pattern을 활용하며, 말 그대로 실시간 데이터를 나타냅니다. 2. LiveData는 Observable한 데이터 홀더 클래스입니다. 3. 일반적인 Observable 클래스와 달리 LiveData는 수명 주기를 인식합니다. 즉, 액티비티, 프래그먼트, 서비스 등 다른 앱 구성요소의 수명 주기를 고려합니다. 4. 수명 주기 인식을 통해 LiveData는 활동 수명 주기 상태에 있는 앱 구성요소 Observer(관찰자)만 업데이트합니다. 5. Observer의 수명 주기가 STARTED 또는 RESUMED 상태이면 LiveData는 Observer를 활..
[코틀린 완벽 가이드] 14장 : 코틀린 테스팅
·
Kotlin/코틀린 완벽 가이드
1. 코테스트 명세 1. 코테스트 시작하기 코테스트 io.kotest:kotest-runner-junit5-jvm:4.5.0 을 사용한다. 2. 명세 스타일 코테스트는 여러 명세 스타일을 지원한다. 프로젝트에서 여러 스타일을 섞어 쓰거나 AbstractSpec 클래스 또는 AbstractSpec 클래스의 하위 클래스 중 하나인 AbstractStringSpec과 같은 클래스를 구현함으로써 명세 스타일을 커스텀할 수 있다. 테스트 케이스를 정의하려면 명세 클래스 중 하나를 상속해야 한다. 그 후 클래스 생성자에 테스트를 추가하거나 상위 클래스 생성자에게 전달하는 람다 안에 테스트를 추가한다. 테스트 자체를 정의하는 방법은 스타일에 따라 달라지며, 대부분의 경우 DSL과 비슷한 API를 통해 테스트를 정의한..
[코틀린 완벽 가이드] 13장 : 동시성
·
Kotlin/코틀린 완벽 가이드
1. 코루틴 1. 코루틴과 일시 중단 함수 코루틴 라이브러리의 기본 요소는 일시 중단 함수(suspend function) 이다. 이 함수는 원하는 지점에서 함수의 실행을 중단하거나 다시 실행을 계속 진행하게 할 수 있다. suspend fun foo() { println("Task started") delay(100) println("Task finished") } delay() 함수는 일시 중단 함수다. 이 함수는 현재 스레드를 블럭시키지 않고 자신을 호출한 함수를 일시 중단시키며 스레드를 다른 작업을 수행할 수 있게 풀어준다. 일시 중단 함수가 아닌 일반 함수에서는 사용할 수 없다. 동시성 코드의 동작을 제어할 때 공통적인 생명 주기와 문맥이 정해진 몇몇 작업이 정의된 구체적인 영역 안에서만 동시성..
[코틀린 완벽 가이드] 11장 : 도메인 특화 언어
·
Kotlin/코틀린 완벽 가이드
1. 연산자 오버로딩 연산자 오버로딩은 +, -, *, / 등 코틀린 내장 연산자에 대해 새로운 의미를 부여할 수 있게 해주는 언어 기능이다. 1. 단항 연산 단항 연산은 피연산자가 한 개인 연산으로 오버로딩할 수 있는 단항 연산자로는 전위+나 -,! 연산자가 있다. 컴파일러는 이런 연산자를 적절한 함수 호출로 펼쳐준다. 식 의미 +e e.unaryPlus() -e e.unaryMinus() !e e.not() 예를 들어 색을 표현하는 이넘 클래스가 있다고 생각해보면, enum class Color { BLACK, RED, GREEN, BLUE, YELLOW, CYAN, MAGENTA, WHITE; operator fun not() = when (this) { BLACK -> WHITE RED -> CY..