분류 전체보기310 함수형 프로그래밍이란? 프로그래밍의 패러다임이란 무엇일까? 프로그래밍 패러다임은 프로그래머에게 프로그래밍의 관점을 갖게 하고 코드를 어떻게 작성할 지 결정하는 역할을 합니다. 새로운 프로그래밍 패러다임을 통해서 새로운 방식으로 생각하는 법을 배우고, 이를 바탕으로 코드를 작성하게 됩니다. 대표적인 프로그래밍 패러다임에는 절차적, 객체지향, 함수형 프로그래밍이 존재합니다. 명령형 프로그래밍 문제를 어떻게 해결해야 하는지 컴퓨터에게 명령을 내리는 방법의 프로그래밍입니다. fun main() { val arr = arrayOf(1, 2, 3, 4, 5) for (num in arr) { println(num) } } 1. 절차(순차)적 프로그래밍 사실 절차지향이라고 알려져 있는 절차적 프로그래밍은 번역 때문에 오해의 여지가 큽니다... 2023. 8. 5. [Android] ViewModelScope 제대로 알고 사용하는걸까? ViewModel에서는 viewModelScope를 사용하라던데? 항상 코루틴을 사용하면서 MVVM 패턴을 적용할 때 ViewModel에서 viewModelScope를 사용하신 경험들이 다들 있으실 겁니다. 안드로이드 공식문서에서도 ViewModel에서 다음과 같이 사용하라고 정리되어있습니다. class MyViewModel: ViewModel() { init { viewModelScope.launch { // Coroutine that will be canceled when the ViewModel is cleared. } } } 하지만 코루틴을 사용할 땐 Dispatcher를 지정해주는 것도 중요한데, 이런 부분을 간과하고 문서대로만 사용했다는 생각이 들어서 한번 내부적으로 정리해보려고 합니다. vi.. 2023. 7. 29. [이펙티브 코틀린] 4장 추상화 설계 추상화는 복잡성을 숨기기 위해 사용되는 단순한 형식을 의미합니다. 대표적인 예로 인터페이스가 있습니다. 인터페이스는 클래스라는 복잡한 것에서 메서드와 프로퍼티만 추출해서 간단하게 만들었으므로, 클래스의 추상화라고 할 수 있습니다. 어떤 대상(객체)에 대한 추상화는 여러 가지가 나올 수 있습니다. 객체는 여러 행태로 추상화해서 표현할 수 있습니다. 프로그래밍에서의 추상화 추상화를 설계한다는 것은 단순하게 모듈 또는 라이브러리로 분리한다는 의미가 아닙니다. 함수를 정의할 때는 그 구현을 함수 시그니처 뒤에 숨기게 되는데, 이것이 바로 추상화입니다. 아이템 26. 함수 내부의 추상화 레벨을 통일하라 컴퓨터 과학이 높은 레벨과 낮은 레벨을 확실하게 구분하고 있는 것처럼, 함수도 높은 레벨과 낮은 레벨을 구분해서.. 2023. 7. 5. [Android] strings.xml에서 %d%를 해결하는 방법 다음과 같이 적용해주시면 됩니다. %1$d%% resources.getString(R.string.percent, 10) 2023. 7. 2. [이펙티브 코틀린] 3장 재사용성 아이템 19. knowledge를 반복하여 사용하지 말라 "프로젝트에서 이미 있던 코드를 복사해서 붙여넣고 있다면, 무언가가 잘못된 것이다." 우리 프로그램에서 중요한 knowledge를 크게 두 가지 뽑는다면, 다음과 같습니다. 1. 로직 (logic): 프로그램이 어떠한 식으로 동작하는지와 프로그램이 어떻게 보이는지 2. 공통 알고리즘 (Common Algorithm): 원하는 동작을 하기 위한 알고리즘 둘의 가장 큰 차이점은 시간에 따른 변화입니다. 비즈니스 로젝은 시간이 지나면서 계속해서 변하지만, 공통 알고리즘은 한 번 정의된 이후에는 크게 변하지 않습니다. 물론 공통 알고리즘을 최적화를 하거나, 같은 카테고리의 더 빠른 알고리즘으로 바꿀 수도 있지만, 동작은 크게 변하지 않습니다. 핵심은 프로.. 2023. 6. 18. [Android] Service에 대한 정리 Android에서 Service란? 백그라운드에서 오래 실행되는 작업을 수행할 수 있는 애플리케이션 구성 요소이며 사용자 인터페이스를 제공하지 않습니다. 다른 애플리케이션 구성 요소가 서비스를 시작할 수 있으며, 이는 사용자가 다른 애플리케이션을 전환하더라도 백그라운드에서 계속해서 실행됩니다. 이 외에도, 구성 요소를 서비스에 바인딩하여 서비스와 상호작용할 수 있으며, 심지어는 프로세스 간 통신 (IPC)도 수행할 수 있습니다. 예를 들어 한 서비스는 네트워크 트랜잭션을 처리하고, 음악을 재생하고 파일 I/O를 수행하거나 콘텐츠 제공자와 상호작용할 수 있으며 이 모든 것을 백그라운드에서 수행할 수 있습니다. Service 유형 서비스에는 총 3가지 타입이 존재합니다. 1. Foreground Servic.. 2023. 6. 18. [Android] SharedPreference commit()과 apply() 중 어떤 걸 써야할까? commit()이 편집기에서 편집 중인 SharedPreferences Object로 preferences 변경사항을 다시 commit합니다.요청된 수정 작업이 원자적으로 수행되어 모든 수정 작업을 대체할 수 있습니다.두 편집자가 동시에 수정할 때 commit을 호출하는 마지막 편집자가 승리합니다.반환 값이 중요하지 않고 application의 메인 스레드로부터 사용한다면 apply를 대신 사용하는 것이 좋습니다.@return 새 값이 영구 스토리지에 성공적으로 기록된 경우 true를 반환합니다.소스 코드@Overridepublic boolean commit() { long startTime = 0; if (DEBUG) { startTime = System.currentTimeMillis(); } M.. 2023. 5. 23. Rxjava - subscribeOn과 observeOn의 차이 subscribeOn()과 observeOn()의 차이점 subscribeOn은 여러분 호출되더라도 맨 처음의 호출만 영향을 주며 어디에 위치하든 상관없습니다. observeOn은 여러번 호출될 수 있으며 이후에 실행되는 연산에 영향을 주므로 위치가 중요합니다. 핵심은 observeOn()이 호출되는 위치입니다. observeOn()이 실행된 시점부터 뒷 로직들은 mainThread에서 돌아가서 시간이 오래 걸리는 로직의 경우 mainThread를 잡고 있어서 문제가 발생할 수 있습니다. // # 1 myService.getUsers() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .flatMap(Observable::.. 2023. 5. 9. RxJava - 스케줄러(Scheduler)란? 스케줄러(Scheduler)란 무엇일까? RxJava 비동기 프로그래밍을 위한 쓰레드(Thread) 관리자, 즉 스케줄러를 이용해서 어떤 쓰레드에서 무엇을 처리할지 제어할 수 있다. RxJava의 스케줄러를 통해 쓰레드를 위한 코드의 간결성 및 쓰레드 관리의 복작합을 줄일 수 있다. RxJava에서 스케줄러를 지정하기 위해서 subscribeOn(), observeOn() 유틸리티 연산자를 사용 생산자 쪽의 데이터 흐름을 제어하기 위해서는 subscribeOn() 연산자를 사용한다. 소비자쪽에서 전달받은 데이터 처리를 제어하기 위해서는 observeOn() 연산자를 사용한다. subscribeOn(), observeOn() 연산자는 각각 파라미터로 Scheduler를 지정해야 한다. Scheduler의 .. 2023. 5. 9. 이전 1 2 3 4 5 6 7 8 ··· 35 다음