Context란? 안드로이드에서 Context를 왜 사용하는지에 말하기 전에 일단 안드로이드가 말하는 Context의 정의에 대해 알아보겠습니다. Class Overview Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadc..
함수형 프로그래밍 함수형 프로그래밍은 프로그램의 주요 구성요소로 함수를 사용하며, 함수의 조합으로 프로그램을 작성하는 것을 강조합니다. 기본적으로 함수형 프로그래밍은 선언형 프로그래밍 의 특성을 함수들의 조합을 사용하여 구현하는 패러다임입니다. 그럼 선언형 프로그래밍은 뭘까요? 이를 위해서는 명령형 프로그래밍을 함께 이야기해야 합니다. 선언형 프로그래밍 vs 명령형 프로그래밍 선언형과 명령형의 차이는 무엇(What)을 할 것인지, 어떻게(How) 할 것인지를 설명하는 방식에 차이가 있습니다. 개발자는 먼저 명령형 프로그래밍을 기반으로 개발해 왔습니다. 다만 복잡하게 엉켜있는 코드를 관리하는 것은 매우 힘든 일이었습니다. 그렇기에 큰 문제를 작은 순수 함수로 나눠서 해결하는 기법인 함수형 프로그래밍 을 사..
1717번: 집합의 표현 초기에 $n+1$개의 집합 $\{0\}, \{1\}, \{2\}, \dots , \{n\}$이 있다. 여기에 합집합 연산과, 두 원소가 같은 집합에 포함되어 있는지를 확인하는 연산을 수행하려고 한다. 집합을 표현하는 프로그램을 작 www.acmicpc.net 나의 풀이 이 문제는 Union - Find 알고리즘을 알고있다면 쉽게 해결할 수 있는 문제입니다. 만약 이 개념을 알지 못했다면 접근하기가 어려울 수 있습니다. Union - Find 알고리즘은 미리 정의된 원소들의 집합을 관리하고, 이들 집합 간의 합병(Union) 및 검색(Find)를 수행하는 알고리즘입니다. 스패닝 트리에 대해 알고 있다면 Union - Find 알고리즘을 사용해서 스패닝 트리를 구현할 수 있다는 것도..
추상 클래스(Abstract Class) 추상 클래스는 직접 인스턴스화 할 수 없고 다른 클래스의 상위 역할만 할 수 있는 클래스를 말합니다. 클래스를 추상 클래스로 만들기 위해서는 abstract라는 변경자 키워드를 붙여야 합니다. 좀 더 쉽게 말하자면 기본 함수를 강제하고 기본 속성을 가질 때 사용합니다. 아래의 예시를 보겠습니다. abstract class Animal { abstract val species: String abstract fun makeSound() } class Dog : Animal() { override val species: String = "개" override fun makeSound() { println("멍멍!") } } fun main() { val dog = Do..
Kotlin은 코드의 생산성과 가독성을 향상시키기 위해 설계된 정적 타입 언어입니다. 이 언어는 개발 프로세스를 단순화하는 여러 기능을 제공하며, 그 중에서도 sealed class와 enum class가 있습니다. 이 두 종류의 클래스는 서로 다른 목적을 가지며 다른 시나리오에서 사용될 수 있습니다. 이 글에서는 Kotlin에서 sealed class와 enum class의 차이점 및 코드의 디자인과 구현을 개선하는 데 어떻게 활용할 수 있는지 탐색해보겠습니다. sealed class와 enum class의 차이 아래는 발생할 수 있는 HTTP 오류를 sealed class와 enum class로 표현한 코드입니다. 두 개의 클래스 모두 2개의 HTTP 오류를 가지고 있으며 `code` 프로퍼티를 통해..
이 글에서는 Android의 4대 컴포넌트인 ContentProvider에 대해 더 자세하게 알아보고자 합니다. ContentProvider란? ContentProvider는 중앙 저장소로의 데이터 엑세스를 관리합니다. ContentProvider를 사용해 다른 애플리케이션과 데이터를 공유하고 관리할 수 있습니다. ContentProvider의 주요 목적은 데이터에 대한 추상화 계층을 제공하고, 다른 애플리케이션에서 데이터에 접근하는 방법을 표준화하는 것입니다. Content Provider를 사용하는 상황은 다음과 같습니다. 다른 애플리케이션에서 ContentProvider에 엑세스하기위한 코드를 구현 나의 애플리케이션에서 ContentProvider를 새롭게 생성하여 다른 애플리케이션과 데이터 공유 ..
Collection 컬렉션은 일련의 객체를 담는 컨테이너로 사용됩니다. 컬렉션은 여러 객체를 저장하고 관리하며, 필요에 따라 데이터를 추가, 삭제, 검색, 정렬하는 등의 작업을 수행할 수 있습니다. Java와 Kotlin에서 제공하는 컬렉션 인터페이스와 클래스는 다양한 형태의 컬렉션을 다룰 수 있도록 다양한 기능을 제공합니다.컬렉션은 크게 List, Set, Map로 분류될 수 있습니다 이 3가지 Collection은 중복을 허용하는지, 순서가 보장되는지에 따라 구분할 수 있습니다. Mutable(가변) vs Immutable(불변) 변수에서의 가변과 불변은 해당 값이 변경될 수 있는가에 따라 나뉩니다. 쉽게 말하자면 ‘read-only’와 ‘read&write’로 보면 됩니다. 컬렉션도 마찬가지입니다...
안드로이드의 메모리 관리 안드로이드의 ART와 Dalvik 가상 머신은 페이징과 메모리 매핑을 사용하여 메모리를 관리합니다. Android가 앱 프로세스 및 메모리 할당을 관리하는 방법을 이제부터 알아보고 이런 방식이 어떻게 나오게 되었는지도 같이 알아보고자 합니다. 메모리 할당 프로세스는 메모리(RAM)의 빈 공간에 할당되어야 합니다. 아래 그림과 같은 상황이라고 생각해 보겠습니다. 프로세스 C를 메모리에 할당해야 하는데 어디에 넣을지 잘 모르겠습니다. 이를 할당하는 방법은 최초 적합, 최적 적합, 최악 적압이 있습니다. 아래의 그림을 보면 이해가 됩니다. 운영체제가 빈 공간을 순서대로 검색하다 프로세스 C가 들어갈 수 있는 공간을 발견하면 그 공간에 프로세스를 배치하는 방식을 최초 적합이라고 합니다...