전체 글
[프로그래머스/Kotlin] Lv2 프로세스 : Queue
문제 설명 운영체제의 역할 중 하나는 컴퓨터 시스템의 자원을 효율적으로 관리하는 것입니다. 이 문제에서는 운영체제가 다음 규칙에 따라 프로세스를 관리할 경우 특정 프로세스가 몇 번째로 실행되는지 알아내면 됩니다. 실행 대기 큐(Queue)에서 대기중인 프로세스 하나를 꺼냅니다. 큐에 대기중인 프로세스 중 우선순위가 더 높은 프로세스가 있다면 방금 꺼낸 프로세스를 다시 큐에 넣습니다. 만약 그런 프로세스가 없다면 방금 꺼낸 프로세스를 실행합니다. 3.1 한 번 실행한 프로세스는 다시 큐에 넣지 않고 그대로 종료됩니다. 현재 실행 대기 큐(Queue)에 있는 프로세스의 중요도가 순서대로 담긴 배열 priorities와, 몇 번째로 실행되는지 알고싶은 프로세스의 위치를 알려주는 location이 매개변수로 주..
[Kotlin] isNullOrBlank vs isNullOrEmpty 헷갈리지말자
오늘 포스팅에서는 string의 null과 공백을 비교하는 비슷하지만 다른 두 메서드에 대해서 알아보고자 한다. 아래 예시를 통해서 두 메서드의 차이를 알아보자. var a = "string" var b = "hyeon" var c = null var d = "" var e = " " isNullOrBlank fun CharSequence?.isNullOrBlank(): Boolean isNullOrBlank는 string 값이 null이거나 공백으로만 채워진 경우 true를 반환하는 함수 이다. 위 예시 string에 isNullOrBlank 메서드를 사용하면 출력값은 다음과 같다. var a = "string" var b = "hyeon" var c = null var d = "" var e = " ..
[Android] registerForActivityResult로 팝업 Activity를 만들어보자
들어가기 전 엄빠도 어렸다 서비스를 만들면서 두 사용자가 7일차까지 모두 답변을 마쳤을 때 홈화면 대신 엔딩화면이 팝업처럼 띄워지도록 구현해야했다. registerForActivityResult를 통해서 이 기능을 구현한 과정과 겪은 트러블슈팅을 포스팅해보도록 하겠다. registerForActivityResult 란? 기존의 Activity간의 이동을 할 때 startActivity(intent : Intent )를 통해서 단방향 이동을 하고, 데이터값 전달과 함께 양방향 이동을 위해서는 startActivityForResult(intent:Intent, requestCode:Int) 을 사용했다. 하지만 startActivityForeResult는 콜백 수행의 안정성, 보일러플레이트 코드의 증가 이슈..
[Android] LifecycleOwner란? viewLifecycleOwner와의 비교
들어가기 전 이번 포스팅에서는 ViewModel의 LiveData를 View에서 observe 할 때 사용하는 LifecycleOwner를 잘못 사용한 나의 사례를 바탕으로 LifecycleOwner란 무엇인지, viewLifecycleOwner와 비교해 fragment에서는 무엇을 사용해야하는지에 대해 알아보고자 한다. 안드로이드 프로젝트에서 mvvm 패턴을 구현할 때, model 에서 받아온 데이터를 가공해 view에 제공하기 위해서 viewModel을 활용한다. 이 때 AAC ViewModel에서 LiveData를 활용해 observerPattern을 이용할 것이다. 아래는 예시 코드이다. [그림 1]은 ViewModel에서 listQnaResponse라는 LiveData 객체를 생성하고, View..
[Android] UI State란 무엇일까?
들어가기 전 현재 나는 부모님과의 문답 서비스 엄빠도 어렸다 라는 프로젝트를 진행하고 있다. 프로젝트 진행 중 서버로부터 받아온 데이터가 UI에 나타날 때 빈 화면(데이터가 덜 표시된 화면)이 노출되는 경우가 종종 발생했다. 이 부분을 해결하고자 로딩뷰를 추가하기로 하였고, 공부하면서 로딩뷰를 어떻게 관리할까? 라는 의문이 생겼다. 그 과정에서 활용을 위해 UI State가 무엇인지에 관련된 글을 작성해보겠다. UI Layer UI의 역할은 화면에 애플리케이션 데이터를 표시하고 사용자의 상호작용의 기본 지점으로서의 역할을 수행하는 것이다. 상호작용 (Button 누르기) 또는 외부압력 (네트워크 응답)으로 인해 데이터가 변할 때 마다 변경사항이 반영하도록 UI가 업데이트 되어야 한다. https://hy..
[Kotlin] 코틀린의 sealed class 란?
Sealed class 정의 sealed calss는 Super 클래스를 상속 받는 Child 클래스의 종류를 제한하는 특성을 갖는 클래스이다. 어떤 Super 클래스를 상속받는 하위 클래스는 여러 파일에 존재하기 때문에 컴파일러는 해당 Super 클래스를 상속받는 하위 클래스가 얼마나 있는지 알지 못한다. 하지만 sealed class 는 동일한 패키지에 정의된 자신의 하위 클래스들을 인지해 컴파일러에서 그 외 다른 하위클래스는 존재하지 않음을 알 수 있다. 아래 예시를 통해 해당 상황을 보도록 하겠다. abstract class DogState class Running : DogState() class Eating : DogState() class Barking : DogState() 강아지의 상태를..
[우테코/Kotlin] 우아한 테크코스 온보딩 풀이 및 공부
들어가기 전 Kotlin 언어에 더 익숙해지기 위해서 요즘 우아한 테크코스 5기의 미션들을 하나씩 풀어가고 있다. 그 중 온보딩 미션의 풀이과정과 공부하면서 배운 내용들을 정리하고자 이 포스팅을 쓰게되었다. 문제1 : pobi 와 crong 각각 왼쪽,오른쪽 페이지 중 + / * 값이 더 큰 값을 구하고 이를 pobi와 crong의 대표값으로 설정한다. pobi와 crong 의 대표값 중 더 큰 값을 찾는 문제이다. 나의 풀이 fun getMaxNumber(page: Int): Int { var add = page var mul = page var resultAdd = 0 var resultMul = 1 while (add != 0) { resultAdd += (add % 10) add /= 10 } w..
[Android] Dependency Injection이란? + Hilt
들어가기 전 Clean Architecture를 공부하면서 '의존성' 낮추기, '결합도' 낮추기, '의존성' 주입, '의존성' 역전 등 지속적으로 의존성에 대한 내용이 언급되었다. 그래서 소프트웨어 설계에서 Dependency는 무엇을 의미하는지, 안드로이드에서는 이를 어떻게 적용할 수 있는지를 공부해보고자 한다. Dependency "A가 B를 의존한다." 라는 표현은 아래와 같은 뜻을 담고 있다. 의존대상 B가 변하면, 그것이 A에 영향을 미친다. - 이일민, 토비의 스프링 3.1, 에이콘(2012), p113 이런 의존관계를 UML의 표현을 빌려 A--->B로 표현할 수 있다. 이는 B의 기능이 추가나 변경되면 그 영향이 A에 미친다. B의 기능 추가나 변경이 A에 영향을 미치게되는 경우, B에게 ..
[Android] 안드로이드 MaskFilter로 blur 효과 구현하기
들어가기 전 엄빠도 어렸다 서비스를 만들면서 그림과같이 내가 답변을 하기 전에 상대가 답변을 할 경우 문답화면에서 상대 답변이 블러처리가 되어있는 디자인을 구현했어야 했다. 이 때 블러를 구현하기 위해서 사용했던 방법을 소개하고자 한다. Blur 효과 만들기 안드로이드 Paint BlurMaskFilter 사용 private fun setBlurText(isBlur: Boolean) { with(binding) { tvAnswerOther.setLayerType(View.LAYER_TYPE_SOFTWARE, null).apply { if (isBlur) tvAnswerOther.paint.maskFilter = BlurMaskFilter(16f, BlurMaskFilter.Blur.NORMAL) else..
[Android] Clean Architecture + MVVM 패턴
들어가기 전 안드로이드 프로젝트를 하면서 MVVM , Clean Architecture, Dependency injection etc... 이런 키워드들을 정말 많이 들었다. Sopt 처음 시작할 때 Clean Architecture를 적용한 프로젝트를 진행하고 싶다고 말할 정도로 나는 이 부분에 대한 공부를 하고싶었다. 이번 앱잼에서 MVVM 패턴을 적용했다는 점(Hilt (x))에서 반은 이뤘지만, 어떻게보면 왜 이렇게 사용하는지 조차 모르고 사용한 부분들이 많았다. 이번기회에 제대로 이해되지 않은 부분들도 다 이해하고 넘어가고자 이 포스팅을 작성한다. MVVM (Model - View - ViewModel) MVVM 패턴은 MVP 패턴에서 파생된 패턴으로 비즈니스 로직과 프레젠테이션 로직을 사용자 ..
[Android] 알림 커스텀과 안드로이드 13 알림 권한 설정
들어가기 전 이번 sopt 앱잼에서 FCM 알림을 담당하게 되면서, 알림 권한과 알림 커스텀에 대해 공부하게되었다. 1.안드로이드 13 알림권한 설정 이전까지는 안드로이드에서 알림을 표시할 때 권한이 없어도 개발자가 알아서 알림을 만들고 띄울 수 있었다. 하지만 이를 악용하는 사례(무분별한 광고알림)들이 많아지자 Android 8.0 (Oreo) 에서는 Notification Channel 을 도입시켰고, Android 13 (Tiramisu) 부터는 런타임 알림 권한 (POST_NOTIFICATIONS)이 추가되었다. 이제 안드로이드에서도 사용자에게 알림 권한을 요청하고, 사용자의 알림 허가를 받은 뒤에 알림을 표시할 수 있게된 것이다. 사용자의 알림 권한을 확인하고 권한을 요청하는 방법은 아래와 같다..
[Android] Intent 정리하기
Intent란?Intent는 다른 앱 구성요소에서 작업을 요청하는 데 사용할 수 있는 메시지 객체입니다. 인텐트는 여러 가지 방법으로 구성요소 간의 통신을 촉진하지만 다음과 같은 세 가지 기본적인 사용 사례가 있습니다.활동 시작활동이 완료될 때 결과를 수신하려면 startActivityForResult()를 호출합니다. 활동은 활동의 onActivityResult() 콜백에서 별도의 Intent 객체로 결과를 수신합니다. 자세한 내용은 활동 가이드를 참조하세요.Activity는 앱의 단일 화면을 나타냅니다. Intent를 startActivity()에 전달하여 Activity의 새 인스턴스를 시작할 수 있습니다. Intent는 시작할 활동을 설명하고 필요한 데이터를 전달합니다.서비스 시작Android 5..