일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- AAC ViewModel
- Coroutine
- 코루틴 공식 문서
- Android Compose Navigation
- BOJ
- Thread vs Coroutine
- 코틀린 에러 핸들링
- hilt
- 코루틴
- 스레드 vs 코루틴
- Hilt 에러
- power menu 라이브러리
- Kotlin Serialization
- runCatching
- 안드로이드 컴포즈
- 힐트
- android orbit
- Android Custom View
- power menu
- 안드로이드 무한 스크롤
- viewmodel
- 백준
- android compose orbit
- Android Compose
- 안드로이드 커스텀 뷰
- RecyclerView Sticky Header
- 백준 2615
- 코루틴 공식문서
- Sticky Header RecyclerView
- Unsupported metadata version. Check that your Kotlin version is >= 1.0: java.lang.IllegalStateException
- Today
- Total
목록분류 전체보기 (59)
Beeeam
개발자가 자신이 배포한 앱에 대해서 사용자들과 소통할 수 있는 방법은 많이 없다. Play Store에서 댓글로 소통하거나 email을 주고 받아야 한다. 앱 안에 문의하기 기능을 넣어 바로 개발자에게 Email을 보낼 수 있으면 참 편리할 것이다. 그럼 간단하게 앱에서 정해진 email 주소로 메일을 보낼 수 있는 방법을 알아보자. Intent를 사용하면 간단하게 구현 가능하다. layoutMoreContact.setOnClickListener { val email = Intent(Intent.ACTION_SEND) val receiverEmail = "abc@example.com" email.data = Uri.parse("mail to:") email.type = "text/plain" email...
무한 스크롤 Recycler view를 사용하면 여러 개의 데이터를 효율적으로 화면에 보여줄 수 있다. Recycler view를 사용하려면 adapter에 데이터를 전달해야 한다. 만약 보여주고자 하는 데이터의 개수가 적으면 이를 한번에 모두 전달하면 된다. 근데 만약 전달할 데이터가 100개, 1000개이면 이를 한 번에 전달하는 것은 비효율적이다. 그래서 이를 recycler view의 최하단에 도달하는 경우에 추가로 전달 받는 방법을 사용하면 좋다. 이러한 방법을 무한 스크롤이라고 부른다. 무한 스크롤을 구현하는 것을 생각하면 간단하다. recycler view 최하단 도달? → 데이터 추가 위의 방식으로 구현을 할 것이고 추가로 맨 마지막 아이템에 progress bar를 추가하여 데이터를 불러..
코틀린에서는 null이 될 수 있는 타입, 읽기 전용 컬렉션을 제공한다. 그리고 자바 타입 시스템에서 불필요하거나 문제가 되는 부분들은 제거하였다. 6.1 널 가능성 널 가능성은 NullPointerException (NPE) 오류를 피할 수 있게 한다. 6.1.1 널이 될 수 있는 타입 코틀린 타입 시스템은 널이 될 수 있는 타입을 명시적으로 지원한다. 먼저 함수에 인자로 널이 들어올 수 없는 경우에는 다음과 같이 함수를 정의한다. fun strLen(str: String) = str.length 이런 함수에 null을 인자로 넘기면 컴파일 시에 오류가 생긴다. 만약 null을 인자로 받을 수 있게 하려면 타입 이름에 물음표(?)를 명시하면 된다. fun strLen(str: String?) = .....
최근 진행하고 있는 프로젝트에서 밑과 같은 문제에 직면했다. 위의 영상은 현재 진행중인 프로젝트의 피드를 구현한 것이다. 피드는 RecyclerView로 구현하였다. 좋아요를 클릭하면 ViewModel의 피드 데이터에 이를 반영하고, 이에 따라 좋아요 개수를 보여주도록 의도하였지만 위와 같이 좋아요를 클릭 했을 때 해당 게시물 작성자의 프로필 사진이 없는 경우 이전에 좋아요를 눌렀던 게시물 작성자의 프로필 사진으로 변경이 되는 현상이 생겼다. 뭐가 문제일까? ViewModel의 데이터 문제? 클릭할 때마다 프로필 사진이 변경 되기 때문에 처음에는 ViewModel의 피드 데이터를 변경할 때 프로필 사진의 url 값이 바뀌는 것으로 판단하였고 해당 메서드에서 로그를 찍어봤다. 프로필 사진이 바뀌는 경우에도..
람다는 다른 함수에 넘길 수 있는 작은 코드 조각을 의미한다. 컬렉션 처리를 할 때 람다가 자주 사용된다. 5.1 람다 식과 멤버 참조 5.1.1 람다 소개: 코드 블록을 함수 인자로 넘기기 람다 식을 사용하면 코드 블록을 직접 함수의 인자로 넘길 수 있다. Listener를 람다로 구현할 수 있다. button.setOnClickListener { /* 클릭 시 수행할 동작 */ } 5.1.2 람다와 컬렉션 fun findTheOldest(people: List) { var maxAge = 0 var theOldest: Person? = null for (person in people) { if (person.age > maxAge) { maxAge = person.age theOldest = pers..
4장에서는 object 키워드에 대해서 설명한다. 이는 싱글톤 클래스(Singleton class), 동반 객체(companion object), 객체 식(object expression)을 표현할 때 사용된다. 4.1 클래스 계층 정의 코틀린에는 자바에는 없는 sealed 변경자가 있는데 이는 클래스의 상속을 제한한다. 4.1.1 코틀린 인터페이스 코틀린 인터페이스 안에는 추상 메서드 뿐만 아니라 구현이 있는 메서드도 정의할 수 있다. 하지만 아무런 상태(필드)도 들어갈 수 없다. interface Clickable { fun click() } 위의 인터페이스는 추상 메서드인 click을 가지는 인터페이스이다. 이를 사용하기 위해서는 이 인터페이스를 구현하는 클래스를 만들어야 한다. class Butt..
3.1 코틀린에서 컬렉션 만들기 코틀린은 자신만의 컬렉션 기능을 제공하지 않는다. 이러한 이유는 표준 자바 컬렉션을 활용하면 자바 코드와 상호작용하기 더 쉽기 때문이다. 코틀린 컬렉션은 자바 컬렉션과 같은 클래스이지만 자바보다 더 많은 기능을 사용할 수 있다. val nums = listOf(1, 14, 2) println(nums.last()) println(nums.max()) 위의 코드처럼 listof() 함수를 사용하여 컬렉션을 만들 수 있고, last(), max() 함수를 사용하여 컬렉션의 마지막 값, 최대 값을 구할 수 있다. 3.2 함수를 호출하기 쉽게 만들기 자바 컬렉션은 디폴트 toString 구현이 들어있다. val nums = listOf(1, 14, 2) println(nums) ..
함수 기본 형태 fun 함수이름(파라미터: 파라미터 타입): 반환 타입 { 함수 본문... } ex) fun test(n1: Int, n2: Int): Int { return if (a > b) a else b } fun 키워드를 사용하여 작성 자바와 달리 클래스 밖에서도 정의 가능 문(Statement) vs 식(Expression) 문: 아무런 값을 만들어내지 않는다. 식: 값을 만들어낸다. 무언가를 반환하는지 안하는지의 차이인듯? 반환하면 식, 안하면 문 코틀린에서는 식이 본문인 함수가 자주 사용된다. ex) 블럭이 본문인 함수 fun test(n1: Int, n2: Int): Int { return if (a > b) a else b } ex) 식이 본문인 함수 fun test(n1: Int, n..