일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Kotlin
- Database
- 개발
- 리액트
- MVVM
- Android
- 리액트네이티브
- 앱 개발
- 안드로이드
- 디자인패턴
- reactnative
- 안드로이드 디자인 패턴
- 프로세스
- 스레드
- 디자인 패턴
- 메모리
- OS
- 코틀린
- db
- 안드로이드 개발
- 앱
- cs
- CS지식
- 운영체제
- 액티비티
- 데이터베이스
- React
- github
- Operating System
- 앱개발
- Today
- Total
목록분류 전체보기 (72)
Tech Log
1. Observer Pattern이란? 주체가 어떤 객체(subject)의 상태 변화를 관찰하다가, 상태 변화가 있을 때마다 메소드 등을 통해 옵저버들에게 변화를 알려주는 디자인 패턴. 주체는 객체의 상태 변화를 보고 있는 관찰자를 말한다. 옵저버들은 객체의 상태 변화에 따라 전달되는 메소드, 이벤트 등을 기반으로 추가 변화 사항이 생기는 객체들이다. 위와 같이 주체와 객체를 분리하지 않고 상태가 변경되는 객체만을 기반으로 옵저버 패턴을 적용하기도 한다. 옵저버 패턴의 원리가 적용된 서비스 중에는 트위터가 있다. 팔로워들은 주체가 새로운 트윗을 올리면 알림을 받게 된다. 2. 예시 kotlin으로 작성한 옵저버 패턴 예시는 다음과 같다. interface Observer { fun update() } ..
프로젝트를 하면서 Repository Pattern을 사용해보았고, 데이터 레이어를 분리하였을 때 다른 이점이 더 있을까 궁금하여 조사해보았다. 해당 글은 안드로이드 플랫폼을 기준으로 기술하였습니다. 1. Repository Pattern이란? 데이터 레이어를 분리하는 디자인 패턴이다. 데이터 레이어에는 네트워킹 코드, Room 데이터베이스와 같이 데이터와 관련된 코드들이 들어간다. UI 부분과는 분리되어 데이터와 비즈니스 로직이 들어간다. 안드로이드는 위 그림과 같이 Repository 패턴을 적용하고 있다. Remote Data Source와 Local Data Source를 추상화하여 중앙 집중 처리 방식을 구현하였다. 이 덕분에 데이터를 사용하는 곳(ViewModel)에서 비즈니스 로직(Repos..
1. 의존성 종속성이라고도 한다. B의 변경 사항에 대해 A 또한 변해야 한다면, A가 B에 의존성이 있다는 것이다. B가 바뀌면 A도 바뀌는 것이다. 2. 의존성 주입 위 그림처럼 메인 모듈이 직접 하위 모듈에 대한 의존성을 주는 것이 의존성 주입을 적용하지 않는 것이다. 의존성 주입을 적용한다면, 메인 모듈이 직접 의존성을 주는 것이 아니라 간접적으로 주게 된다. 중간에 의존성 주입자(dependency injector)가 의존성 주는 부분을 가로채서 메인 모듈 대신 의존성을 주입하게 된다. 그 결과 메인 모듈과 하위 모듈은 디커플링 되었다. *디커플링(decoupling) : 모듈 간 의존성을 최소화 의존성 주입 시에는 상위 모듈은 하위 모듈에서 어떠한 것도 가져오지 않아야 한다. 또한 상위 모듈과..
1. Context란? Context라는 단어 자체를 번역하면 문맥이다. 문맥은 논리적인 흐름을 말한다. Context는 애플리케이션의 논리적인 흐름이다. 애플리케이션의 현재 상태를 나타내며, 애플리케이션 환경에 대한 전반적인 정보를 담고 있는 클래스다. 리소스에 접근할 수 있도록 도와준다. 브로드캐스트 리시버, Intent와 같이 메시지를 주고받으며 다른 안드로이드 컴포넌트와 상호작용할 때 필요하다. Context를 잘못사용하면 메모리 누수를 유발하므로 Context를 제대로 이해하고 사용해야 한다. 2. Context의 종류 Context는 주로 두 가지로 나뉜다. Activity Context, Application Context로 나뉜다. Activity Context Activity Contex..
프로젝트에서 안드로이드 SharedPreferences를 사용할 일이 많아서 종종 사용했었는데, 부끄럽지만 SharedPreferences를 싱글톤으로 사용한다는 것을 최근에 깨달았다 ... 지금이라도 싱글톤으로 사용하는 이유를 정리해보려고 한다. 1. SharedPreferences를 싱글톤으로 사용하는 이유 메모리 낭비를 줄이기 위함 : 매번 SharedPreferences 객체를 만들어서 메모리를 낭비하는 것보다 효율적으로 사용할 수 있다. 중복되는 데이터 저장 방지 : 여러 곳에서 SharedPreferences의 데이터에 접근하여 데이터를 저장한다면, 동일한 데이터가 중복으로 저장될 수 있다. 이를 방지하기 위해 싱글톤으로 사용한다. 코드 중복 방지 : SharedPreferences 객체를 생..
복잡도는 시간 복잡도와 공간 복잡도로 나뉜다. 시간복잡도 문제를 해결하는 데 걸리는 시간과 입력의 함수 관계. 어떠한 알고리즘 로직이 얼마나 오랜 시간 걸리는지를 나타내는 데 쓰인다. 보통 빅오 표기법으로 나타낸다. 이는 효율적인 코드로 개선하는데 쓰이는 척도가 된다. 빅오 표기법 입력 범위 n을 기준으로 로직이 몇 번 반복되는지 나타내는 것. 가장 영향을 많이 끼치는 항의 상수 인자를 빼고 나머지 항을 없앤 것이다. 속도 비교 O(1)과 O(n^2)는 입력 크기 n이 커질 수록 차이가 많이 나게 된다. 공간 복잡도 프로그램을 실행시켰을 때 필요로 하는 자원 공간의 양. 정적 변수로 선언된 것 말고도 동적으로 공간을 계속해서 필요로 하는 경우도 포함된다. 자료 구조에서 시간 복잡도 위 그림은 자료 구조에..
조인(join) 하나의 테이블이 아닌 두 개 이상의 테이블을 묶어서 하나의 결과물을 만드는 것. MySQL에서는 JOIN 이라는 쿼리, MongoDB에서는 lookup이라는 쿼리로 사용한다. MongoDB를 사용할 때 lookup은 되도록 사용하지 않아야 한다. MongoDB에서의 조인 연산은 관계형 데이터베이스보다 성능이 안좋다고 벤치마크 테스트에서 알려져 있다. MongoDB에서의 조인 연산 성능 따라서 조인하는 작업이 많을 경우 관계형 데이터베이스를 사용하는 것이 더 낫다. 조인의 종류 내부 조인(inner join) : 왼쪽 테이블과 오른쪽 테이블의 두 행이 일치하는 행이 있는 부분만 표기 왼쪽 조인(left outer join) : 왼쪽 테이블의 모든 행이 결과 테이블에 표기 오른쪽 조인(rig..
인덱스 데이터를 빠르게 찾을 수 있는 하나의 장치. 예로는 책의 마지막 장에 있는 찾아보기가 있다. 책의 본문 안에 찾고자 하는 항목을 찾아보기를 통해 빠르게 찾을 수 있다. 이러한 인덱스를 설정하면 테이블 안에 찾고자 하는 데이터를 빠르게 찾을 수 있다. B-트리 인덱스는 보통 B-트리 자료 구조로 이루어져 있다. B-트리는 루트 노드, 리프 노드, 브랜치 노드로 나뉜다. 만약 E를 찾는다고 하면, 전체 테이블을 탐색하는 것이 아니다. 위 그림처럼 E는 D와 L 사이에 있으므로, 루트 노드에서 D로 들어가고 리프 노드에서 E를 찾을 수 있다. 자료 구조 없이 탐색한다면 다섯 번을 탐색해야 한다. 이렇게 노드로 나누면 두 번만에 값을 찾을 수 있다. 트리 탐색은 루트 노드부터 일어난다. 그리고 브랜치 노..