개발 공부 49

kotlin enum class(열거형 클래스)

enum class는 열거 상수들로 이루어져있고 이 열거 상수는 각 객체로 이루어져있다. 상태 값이나 비슷한 속성 값을 상수로 만들어 편하게 사용할 수 있다. 하단의 예시를 보면 쉽게 이해할 수 있다. enum class DayOfWeek{ MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY } fun getWeeklyTodoList(today:DayOfWeek):String{ return when(today){ DayOfWeek.MONDAY -> "work" DayOfWeek.TUESDAY -> "work.." DayOfWeek.WEDNESDAY -> "work..." DayOfWeek.THURSDAY -> "work...." DayOfWeek.FRID..

android, kotlin 시간차이 구하기

android 에서 시간을 가져오는 방법에는 여러가지가 있다. ​ 현재 시간을 가져올 때 많이 쓰는 System.CurrentTimeMillis() , 시간 차이를 구할 때 많이 쓰는 SystemClock.elapsedRealTime() 그 외 SystemClock.uptimesMills(), SystemClock.elapsedRealTimeNanos() 등등이 있다. ​ 1. System.CurrentTimeMillis() - 세계 표준시(UTC)로 1970년 1월 1일 00시 00분 00초를 기점으로 지금까지 얼마나 흘렀는 지를 밀리세컨드 단위로 리턴(Long 타입으로 반환)​​ ​ - 디바이스에 설정된 시각을 기준으로 리턴하기 때문에 시각이 변경되는 경우에는 시간 차이를 구할 때 정확하지 않을 수 ..

kotlin get(), set() 프로퍼티

kotlin은 java와는 다르게 자동으로 getter/setter를 생성해줘서 신경쓸 필요는 없지만, 값을 가지고 오거나 넣는 것 밖에는 하지 못한다. ​ 가지고 올 때 값을 계산해서 가져온다던지, 값을 넣을때 다른 것도 변화 시키고 싶다던지 할 때 get()과 set()이 사용된다. ​ 예제) 스카프의 사이즈(가로*세로)를 구해서 주문을 넣는다고 가정했을 때, 각 주문한 스카프 사이즈와 총 사이즈를 구하기 var totalSize = 0 set(value) { field = value order(value) } fun main(arg: Array) { val scarf1 = Scarf(3, 2) val size1 = scarf1.size addSize(size1) val scarf2 = Scarf(5..

andrid SoundPool 음성파일/효과음 재생

SoundPool을 사용하면 간단하게 음성파일(효과음)을 재생할 수 있다. 메모리에 로드하여 사용하기 때문에 용량은 크지 않는게 좋다. ​ 1. 음성 파일 등록 음성 파일을 res에 New Resource Directory - raw파일을 추가해서 이 raw파일 안에 음성 파일을 넣는다. ​ 2. 코드 (kotlin) //sound pool build 해서 load 시킴 (기본 준비) private val soundPool = SoundPool.Builder().build() //load 할 때 sound id가 리턴으로 옴 var soundId = soundPool.load(this, R.raw.your_video_name, 1) // play soundPool.play(soundId, 1f, 1f, ..

android 권한 요청

권한을 요청할 때 라이브러리만 사용을 했었는데, 제공하는 것만으로도 간단하게 요청할 수 있다. 안드로이드에서 말하는 권한 워크플로는 아래와 같다. ​ 권한 확인 여부 → (권한 없을시) 권한 요청 → (권한 거부시) 권한이 왜 필요한지 설명 → 권한 요청 ​ ​ 상단의 플로우를 따라 예시로 내부 저장소 권한을 요청하는 코드를 작성하면 이렇다. (android develope 예시) when { ContextCompat.checkSelfPermission( this, android.Manifest.permission.READ_EXTERNAL_STORAGE ) == PackageManager.PERMISSION_GRANTED -> { // 내부 저장소 접근하는 코드 작성 } shouldShowRequestP..

android/kotlin Thread, runOnUiThread

안드로이드는 메인 thread에서면 ui 변경이 가능하다. ​ 하지만 ui 변경이 필요없는 작업(DB에서 정보를 가져오는 작업 등)에서는 메인 thread를 사용할 필요가 없다. ​ 그럴 때 thread를 별도로 사용했다가 UI 변경이 필요해지면 해당 사용중인 thread 에서 runOnUiThread()를 호출해서 UI 변경이 가능하다. ​ runOnUiThread()를 호출하면, 현재 tread가 메인 thread가 아닐 경우 메인 thread의 이벤트 큐에 추가된다. Thread(Runnable { // 작업 runOnUiThread { //UI 변경 } // 작업 }).start() https://developer.android.com/reference/android/app/Activity

android NumberPicker custom number/string 원하는 값으로 변경, wrapSelectorWheel

원하는 일자만 나오고, 자연스럽게 넘어가는 선택지를 만들고 싶어서 찾아보던 중 number picker에 원하는 string 이나 값을 넣을 수 있다는 사실을 발견! 바로 테스트 해보기로 했다. val numberPicker : NumberPicker by lazy{ findViewById(R.id.numberPicekr) } val values = listOf("10일","20일","30일") numberPicker.minValue = 0 numberPicker.maxValue = values.size-1 numberPicker.wrapSelectorWheel = false numberPicker.displayedValues = values.toTypedArray() 매우 만족스럽게 잘 나왔다 ㅎㅎ ​..

Kotlin 컬렉션 정렬 sort, sorted, sortedby, sortDescending, sortWith

1. sort() / sorted() 정렬을 잘 알지 못하고 쓰다보니 어쩔 때는 sort만 되고 어쩔 때는 sorted만 될 때가 있어서 당혹스러울 때가 있었다. 또 정렬을 했는데 왜 안바뀌지? 하고 무지하던 때도 있었다. 😥 이러한 경험을 토대로 이 2개를 위주로 정리해 보기로 했다. //예시 1 val list = listOf(5,4,8,2,1,10) list.sort() // error //예시 2 val list = listOf(5,4,8,2,1,10) list.sorted() println(list) // [5, 4, 8, 2, 1, 10] 1-1 sort() - 변경이 가능한 mutable 리스트의 순서를 변경 - 리스트 자체의 순서를 변경 (리턴 x) val list = mutableList..

List, Map, Set 정리

강의를 듣다보니 과거에는 쉽게 이해하기 어려웠던, 특히 map과 set의 차이가 어이없게도 왜 어려웠지 싶을 정도로 이해가 됐다. ​ List - 중복 가능 - 순서가 필요할시 혹은 기본적인 목록 (순서인 index와 값으로 구성) ​ Map - 중복 불가 - 순서는 중요하지 않고 key, value로 구성 ​ Set - 중복 불가 - 순서는 중요하지 않고 value로만 구성 ​ ​ 3가지 예시를 통해 구분해보자! 1. 일주일간 야근 목록 2. 로또번호를 저장 3. 날짜별 판매 수량 ​ ⬇️ ​ 1. 일주일동안 같은 사람이 야근할 수 있으니 중복가능, 목록 - List ​ 2. 숫자만 필요하며 ,중복이 불가함 - Set (2,12,44...) ​ 3. 날짜별 한 개의 값으로 중복불가 , 판매 수량이라는 ..

개발 공부 2022.07.03

[android] SharedPreferences 파헤치기

간단하게 정보를 저장할 경우 SharedPreferences를 많이 사용하고 있다. 키-값으로 데이터를 저장하고 있으며 Int, Long, String, Double, Float, Boolean으로 저장 가능하다. 1. 사용 방법 val sharedPref = getSharedPreferences( "이름", Context.MODE_PRIVATE) //저장 sharedPref.edit { putString("이름","저장 정보") //String 형으로 저장 putInt("이름",0) //Int 형으로 저장 } //값 꺼내기 sharedPref.getString("이름","") // sharedPref.getString("이름") 이렇게도 가능 sharedPref.getInt("이름",0) 1-1 값 가..