분류 전체보기
Mergesort
Mergesort
2018.04.17특징 폰 노이만 성님이 개발함. in-place 정렬이 아닌 대표적인 정렬 알고리즘. 정렬된 결과가 저장될 리스트가 1개 더 필요하니까 배열 크기 만큼의 공간 n이 하나 더 있어야 하는 것인데... 잘 짜면 n/2 만큼만 더 사용하도록 할 수도 있음. 외부 정렬도 가능 (메모리에 정렬 대상을 다 올려둘 필요 없이, 디스크에서 일부 가져와서 정렬하고 넣어두고 다시 일부 가져와서 정렬하고 반복하여 전체를 정렬하는 것이 가능함) Mergesort 구현 Top-down 구현 방식과 Bottom-up 구현 방식이 있음. 리스트를 끝까지 분할한 다음, 정렬된 두개의 배열의 맨 앞에서부터 시작하여 index를 하나 씩 증가시키면서 정렬된 1개의 리스트로 merge 하는 것이 아이디어. 이를 Two Pointer 라고..
7장. 릴레이션 정규화
7장. 릴레이션 정규화
2018.04.12ER 스키마 >> 릴레이션 사상 간단한 요소에서 복잡한 요소 순으로 사상한다. 단계 1: 정규 엔티티 타입 단계 2: 약한 엔티티 타입 단계 3: 2진 1:1 관계 타입 단계 4: 정규 2진 1:N 관계 타입 단계 5: 2진 M:N 관계 타입 단계 6: 3진 관계 타입 단계 7: 다치 애트리뷰트 정규화 Normalization 정규화란 무엇이고 왜 하나? 정규화란? 릴레이션 스키마를 함수적 종속성과 기본키를 기반으로 분리하는 것. 왜 하나? 1. 데이터 중복 최소화 2. [수정, 삽입, 삭제] 이상 최소화 (보통 데이터 중복 -> 갱신 이상으로 이어지는 경우가 많음.) 세 가지 갱신 이상 수정 이상 : 데이터가 중복되어 모든 항목을 일괄 수정하지 않으면 데이터 불일치가 발생 삽입 이상 : 불필요한 정보를..
Quicksort
Quicksort
2018.04.08Quicksort 기본 동작 방식 ko.wikipedia.org/wiki/퀵 정렬 일단 기본적인 동작 방식은 이걸 참고. en.wikipedia.org/wiki/Quicksort 목차를 보면 영문 위키가 더 상세하다. pivot 고르는 법, 다양한 퀵소트 wiki/Sorting_algorithm#Comparison_of_algorithms Worst case : \\(\Theta(n^2)\\) Best case : \\(\Theta(n\lg n)\\) Average case : \\(\Theta(n\lg n)\\)에 근사 대부분의 케이스에 \\(\Theta(n\lg n)\\)로 동작하며 여기에 숨겨진 상수 인자도 매우 작기 때문에 Worst는 \\(\Theta(n^2)\\)이지만 \\(\Theta(n\l..
6장. 물리적 데이터베이스 설계 : 인덱스 기본 원리
6장. 물리적 데이터베이스 설계 : 인덱스 기본 원리
2018.04.06디스크 상에서 화일의 레코드 배치 결국 DB에 저장되어 있는 레코드들도 최종적으로는 파일 안에 들어있다. [원하는 레코드가 위치한 블록을 어떻게 빨리 찾을 것인가?, 블록을 얼마나 적게 읽을 것인가?]가 핵심. Disk IO는 block 단위로 이루어지기 때문에 block을 몇 개 읽어야 하는지가 중요하다. (page 단위로 메모리에 올리게 되니까) DBMS의 버퍼 관리 어차피 DB에 있는 레코드들도 다 디스크에 저장되어 있다가 메모리에 올라가야 서빙이 가능함. DBMS는 메모리에서 버퍼 영역을 따로 잡고 관리함. 다단계 인덱스 대부분의 다단계 인덱스는 B+ 트리를 사용 06장. 인덱스 구조 / 07장. 인덱스된 순차 화일 : B트리 클러스터링 인덱스 vs 비 클러스터링 인덱스 클러스터링 인덱스 (기본 ..
5장. 데이터베이스 설계와 ER 모델
5장. 데이터베이스 설계와 ER 모델
2018.01.07ERD (Entity-Relationship Diagram) 중요성 개체-관계 모델 설명 wiki ERD가 없으면 기존 구조를 파악하기 어려워, 새로운 컬럼이나 테이블을 추가하면서 역정규화 되거나, 같은 내용의 컬럼이 서로 다른 테이블 2개에 각각 생성되는 경우가 빈번하다. 이는 갱신이상 등 데이터 불일치를 유발한다. 이런 식으로 같은 용도의 테이블을 여러개 추가하다 보면 돌이킬 수 없어진다. 나중에 정규화 하려고 했는데 기존 레코드를 싹 다 복사해서 2개로 나눠주어야만 한다거나, migration이 운영 환경에 영향을 주는 등 불상사가 발생할 수 있다. 따로 손으로 관리하기 보단 DB tool, IDE 등에서 현재 table 구조 바탕으로 ERD 자동 생성해주는 기능 사용하는게 편한데, FK를 사용하지..
Android Context 정리
Android Context 정리
2018.01.04Context란? + 안드로이드의 프로세스 / 어플리케이션 차이 https://stackoverflow.com/questions/10347184/difference-and-when-to-use-getapplication-getapplicationcontext-getbaseconcontext와 싱글턴 정리하면Application Context(``kt applicationContext``)는 어플리케이션 전역적으로 하나만 존재하는 싱글턴 객체이며Activity Context(``kt this``)는 Activity life-cycle을 따르는 Context다. View를 조작하거나 어떤 Activity와 밀접한 관련이 있는 경우 ``kt this``를, 나머지 경우(특히 싱글턴이나 DB)에는 ``kt ap..
adb로 디버깅
adb로 디버깅
2017.12.29https://developer.android.com/studio/command-line/adb.html?hl=ko#howadbworks ```bashadb devices``` adb로 DB 접근하기```bashD:\AndroidSDK\platform-tools>adb shellroot@generic_x86:/ # cd data/data/com.example.umbum.openweatherexp/databasesroot@generic_x86:/data/data/com.example.umbum.openweatherexp/databases #sqlite3 user.dbSQLite version 3.8.6.1 2015-05-21 17:24:32Enter ".help" for usage hints.sqlite>..
onClick in XML vs. onClickListener
onClick in XML vs. onClickListener
2017.12.29퍼포먼스는 둘 다 같다.코드가 길지 않다면 onClick을 사용하는 방식이,코드가 길어진다면 onClickListener를 사용하는 방식이 괜찮아 보인다. onClick in XML의 장점 ( API 4 부터 사용 가능 )``kt onClickListener()``를 지정하는 방식은 ``kt inflate`` 또는 ``kt findViewById()``로 View를 불러와야 하기 때문에 후자의 경우 리스너를 지정할 View 마다 id를 지정해주어야 하지만 ``kt onClick=``은 id를 지정할 필요가 없다.C#에서 리소스의 Event를 지정할 때 사용하는 방식도 이런 식이다.```xml``````ktfun onClickDelete(v: View) {}``` onClickListener의 장점``kt..
Android Permission 정리
Android Permission 정리
2017.12.24Android 6.0 Marshmallow(API 23) 이전에는 `` AndroidManifest.xml``에 필요한 위험 권한을 선언해놓고, 앱을 설치할 때 한 번에 권한을 획득하는 방식이었다.그러나 6.0부터는 런타임에 위험 권한을 요청해야 한다.기기에서 Android 5.1 이하를 실행 중이거나, 또는 앱의 `` targetSdkVersion``이 22 이하인 경우: 여러분이 매니페스트에 위험 권한을 나열하는 경우, 사용자는 앱을 설치할 때 권한을 부여해야 하며, 권한을 부여하지 않을 경우 시스템이 앱을 설치하지 않습니다.기기에서 Android 6.0 이상이 실행 중이고, 그리고 앱의 `` targetSdkVersion``이 23 이상인 경우: 앱이 매니페스트에 권한을 나열해야 하며, 그리고 앱이..
View와 layout Inflate. + ViewHolder // kotlinx
View와 layout Inflate. + ViewHolder // kotlinx
2017.12.22Anko등을 사용하지 않는 일반적인 경우라면 layout은 xml을 이용해서 만들기 때문에,xml layout을 불러와 실제로 앱에 그려주는 작업(View로 만드는 작업)이 필요한데 이를 inflate라고 한다.```ktval elementView = inflater.inflate(R.layout.layout_list_element, parent, false)``` ViewHolder를 사용하고 싶다면, inflate한 View가 가지고 있는 각각의 View 컴포넌트를 멤버로하는 ViewHolder를 만들고 `` ViewHolder``객체를 만든다. ``kt findViewById()``를 처음 한 번만 호출하고 결과를 ViewHolder에 저장해 놓는 방식으로, 매번 resolve할 필요가 없어 효율적..
안드로이드 플랫폼의 구조 / ART
안드로이드 플랫폼의 구조 / ART
2017.12.08https://developer.android.com/guide/platform/index.html?hl=ko#art Android는 모바일 기기를 위한 Linux 기반 커널과 미들웨어, 핵심 애플리케이션들을 포함한 소프트웨어 스택이라고 볼 수 있다. ART, Android Runtimehttps://developer.android.com/guide/practices/verifying-apps-art.html?hl=ko https://source.android.com/devices/tech/dalvik/?hl=ko```.class --- DX ---> .dex : Dalvik.dex -- dex2oat --> .oat : ART```안드로이드 5.0 롤리팝(API 21)부터는 Dalvik VM 대신 AR..
애플리케이션 기본 항목. 앱의 기본 동작 원리
애플리케이션 기본 항목. 앱의 기본 동작 원리
2017.12.08https://developer.android.com/guide/components/fundamentals.html 안드로이드의 메모리 관리 관점에서 프로세스 / 어플리케이션 관리 Android 앱은 일단 기기에 설치되고 나면 각자 자체적인 보안 샌드박스 안에 존재합니다.Android 운영 체제는 멀티유저 Linux 시스템으로, 여기서 각 앱은 각기 다른 사용자와 같습니다.앱을 설치하면서 앱에 UID, GID(e.g., app_15)를 할당하고 이 권한으로 실행되기 때문에 각각의 앱이 서로 액세스할 수 없다.(이 ID는 시스템만 사용할 수 있으며 앱에서는 인식하지 못함) 시스템은 앱 안의 모든 파일에 대해 권한을 설정하여 해당 앱에 할당된 UID/GID만 이에 액세스할 수 있도록 합니다.각 프로세스가 자..