kotlin 48

[kotlin] 이터레이션 기초: while, for 루프

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. while 루프 코틀린에는 자바와 같은 문법의 `while` 과 `do-while` 루프가 있다. while (조건) { // 조건이 참인 동안 본문을 반복 실행 /* ... */ } do { /* ... */ } while (조건) // 맨 처음에 무조건 본문을 한 번 실행, 그 후 조건이 참인 동안 본문을 반복 실행 수에 대한 iteration: range(범위), progression(수열) 자바에서는 `for` 루프를 아래처럼 사용한다. `for (어떤 변수 i 를 초기화하는 식; 각 루프 후 조건 검사 ;변수 i를 루프를 한번 실행할 때마다 갱신)` 코틀린에서는 `for` 루프를 ..

Kotlin 2023.12.27

[Kotlin] enum & when & smart cast(스마트 캐스트)

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. enum 클래스 `enum` 은 soft keyword 라고 한다. `class` 앞에 붙을 때는 특별한 의미를 가지지만, 그렇지 않을 경우에는 일반 이름으로 사용이 가능하다. 반면에 `class` 는 그냥 keyword 이다. 그래서 클래스를 표현하는 변수 등을 정의할 때는 이름을 `class` 로 하지 못한다. 보통 `clazz` 또는 `mClass` 라고 정의한다. enum class Color( val r: Int, val g: Int, val b: Int // 상수의 프로퍼티를 정의 ) { RED(255, 0, 0), // 각 상수를 생성할 때 그에 대한 프로퍼티 값을 지정 ORA..

Kotlin 2023.12.27

[Kotlin] 클래스와 프로퍼티 기초

Kotlin in Action 을 공부하고 Effective kotlin 의 내용을 조금 참조하여 정리한 글입니다. 이번에는 클래스를 선언하는 기본 문법, 그리고 프로퍼티를 다룬다. JavaBean 클래스를 코틀린 코드로 보기 먼저 간단한 `JavaBean` 클래스 `Person` 을 봅시다. public class Person { private final String name; public Person(String name) { this.name = name; // 필드가 늘어날 수록 생성자 바디에 비슷한 코드가 반복적으로 들어간다. } public String getName() { return name; } } `Person` 클래스는 필드를 오직 `String` 타입의 `name` 만을 가진다. 만..

Kotlin 2023.12.27

안드로이드 레트로핏 api 호출하는 인터페이스에서 @Header 중복을 제거하기

지난 4개월 전쯤 친구를 통해서 여러 다른 분들과 플레이스토어에 바바-BABA 라는 앱을 출시했습니다. 작성했던 코드들을 천천히 보면서 리팩토링 및 버그 픽스를 하며 공부를 더 해보려고 합니다. 일단 오늘 볼 부분은 서버와 api 통신을 하는 부분인데요. 이 프로젝트에서는 Retrofit 을 사용했고, Di 는 Hilt 를 사용하였습니다. 서버와 api 통신을 하는 전체 구조 먼저 간단한 UML 을 통해 기존에 어떻게 서버 통신을 진행하고 있는지를 간단히 표현하자면 아래와 같습니다. 클라이언트에서 AlbumApi 를 호출할 때 Retrofit 객체를 만들어 주고, 또 OkHttpClient 객체를 만들어 주는 부분은 Hilt 로 구현되어 있습니다. 화살표가 UML 의 표준으로 그린 것도 아니고 실제로 H..

안드로이드 Navigatioin Back Stack 없애기

문제 발생 배경 MVVM 아키텍처, Android Jetpack Library 을 적용한 BaBa 라는 프로젝트를 진행 중에 하나의 문제에 도달했습니다. 결론부터 말하면 Navigation 의 back stack 저장 문제였습니다. 문제 시나리오는 아래와 같습니다. 어떤 아기의 앨범 데이터를 서버로부터 불러오는 경우가 있습니다. 이 앨범 데이터들은 ‘월별’, ‘년도별’, ‘전체’ 로 나뉘어져 화면에 띄워져야 합니다. 그리고 월별, 년도별에서 앨범을 클릭하면 해당 월/ 년도의 앨범을 화면에 띄워줍니다. 이런 식으로 말이죠. 팀원들과의 회의를 통해 월별, 년도별, 전체 앨범 데이터를 계속해서 서버와 통신하여 데이터를 가져오는 것보다 한 번의 모든 앨범을 서버에서 클라이언트로 가져온 후 클라이언트에서 데이터를..

Android/UI 2023.05.17

Android ViewPager2 간단히 뜯어보기

BABA 라는 Android Application side project 을 하는 도중 아래와 같은 화면을 만들어야 했습니다. 이 때 ViewPager2 에 대한 이해가 부족한 것 같아 공부하게 되었습니다. (물론 아래 gif 는 ViewPager2 와 Custom 한 TabLayout 을 같이 사용한 것입니다. viewPager2 의 내부 동작 방식 ViewPager2 는 FragmentStateAdapter 을 extend 해서 구현해야 합니다. 그런데 FragmentStateAdapter 는 RecyclerView.Adapter 을 extend 하고 있습니다. 즉, ViewPager2 는 RecyclerView.Adapter 을 사용하여 동작합니다. RecyclerView 에서의 Item 은 Lis..

Android/UI 2023.05.05

Android Thread, Handler, Runnable

이번에는 Android 에서의 Thread, Handler, Runnable 에 대해서 알아봅니다. 사실 작년에 프로젝트를 할 때도 자주 사용되는 기능이고, 또 클론 코딩 등 공부를 하면서도 자주 사용했지만 이번에도 누군가 저에게 완벽하게 설명해보라 하면... 자신이 없어서 꼭 한 번 정리해보고 싶었습니다. 포스팅을 읽다보면 뒤의 내용이 조금씩 앞에 나올 수도 있지만 끝까지 쭉 읽어보면 이해가 될 겁니다! 그럼 Thread 부터 봅시다.Thread (스레드)Thread는 프로세스 내에서 “순차적으로 실행되는 실(실행 흐름)" 의 최소 단위이다.안드로이드 앱에서는 메인 스레드는 메시지 큐 수신을 기다리는 루프를 실행하고, 사용자 입력, 시스템 이벤트, 화면 그리기 등의 메시지가 수신되면 각 메시지에 매핑된..

Android/Theory 2022.09.03

코틀린 - 고차함수와 람다함수

코틀린은 함수형 프로그래밍을 지원하는 언어이다. 이것은 계속해서 알고 있던 사실이다. 그런데 함수형 프로그래밍이 도대체 무엇이냐고 하면 쉽게 대답하지 못했다.... 그래서 함수형 프로그래밍에 대해 알아보고 코틀린에서의 강력한 기능인 고차함수와 람다함수를 알아보도록 할 것이다. 함수형 프로그래밍 함수형 프로그래밍(functional programming)이란, 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임의 하나이다. —(위키백과) 즉, 부수효과가 없는 순수 함수를 1급 객체로 간주하여 패러미터로 넘기거나 반환값으로 사용할 수 있으며 참조 투명성을 지킬 수 있다. 참고로 1급 객체는 아래 특징을 가진다. 일급 객체는 함수의 매개변수가 될 수 있다. 일급 객체..

Kotlin 2022.08.29