| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 31 |
- recyclerview
- 상태관리
- 절대 주소
- NestedScrollView
- Kotlin
- 리사이클러뷰
- http 역사
- viewModelScope
- AAC
- 내부 단편화
- http발전과정
- AsyncListDiffer
- apk 빌드 과정
- 데코레이터 패턴
- 안드로이드
- GetX
- 운영체제
- Android
- 프로세스
- 리사이클러뷰풀
- Dispatchers
- flutter
- 플로이드워셜
- 뷰홀더
- 물리 메모리
- 자이고트
- DiffUtil
- appcompatacitivity
- 디자인 패턴
- appcompatactivity
- Today
- Total
목록분류 전체보기 (77)
hong's android
ViewModel ViewModel 클래스는 비즈니스 로직 또는 화면 상태 홀더이다. 기존의 문제점들과 사용하는 이유 단순한 적은 데이터들은 Activity의 onSavedState() 메소드를 통해 번들 형태로 저장할 수 있다. 하지만 더 큰 데이터들은 해당 방법이 부적합하다. 또 뷰에서 비동기 호출을 하게 되면 액티비티의 생명주기에 따라 리소스가 낭비되는 경우가 있다. ViewModel의 이점 UI 상태를 유지할 수 있습니다. 비즈니스 로직에 대한 액세스 권한을 제공합니다. ViewModel의 생명주기 ViewModel의 생명주기는 Activity의 생명주기보다 길다. ViewModelStoreOwner의 생명주기를 따른다. 그렇기 때문에 액티비티 화면이 회전되어도 ViewModel의 데이터는 유지된..
상태 패턴 객체의 내부 상태가 바뀜에 따라 객체의 행동을 바꿀 수 있다. 직접 상태를 체크하고 상태에 따라 행동을 변경하는 것이 아니라 상태를 객체화하여 상태가 행동을 할 수 있도록 위임하는 패턴이다. 기존엔 객체의 상태를 저장하고, 변경하기 위해서 상태 별 상수 값을 만들어서 상태 변수에 저장했다. 그리고 어떠한 행동이 일어날 때마다 해당 상태에 맞게끔 해당 행동 메소드를 호출했다. 하지만 만약 상태가 추가, 변경 될수록 상태를 분기하는 코드를 수정해야 하고 OCP원칙에 따라 변경에 닫혀있고 확장에 열려있어야 하는데 이를 위반한다. 아래 블로그에 문제점에 대해 잘 정리되어 있다. https://velog.io/@y_dragonrise/디자인-패턴-상태-패턴State-Pattern Context는 sta..
컴포지트 패턴(Composite Pattern) 객체를 트리구조로 구성해서 부분-전체 계층구조를 구현한다. 컴포지트 패턴을 사용하면 클라이언트에서 개별 객체와 복합 객체를 똑같은 방법으로 다룰 수 있다. 서브 클래스안에 서브 클래스와 값이 존재 해야할때 모든 클래스들을 탐색하거나 단일 클래스를 호출할때 클라이언트에서 신경써야하는 부분들이 한 두개가 아니다. node(leaf를 가지고 있는 원소) 와 leaf(자식이 없는 원소) 모두 똑같은 패턴으로 호출 할 수 있다. 최상단 node가 있고 하위에 노드와 leaf가 섞여있어도 전체를 대상으로 작업을 수행할수도 있다. 클라이언트는 Component 형태의 Leaf, Composite를 다룬다. 하지만 Composite는 계층 구조를 관리하는 일과 메뉴 관련..
CoroutineScope 란? 모든 coroutine은 scope 내에서 실행되어야 합니다. GlobalScope는 별도의 생명주기를 신경 쓰지 않고 앱의 시작 ~ 종료까지 유지되는 scope이다. aac workmanager와 함께 백그라운드에서 장기간 실행 되어야 하는 경우 적합하다. CoroutineScope는 어떤 목적(네트워크 통신, io 등)을 가지고 종료하기 위한 scope이다. GlobalScope와 CoroutineScope은 CoroutineScope 인터페이스를 상속받는다. public interface CoroutineScope { /** * Context of this scope. */ public val coroutineContext: CoroutineContext } Glob..
클래스 인스턴스를 하나만 만들고, 그 인스턴스로의 전역 접근을 제공한다. 즉, 인스턴스를 추가로 만들지 못하게 하여야 하고, 전역 접근 지점을 제공해야 한다. 연결 풀이나, 스레드 풀, 사용자 설정 같은 부분에서 싱글턴 패턴이 많이 쓰인다. 방법 1. 일반적인 싱글톤 패턴 Public class Singleton{ private static Singleton uniqueInstance; private Singleton(){} public static Singleton getInstance(){ if(uniqueInstance == null){ uniqueInstance = new Singleton(); } return uniqueInstance; } } 문제점 멀티 스레드 환경에서 동시에 getInsta..
적은 수정을 해야 되는 경우에도 새로운 클래스를 만들고 객체를 생성하는 것은 비 효율적이다. 클래스 선언과 객체 생성을 동시에 가능하다. 1. 객체 식 (Object expressions) window.addMouseListener(object : MouseAdapter() { override fun mouseClicked(e: MouseEvent) { /*...*/ } override fun mouseEntered(e: MouseEvent) { /*...*/ } }) 추상 클래스나 인터페이스를 구현해서 클래스를 따로 정의하지 않고 사용할 수 있다. 즉, 익명 클래스를 만들 수 있다. class C { private fun getObject() = object { val x: String = "x" } ..